Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // =============== [ Adaptar ao seu GM edita abaixo ] =================
- #define fixColour(%0) ((%0 & ~0xFF) | 0x77)
- #define GetGangColor(%0) random(%0) // COLOCA AQUI VARIAVEL DA COR
- #define playerGang[%0] GetPlayerGangID(%0) // COLOCA AQUI VARIAVEL DA GANG
- // ============== [ Configurar Algo ] ===============================
- #define MAX_DOM 1 // jogadores preciso para dominar
- #define MAX_GZ 44 // maximo de gz
- #define MAX_GANGS 32
- // ============= [ Código ] =======================================
- enum gzInfo
- {
- Float:floatPos[4],
- gzId,
- gzCor,
- gzLocal,
- gzGangID
- }
- new gangZonasCriadas;
- new gzData[MAX_GZ][gzInfo];
- new pPlayersGz[MAX_GZ][MAX_GANGS];
- new galeraDominando[MAX_GANGS][MAX_GZ];
- new pontosArrecadados[MAX_GZ][MAX_GANGS];
- public OnPlayerUpdate(playerid)
- {
- static
- Float:posX,
- Float:posY,
- Float:posZ;
- GetPlayerPos(playerid, posX, posY, posZ);
- for(new i = gangZonasCriadas; i > -1; i--) {
- if(posX > gzData[i][floatPos][0] && posY > gzData[i][floatPos][1] && posX < gzData[i][floatPos][2] && posY < gzData[i][floatPos][3]) {
- if(playerGang[playerid]) {
- #if !defined foreach
- #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
- #endif
- foreach(Player, x) {
- if(playerGang[playerid] == playerGang[x]) {
- pPlayersGz[i][playerGang[x]]++;
- }
- }
- if(pPlayersGz[i][playerGang[playerid]] >= MAX_DOM && !galeraDominando[playerGang[playerid]][i] && gzData[i][gzGangID] != playerGang[playerid]) {
- pPlayersGz[i][playerGang[playerid]]= 0;
- galeraDominando[playerGang[playerid]][i] = 1;
- if (!gzData[i][gzGangID]) {
- SetTimerEx("dominandoUncoped", 1000, false, "iii", i, playerGang[playerid], 0);
- GangZoneFlashForAll(i, fixColour(GetGangColor(playerGang[playerid])));
- }
- else {
- SetTimerEx("dominandoOcupado", 60000, false, "iiii", i, playerGang[playerid], gzData[i][gzGangID],0);
- SetTimerEx("atualizarContadores", 1000, false, "iii", i, playerGang[playerid], gzData[i][gzGangID]);
- galeraDominando[gzData[i][gzGangID]][i] = 1;
- GangZoneFlashForAll(i, fixColour(GetGangColor(playerGang[playerid])));
- }
- }
- }
- // aqui se quiser tu coloca textdraws com a gangzone info
- }
- }
- return true;
- }
- dominandoUncoped(gz, gg, ps);
- dominandoOcupado(gz, gg1, gg2);
- atualizarContadores(gz, gg1, gg2, ps);
- public atualizarContadores(gz, gg1, gg2, ps)
- {
- #if !defined foreach
- #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
- #endif
- new membrosNaAreas = 0;
- foreach(Player, x) {
- if(playerGang[x] == gg1) { // muda variavel da gang aqui
- static
- Float:posX,
- Float:posY,
- Float:posZ;
- GetPlayerPos(x, posX, posY, posZ);
- if(posX > gzData[gz][floatPos][0] && posY > gzData[gz][floatPos][1] && posX < gzData[gz][floatPos][2] && posY < gzData[gz][floatPos][3])
- membrosNaAreas++;
- }
- }
- pontosArrecadados[gz][gg1] += membrosNaAreas * 10;
- if(membrosNaAreas < MAX_DOM) {
- foreach(Player, x) {
- if(playerGang[x] == gg1) { // muda variavel da gang aqui
- SendClientMessage(x, 0xFFFFFFFFF, "[ERRO] Território não dominado por falta de membros " #MAX_DOM);
- }
- }
- galeraDominando[gg1][gz] = 0;
- galeraDominando[gg2][gz] = 0;
- return false;
- }
- membrosNaAreas = 0;
- foreach(Player, x) {
- if(playerGang[x] == gg2) { // muda variavel da gang aqui
- static
- Float:posX,
- Float:posY,
- Float:posZ;
- GetPlayerPos(x, posX, posY, posZ);
- if(posX > gzData[gz][floatPos][0] && posY > gzData[gz][floatPos][1] && posX < gzData[gz][floatPos][2] && posY < gzData[gz][floatPos][3])
- membrosNaAreas++;
- }
- }
- pontosArrecadados[gz][gg2] += membrosNaAreas * 10;
- if(membrosNaAreas < MAX_DOM) {
- foreach(Player, x) {
- if(playerGang[x] == gg2) { // muda variavel da gang aqui
- SendClientMessage(x, 0xFFFFFFFFF, "[ERRO] Território não dominado por falta de membros " #MAX_DOM);
- }
- }
- galeraDominando[gg1][gz] = 0;
- galeraDominando[gg2][gz] = 0;
- return false;
- }
- membrosNaAreas = 0;
- foreach(Player, x) {
- if(playerGang[x] == gg1 || playerGang[x] == gg2) {
- static string[128];
- format(string, 128, "[INFO] Sua gang está dominando o territorio (%d/1000)", ps + (60000 / 1000));
- SendClientMessage(x, 0xFFFFFFFFF, string);
- }
- }
- if(ps < 60000) {
- SetTimerEx("atualizarContadores", 1000, false, "iiii", gz, gg1, gg2, ps);
- }
- return false;
- }
- public dominandoOcupado(gz, gg1, gg2)
- {
- #if !defined foreach
- #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
- #endif
- if(pontosArrecadados[gz][gg2] > pontosArrecadados[gz][gg1]) {
- foreach(Player, x) {
- if(playerGang[x] == gg1) {
- SendClientMessage(x, 0xFFFFFFFFF, "[ERRO] Sua Gang falhou em dominar");
- }
- if(playerGang[x] == gg2) {
- SendClientMessage(x, 0xFFFFFFFFF, "[ERRO] Sua gang conseguiu conquistar território!");
- }
- }
- GangZoneShowForAll(gzData[gz][gzId], fixColour(GetGangColor(gg2)));
- }
- else {
- gzData[gz][gzGangID] =gg1;
- GangZoneShowForAll(gzData[gz][gzId], fixColour(GetGangColor(gg1)));
- foreach(Player, x) {
- if(playerGang[x] == gg2) { // muda variavel da gang aqui
- SendClientMessage(x, 0xFFFFFFFFF, "[ERRO] Sua Gang falhou em defender o território");
- }
- if(playerGang[x] == gg1) {
- SendClientMessage(x, 0xFFFFFFFFF, "[ERRO] Sua gang conseguiu conquistar território!");
- }
- }
- }
- galeraDominando[gg1][gz] = 0;
- galeraDominando[gg2][gz] = 0;
- pontosArrecadados[gz][gg2]= 0;
- pontosArrecadados[gz][gg1] = 0;
- GangZoneStopFlashForAll(gzData[gz][gzId]);
- return false;
- }
- public dominandoUncoped(gz, gg, ps)
- {
- #if !defined foreach
- #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
- #endif
- if(gzData[gz][gzGangID]) {
- foreach(Player, x) {
- if(playerGang[x] == gg) { // muda variavel da gang aqui
- SendClientMessage(x, 0xFFFFFFFFF, "[ERRO] Sua Gang não dominou o territorio pois uma gang rival pegou ele antes");
- }
- }
- }
- if(ps < 1000) {
- new membrosNaAreas = 0;
- foreach(Player, x) {
- if(playerGang[x] == gg) { // muda variavel da gang aqui
- static
- Float:posX,
- Float:posY,
- Float:posZ;
- GetPlayerPos(x, posX, posY, posZ);
- if(posX > gzData[gz][floatPos][0] && posY > gzData[gz][floatPos][1] && posX < gzData[gz][floatPos][2] && posY < gzData[gz][floatPos][3])
- membrosNaAreas++;
- }
- }
- ps += membrosNaAreas * 100;
- foreach(Player, x) {
- if(playerGang[x] == gg) { // muda variavel da gang aqui
- static string[128];
- format(string, 128, "[INFO] Sua gang está dominando o territorio (%d/1000)", ps);
- SendClientMessage(x, 0xFFFFFFFFF, string);
- }
- }
- if(membrosNaAreas >= MAX_DOM) {
- SetTimerEx("dominandoUncoped", 1000, false, "iii", gz, gg, ps);
- }
- else {
- foreach(Player, x) {
- if(playerGang[x] == gg) { // muda variavel da gang aqui
- SendClientMessage(x, 0xFFFFFFFFF, "[ERRO] Território não dominado por falta de membros " #MAX_DOM);
- }
- }
- galeraDominando[gg][gz] = 0;
- }
- }
- else {
- foreach(Player, x) {
- if(playerGang[x] == gg) { // muda variavel da gang aqui
- SendClientMessage(x, 0xFFFFFFFFF, "[INFO] Sua Gang dominou um territorio desocupado!");
- }
- }
- gzData[gz][gzGangID] =gg;
- GangZoneStopFlashForAll(gzData[gz][gzId]);
- GangZoneShowForAll(gzData[gz][gzId], fixColour(GetGangColor(gg)));
- galeraDominando[gg][gz] = 0;
- }
- return false;
- }
- createGangZone(nome[], Float:xMin, Float:yMin, Float:xMax, Float:yMax)
- {
- if(++gangZonasCriadas == MAX_GZ) {
- print("Limite de GangZone excedido" #MAX_GZ);
- --gangZonasCriadas;
- }
- gzData[gangZonasCriadas][gzId] = GangZoneCreate(xMin, yMin, xMax, xMin);
- gzData[gangZonasCriadas][floatPos][0] = xMin;
- gzData[gangZonasCriadas][floatPos][1] = yMin;
- gzData[gangZonasCriadas][floatPos][2] = xMax;
- gzData[gangZonasCriadas][floatPos][3] = yMax;
- GangZoneShowForAll(gzData[gangZonasCriadas][gzId], 0xFFFFFF00);
- return gzData[gangZonasCriadas][gzGangID] = 0, gzData[gangZonasCriadas][gzId];
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- for(new i; i != MAX_GZ; ++i) {
- if(galeraDominando[playerGang[playerid]][i]) {
- static
- Float:posXx,
- Float:posYy,
- Float:posZz;
- GetPlayerPos(playerid, posXx, posYy, posZz);
- if(posXx > gzData[i][floatPos][0] && posYy > gzData[i][floatPos][1] && posXx < gzData[i][floatPos][2] && posYy < gzData[i][floatPos][3]) {
- pontosArrecadados[i][playerGang[playerid]] -= 100;
- }
- }
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement