06.01.2017, 14:19
Why does not that kill the one player in the hostile gang, there is no war for territory. Or, as it is set to 1 member of the gang, to be able to pick up the territory of the enemy gang. Does not work
Код:
#include <a_samp> #define TEAM_GROVE 1 #define TEAM_BALLAS 2 #define TEAM_VAGOS 3 #define TAKEOVER_TIME 10 // how many seconds needed to take over the zone #define MIN_MEMBERS_TO_START_WAR 1 // how many team members needed in a zone to start a war #define MIN_DEATHS_TO_START_WAR 1 // how many team members must be killed in a zone to start a war enum eZone { Float:zMinX, Float:zMinY, Float:zMaxX, Float:zMaxY, zTeam } new ZoneInfo[][eZone] = { {2337.9004,-1808.8383,2590.2043,-1610.3673,TEAM_GROVE}, {2084.7,-1808.8383,2337.9004,-1610.3673,TEAM_BALLAS}, {2590.2043,-1808.8383,2842.3,-1610.3673,TEAM_VAGOS} }; new ZoneID[sizeof(ZoneInfo)]; new ZoneAttacker[sizeof(ZoneInfo)] = {-1, ...}; new ZoneAttackTime[sizeof(ZoneInfo)]; new ZoneDeaths[sizeof(ZoneInfo)]; new gTeam[MAX_PLAYERS]; new Teams[] = { TEAM_GROVE, TEAM_BALLAS, TEAM_VAGOS }; main() { print("LS-GW"); return 1; } public OnGameModeInit() { for(new i=0; i < sizeof(ZoneInfo); i++) { ZoneID[i] = GangZoneCreate(ZoneInfo[i][zMinX], ZoneInfo[i][zMinY], ZoneInfo[i][zMaxX], ZoneInfo[i][zMaxY]); } SetTimer("ZoneTimer", 1000, true); AddPlayerClass(107,2337.9004,-1808.8383,2590.2043,-1610.3673,0,0,0,0,0,0); return 1; } public OnPlayerRequestClass(playerid, classid) { SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746); return 1; } public OnPlayerSpawn(playerid) { for(new i=0; i < sizeof(ZoneInfo); i++) { GangZoneShowForPlayer(playerid, ZoneID[i], GetTeamZoneColor(ZoneInfo[i][zTeam])); } for(new i=0; i < sizeof(ZoneInfo); i++) { GangZoneShowForPlayer(playerid, ZoneID[i], GetTeamZoneColor(ZoneInfo[i][zTeam])); if(ZoneAttacker[i] != -1) GangZoneFlashForPlayer(playerid, ZoneID[i], GetTeamZoneColor(ZoneAttacker[i])); } return 1; } public OnPlayerDeath(playerid, killerid, reason) { if(IsPlayerConnected(killerid) && gTeam[playerid] != gTeam[killerid]) // not a suicide or team kill { new zoneid = GetPlayerZone(playerid); if(zoneid != -1 && ZoneInfo[zoneid][zTeam] == GetPlayerTeam(playerid)) // zone member has been killed in the zone { ZoneDeaths[zoneid]++; if(ZoneDeaths[zoneid] == MIN_DEATHS_TO_START_WAR) { ZoneDeaths[zoneid] = 0; ZoneAttacker[zoneid] = GetPlayerTeam(killerid); ZoneAttackTime[zoneid] = 0; GangZoneFlashForAll(ZoneID[zoneid], GetTeamZoneColor(ZoneAttacker[zoneid])); } } } } forward ZoneTimer(); public ZoneTimer() { for(new i=0; i < sizeof(ZoneInfo); i++) // loop all zones { if(ZoneAttacker[i] != -1) // zone is being attacked { if(GetPlayersInZone(i, ZoneAttacker[i]) >= MIN_MEMBERS_TO_START_WAR) // team has enough members in the zone { ZoneAttackTime[i]++; if(ZoneAttackTime[i] == TAKEOVER_TIME) // zone has been under attack for enough time and attackers take over the zone { GangZoneStopFlashForAll(ZoneID[i]); ZoneInfo[i][zTeam] = ZoneAttacker[i]; GangZoneShowForAll(ZoneID[i], GetTeamZoneColor(ZoneInfo[i][zTeam])); // update the zone color for new team ZoneAttacker[i] = -1; } } else // attackers failed to take over the zone { GangZoneStopFlashForAll(ZoneID[i]); ZoneAttacker[i] = -1; } } else // check if somebody is attacking { for(new t=0; t < sizeof(Teams); t++) // loop all teams { if(Teams[t] != ZoneInfo[i][zTeam] && GetPlayersInZone(i, Teams[t]) >= MIN_MEMBERS_TO_START_WAR) // if there are enough enemies in the zone { ZoneAttacker[i] = Teams[t]; ZoneAttackTime[i] = 0; GangZoneFlashForAll(ZoneID[i], GetTeamZoneColor(ZoneAttacker[i])); } } } } } stock GetTeamZoneColor(teamid) { switch(teamid) { case TEAM_GROVE: return 0x00FF0088; case TEAM_BALLAS: return 0xFF00FF88; case TEAM_VAGOS: return 0xFFFF0088; } return -1; } stock IsPlayerInZone(playerid, zoneid) { new Float:x, Float:y, Float:z; GetPlayerPos(playerid, x, y, z); return (x > ZoneInfo[zoneid][zMinX] && x < ZoneInfo[zoneid][zMaxX] && y > ZoneInfo[zoneid][zMinY] && y < ZoneInfo[zoneid][zMaxY]); } stock GetPlayersInZone(zoneid, teamid) { new count; for(new i=0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i) && GetPlayerTeam(i) == teamid && IsPlayerInZone(i, zoneid)) { count++; } } return count; } stock GetPlayerZone(playerid) { for(new i=0; i < sizeof(ZoneInfo); i++) { if(IsPlayerInZone(playerid, i)) { return i; } } return -1; }