public LoadGangZones()
{
new rows, fields, id = 1, time = GetTickCount();
cache_get_data(rows, fields);
for(new i = 1; i < rows; i++)
{
if(rows)
{
GZInfo[id][gID] = cache_get_field_content_int(i, "id", DATABASE);
GZInfo[id][gCoords][0] = cache_get_field_content_float(i, "ginfo1", DATABASE);
GZInfo[id][gCoords][1] = cache_get_field_content_float(i, "ginfo2", DATABASE);
GZInfo[id][gCoords][2] = cache_get_field_content_float(i, "ginfo3", DATABASE);
GZInfo[id][gCoords][3] = cache_get_field_content_float(i, "ginfo4", DATABASE);
GZInfo[id][gDefenders] = cache_get_field_content_int(i, "fraction", DATABASE);
GZInfo[id][gID] = GangZoneCreate(GZInfo[id][gCoords][0], GZInfo[id][gCoords][1], GZInfo[id][gCoords][2], GZInfo[id][gCoords][3]);
ZoneOnBattle[id] = false;
GZInfo[id][gPlayerAttacker] = 0;
GZInfo[id][gPlayerDefender] = 0;
GZInfo[id][gAttackers] = 0;
GZSafeTime[id] = 0;
TOTALGZ++, id++;
}
else printf("[Ошибка MySQL] Номер гангзоны %i", i);
}
printf("[Загружено ганг зон]: <%i>. Потрачено: <%i мс>.", TOTALGZ, GetTickCount() - time);
return true;
}
GangZoneFlashForAll(GZInfo[i][gID], COLOR_RED);
Все отображение пофиксил, появилась другая проблема.. Не мигает зона хотя
PHP Code:
|
Вы используете функцию GangZoneFlashForAll, не находясь в это время на сервере, а лишь потом заходите для теста? Если да, то насколько я помню, она включает мигание зоны только для тех игроков, что на момент ее использования находятся на сервере. Если кто-то еще зайдет, то ему персонально нужно включать мигание.
|
CMD:capture(playerid, params[])
{
if(!IsAGang(playerid)) return true;
if(GetPVarInt(playerid, "AntiFlood") > gettime()) return SendClientMessage(playerid, COLOR_GREY, "Подождите немного!");
SetPVarInt(playerid, "AntiFlood", gettime() + 1);
if(sscanf(params,"d", params[0]))
{
SendClientMessage(playerid, COLOR_WHITE, "Введите: /capture [1 или 2]");
SendClientMessage(playerid, COLOR_WHITE, "Вариант: 1 - Выйграет банда которая наберет больше убийств во время войны за территорию.");
SendClientMessage(playerid, COLOR_WHITE, "Вариант: 2 - Выйграет банда которая к концу войны останется на территории убив всех противников.");
return true;
}
if(params[0] < 1 || params[0] > 2)
{
SendClientMessage(playerid, COLOR_WHITE, "Введите: /capture [1 или 2]");
SendClientMessage(playerid, COLOR_WHITE, "Вариант: 1 - Выйграет банда которая наберет больше убийств во время войны за территорию.");
SendClientMessage(playerid, COLOR_WHITE, "Вариант: 2 - Выйграет банда которая к концу войны останется на территории убив всех противников.");
return true;
}
new newhour, newminute, newsecond;
gettime(newhour, newminute, newsecond);
//if(newhour < 10 || newhour > 23) return SendClientMessage(playerid, COLOR_WHITE, "Ошибка: Каптить можно только с 10 до 23 часов");
if(PI[playerid][Rank] < Fraction[PI[playerid][Member]][fRankMax] - 3) return SendClientMessage(playerid, COLOR_WHITE, NotDostup);
for(new i = 1; i <= TOTALGZ; i++)
{
if(PlayerToKvadrat(playerid, GZInfo[i][gCoords][0], GZInfo[i][gCoords][1], GZInfo[i][gCoords][2], GZInfo[i][gCoords][3]))
{
// Проверки на атаку
if(capturetime < gettime()) return SendClientMessage(playerid, COLOR_WHITE, "Ошибка: Ваша банда уже воевала за территорию.");
if(GZInfo[i][gDefenders] == PI[playerid][Member]) return SendClientMessage(playerid, COLOR_WHITE, "Ошибка: Данная территория принадлежит вашей банде");
if(IsARespawn(playerid)) return SendClientMessage(playerid, COLOR_WHITE, "Ошибка: Нельзя завоевать эту территорию");
if(i == 0 || i == 1 || i == 86 || i == 96 || i == 45 || i == 46 || i == 114 || i == 115) return SendClientMessage(playerid, COLOR_WHITE, "Ошибка: Нельзя завоевать эту территорию");
if(ZoneOnBattle[i] == true) return SendClientMessage(playerid, COLOR_WHITE, "Ошибка: Данная территория под атакой другой банды");
if(ItsWar[PI[playerid][Member] - 14] == true) return SendClientMessage(playerid, COLOR_WHITE, "Ошибка: Войну за территорию можно проводить один раз в час!");
if(ItsWar[GZInfo[i][gDefenders] - 14] == true) return SendClientMessage(playerid, COLOR_WHITE,"Ошибка: Данная банда воюет / воевала!");
//
GZInfo[i][gArea] = CreateDynamicRectangle(GZInfo[i][gCoords][0], GZInfo[i][gCoords][1], GZInfo[i][gCoords][2], GZInfo[i][gCoords][3]);
GangZoneFlashForAll(GZInfo[i][gID], COLOR_RED);
ZoneOnBattle[i] = true;
GZInfo[i][gType] = params[0];
GZSafeTime[i] = 600;
GZInfo[i][gAttackers] = PI[playerid][Member];
GZInfo[i][gPlayerAttacker] = 0;
GZInfo[i][gPlayerDefender] = 0;
GZInfo[i][gKillAttacker] = 0;
GZInfo[i][gKillDefender] = 0;
ItsWar[GZInfo[i][gAttackers] - 14] = true;
ItsWar[GZInfo[i][gDefenders] - 14] = true;
//
format(PI[playerid][CMDstr], 128, "[Внимание]: На вашу территорию напала группировка %s, у вас есть 2 минуты, чтобы подготовиться", gFractionName[PI[playerid][Member]]);
SendFrac(GZInfo[i][gDefenders], COLOR_LIGHTRED, PI[playerid][CMDstr]);
//
format(PI[playerid][CMDstr], 128, "[Внимание]: Ваша банда напала на территорию группировки %s, у вас есть 2 минуты, чтобы подготовиться", gFractionName[GZInfo[i][gDefenders]]);
SendFrac(PI[playerid][Member], 0x00A86BFF, PI[playerid][CMDstr]);
format(PI[playerid][CMDstr], 60, "Атаку произвел(а) %s[%d]", PI[playerid][Name], playerid);
SendFrac(PI[playerid][Member], COLOR_WHITE, PI[playerid][CMDstr]);
//
format(PI[playerid][CMDstr], 128, "[A] CAPTURE. [TYPE: %d] Банда %s напала на территорию банды %s", params[0], gFractionName[PI[playerid][Member]], gFractionName[GZInfo[i][gDefenders]]);
SCMA(PI[playerid][CMDstr], COLOR_YELLOW);
//
new str[128];
if(params[0] == 1) format(str, sizeof(str), "~g~TIME: ~w~%s~n~~n~%s: ~g~%d~n~~w~%s: ~g~%d~n~~n~~w~TYPE CAPTURE: ~g~1", convert(GZSafeTime[i]), gFractionName[GZInfo[i][gAttackers]], GZInfo[i][gPlayerAttacker], gFractionName[GZInfo[i][gDefenders]], GZInfo[i][gDefenders]);
else format(str, sizeof(str), "~g~TIME: ~w~%s~n~~n~%s: ~g~%d ~w~KILLS: ~r~%d~n~~w~%s: ~g~%d ~w~KILLS: ~r~%d~n~~n~~w~TYPE CAPTURE: ~g~2", convert(GZSafeTime[i]), gFractionName[GZInfo[i][gAttackers]], GZInfo[i][gPlayerAttacker], GZInfo[i][gKillAttacker], gFractionName[GZInfo[i][gDefenders]], GZInfo[i][gDefenders], GZInfo[i][gKillDefender]);
//
PlayerForeach(x)
{
if(!PI[playerid][Login]) continue;
if(GZInfo[i][gAttackers] != PI[x][Member] && GZInfo[i][gDefenders] != PI[x][Member]) continue;
PlayerTextDrawSetString(x, GangWar[x], str);
PlayerTextDrawShow(x, GangWar[x]);
}
break;
}
}
return true;
}
public OnPlayerConnect(playerid)
{
new string[10];
if(GetPlayerVersion(playerid, string, sizeof(string)))
{
if(strfind(string, CLIENT_VERSION, true) == -1)
{
// Если игрок подключается с не валидным Клиентом не соответсвующий с CLIENT_VERSION.
new str[70];
format(str, sizeof(str), "Клиент: {b9c7be}%s | {aac5e3}Требуется: {b9c7be}"CLIENT_VERSION"", string);
SendClientMessage(playerid, COLOR_LIGHTRED, str);
SendClientMessage(playerid, COLOR_LIGHTRED, "[!] Ваш клиент устарел, новую версию можно скачать на сайте {b9c7be}rp-skrilax.su");
KickD(playerid, "");
return true;
}
else
{
PI[playerid][AntiAttack]++;
if(PI[playerid][AntiAttack] > 1)
{
PI[playerid][AntiAttack] = 0;
CheatKick(playerid, 21);
return false;
}
//
SetPVarInt(playerid, "AntiBreik", gettime() + 500);
SetPVarInt(playerid, "GunCheck", gettime() + 500);
GetPlayerName(playerid, PI[playerid][Name], MAX_PLAYER_NAME);
SetPlayerColor(playerid, 0xFFFFFF00);
SetPVarInt(playerid, "player_kick_time", GetTickCount() + 15000);
Reset(playerid);
p_ac{playerid} = 0;
if(STimer[playerid] != -1) KillTimer(STimer[playerid]), STimer[playerid] = -1;
if(tChainSaw[playerid] != -1) KillTimer(tChainSaw[playerid]), tChainSaw[playerid] = -1;
//
RemoveBuildingForPlayer(playerid, 1411, 347.1953, 1799.2656, 18.7578, 0.25);
RemoveBuildingForPlayer(playerid, 1411, 342.9375, 1796.2891, 18.7578, 0.25);
RemoveBuildingForPlayer(playerid, 968, -2436.8125, 495.4688, 29.6797, 0.25);
format(WantNickChange[playerid], MAX_PLAYER_NAME, "");
ResetPlayerWeapons(playerid);
CreateEatTextDraw(playerid);
for(new i = 0; i < 46; i++) Weapons[playerid][i] = 0;
for(new i; i < 11; i++) GiveGuns[i][playerid] = 0;
for(new i = 1; i <= TOTALGZ; i++)
{
GangZoneShowForPlayer(playerid, GZInfo[i][gID], GetGangZoneColor(i));
}
GangZoneShowForPlayer(playerid, GangZoneBizzWar[0], 0x0bda51FF);
GangZoneShowForPlayer(playerid, GangZoneBizzWar[1], 0x0bda51FF);
GangZoneShowForPlayer(playerid, GangZoneBizzWar[2], 0x0bda51FF);
//return true;
}
}
else
{
Kick(playerid);
return false;
}
return true;
}
GZInfo[i][gArea] = CreateDynamicRectangle(GZInfo[i][gCoords][0], GZInfo[i][gCoords][1], GZInfo[i][gCoords][2], GZInfo[i][gCoords][3]);
GangZoneFlashForAll(GZInfo[i][gID], COLOR_RED); ... GangZoneShowForPlayer(playerid, GZInfo[i][gID], GetGangZoneColor(i));
GZInfo[i][gArea] = CreateDynamicRectangle(GZInfo[i][gCoords][0], GZInfo[i][gCoords][1], GZInfo[i][gCoords][2], GZInfo[i][gCoords][3]);
...
GZInfo[id][gID] = GangZoneCreate(GZInfo[id][gCoords][0], GZInfo[id][gCoords][1], GZInfo[id][gCoords][2], GZInfo[id][gCoords][3]);
Степашка, он записывает в gArea не саму ганг-зону, а стримерскую зону, присмотрись.
PHP Code:
|
Очень смущает что вы записываете ID зоны в переменную gArea
Code:
GZInfo[i][gArea] = CreateDynamicRectangle(GZInfo[i][gCoords][0], GZInfo[i][gCoords][1], GZInfo[i][gCoords][2], GZInfo[i][gCoords][3]); Code:
GangZoneFlashForAll(GZInfo[i][gID], COLOR_RED); ... GangZoneShowForPlayer(playerid, GZInfo[i][gID], GetGangZoneColor(i)); И почему вы не вызываете мигание зоны для вновь подключившегося игрока? |
for(new i = 1; i <= TOTALGZ; i++)
{
GangZoneShowForPlayer(playerid, GZInfo[i][gID], GetGangZoneColor(i));
if(ItsWar[PI[playerid][Member] - 14] == true)
{
GangZoneFlashForAll(GZInfo[i][gID], COLOR_RED);
new str[128];
if(GZInfo[i][gType] == 1) format(str, sizeof(str), "~g~TIME: ~w~%s~n~~n~%s: ~g~%d~n~~w~%s: ~g~%d~n~~n~~w~TYPE CAPTURE: ~g~1", convert(GZSafeTime[i]), gFractionName[GZInfo[i][gAttackers]], GZInfo[i][gPlayerAttacker], gFractionName[GZInfo[i][gDefenders]], GZInfo[i][gDefenders]);
else format(str, sizeof(str), "~g~TIME: ~w~%s~n~~n~%s: ~g~%d ~w~KILLS: ~r~%d~n~~w~%s: ~g~%d ~w~KILLS: ~r~%d~n~~n~~w~TYPE CAPTURE: ~g~2", convert(GZSafeTime[i]), gFractionName[GZInfo[i][gAttackers]], GZInfo[i][gPlayerAttacker], GZInfo[i][gKillAttacker], gFractionName[GZInfo[i][gDefenders]], GZInfo[i][gDefenders], GZInfo[i][gKillDefender]);
if(!PI[playerid][Login]) continue;
PlayerTextDrawSetString(playerid, GangWar[playerid], str);
PlayerTextDrawShow(playerid, GangWar[playerid]);
}
}