Завтра напишу)
Завтра напишу)
Что ж, если верить тому набору координат, порядок расположения гангзон следующий:
Итого получаем матрицу 10x13.Код:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 120 121 122 123 124 125 126 127 128 129
Для начала введём константы под кол-во гангзон в ширину и в высоту:
Теперь представим ситуацию, когда происходит захват территории.PHP код:
const
GZ_GRID_WIDTH = 10,
GZ_GRID_HEIGHT = 13;
ID банды захватчиков будет записан в переменной attacker.
ID захватываемой гангзоны будет записан в переменной zoneid.
Теперь нужно проверить, принадлежат ли захватчику территории вокруг места захвата:
Но что делать, если захватываемая территория находится на самом краю матрицы?PHP код:
if( (gz_info[zoneid-GZ_GRID_WIDTH][gzOwner] == attacker)// север
|| (gz_info[zoneid+GZ_GRID_WIDTH][gzOwner] == attacker)// юг
|| (gz_info[zoneid+1][gzOwner] == attacker) // восток
|| (gz_info[zoneid-1][gzOwner] == attacker)) // запад
Например, возьмём территорию под номером 4. При проверке территории со стороны севера получим территорию с номером -4 и словим выход за пределы массива.
Поэтому усложним проверку, чтобы учесть такой вариант:
PHP код:
if( (zoneid / GZ_GRID_WIDTH != 0) // если территория не на северной крайней линии
&& (gz_info[zoneid-GZ_GRID_WIDTH][gzOwner] == attacker) // проверим соседнюю территорию на севере
|| (zoneid / GZ_GRID_WIDTH != GZ_GRID_HEIGHT-1) // ...
&& (gz_info[zoneid+GZ_GRID_WIDTH][gzOwner] == attacker) // юг
|| (zoneid % GZ_GRID_WIDTH != GZ_GRID_WIDTH-1)
&& (gz_info[zoneid-1][gzOwner] == attacker) // восток
|| (zoneid % GZ_GRID_WIDTH != 0)
&& (gz_info[zoneid-1][gzOwner] == attacker)) // запад
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Ну вот с мода команда /capture...
PHP код:
CMD:capture(playerid, params[])
{
if(CaptureTime > 0 && CaptureStatus == true) return SendClientMessage(playerid,0xAFAFAFAA, "На данный момент уже идет захват территории!");
new Float:Xcoord, Float:Ycoord, Float:Zcoord;
GetPlayerPos(playerid, Xcoord,Ycoord,Zcoord);
new i =-1;
while(++i < sizeof(GZInfo)) if((Xcoord >= GZInfo[i][pX_coord_zone1] && Xcoord <= GZInfo[i][pX_coord_zone2]) && (Ycoord >= GZInfo[i][pY_coord_zone1] && Ycoord <= GZInfo[i][pY_coord_zone2])) break;
if(GZInfo[i][pGang] == GetPVarInt(playerid,"Gang")) return SendClientMessage(playerid,0xAFAFAFAA, "Данная территория пренадлежит вам!");
switch(GZInfo[i][pID])
{
case 28,34,46,56,98,102,103,108: return SendClientMessage(playerid,0xAFAFAFAA, "Данную территорию каптить нельзя! Выберите другую зону!");
case 0: if(GZInfo[i+1][pGang] != GetPVarInt(playerid,"Gang") && GZInfo[i+10][pGang] != GetPVarInt(playerid,"Gang")) return SendClientMessage(playerid,0xAFAFAFAA, "Выберите другую зону, которая соединена с вашей территорией!");
case 9: if(GZInfo[i-1][pGang] != GetPVarInt(playerid,"Gang") && GZInfo[i+10][pGang] != GetPVarInt(playerid,"Gang")) return SendClientMessage(playerid,0xAFAFAFAA, "Выберите другую зону, которая соединена с вашей территорией!");
case 120: if(GZInfo[i+1][pGang] != GetPVarInt(playerid,"Gang") && GZInfo[i-10][pGang] != GetPVarInt(playerid,"Gang")) return SendClientMessage(playerid,0xAFAFAFAA, "Выберите другую зону, которая соединена с вашей территорией!");
case 129: if(GZInfo[i-1][pGang] != GetPVarInt(playerid,"Gang") && GZInfo[i-10][pGang] != GetPVarInt(playerid,"Gang")) return SendClientMessage(playerid,0xAFAFAFAA, "Выберите другую зону, которая соединена с вашей территорией!");
case 1..8: if(GZInfo[i+1][pGang] != GetPVarInt(playerid,"Gang") && GZInfo[i-1][pGang] != GetPVarInt(playerid,"Gang") && GZInfo[i+10][pGang] != GetPVarInt(playerid,"Gang")) return SendClientMessage(playerid,0xAFAFAFAA, "Выберите другую зону, которая соединена с вашей территорией!");
case 121..128: if(GZInfo[i+1][pGang] != GetPVarInt(playerid,"Gang") && GZInfo[i-1][pGang] != GetPVarInt(playerid,"Gang") && GZInfo[i-10][pGang] != GetPVarInt(playerid,"Gang")) return SendClientMessage(playerid,0xAFAFAFAA, "Выберите другую зону, которая соединена с вашей территорией!");
case 19,29,39,49,59,69,79,89,99,109,119: if(GZInfo[i-1][pGang] != GetPVarInt(playerid,"Gang") && GZInfo[i-10][pGang] != GetPVarInt(playerid,"Gang")) return SendClientMessage(playerid,0xAFAFAFAA, "Выберите другую зону, которая соединена с вашей территорией!");
case 10,20,30,40,50,60,70,80,90,100,110: if(GZInfo[i+1][pGang] != GetPVarInt(playerid,"Gang") && GZInfo[i-10][pGang] != GetPVarInt(playerid,"Gang")) return SendClientMessage(playerid,0xAFAFAFAA, "Выберите другую зону, которая соединена с вашей территорией!");
default: if(GZInfo[i+1][pGang] != GetPVarInt(playerid,"Gang") && GZInfo[i-1][pGang] != GetPVarInt(playerid,"Gang")&& GZInfo[i+10][pGang] != GetPVarInt(playerid,"Gang") && GZInfo[i-10][pGang] != GetPVarInt(playerid,"Gang")) return SendClientMessage(playerid,0xAFAFAFAA, "Выберите другую зону, которая соединена с вашей территорией!");
}
А что ты хотел, когда взялся программировать? -_- Чтоб всё за тебя писалось, а ты лишь сидел и чаёк попивал? Можешь написать свою систему гангзон с нуля и там учесть новые потребности, придумав особый тип записи захваченных территорий. Нужно лишь включить голову и всё обязательно получится.
P.S. Самое простое - поиграться с одним массивом и циклом. Кажется, Стас именно это и предлагает (не читал весь его пост).
Последний раз редактировалось DeimoS; 12.10.2014 в 22:55.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)