Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 2 ПерваяПервая 1 2
Показано с 11 по 15 из 15
  1. #11
    Аватар для gangzone.ini
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.06.2014
    Сообщений
    651
    Репутация:
    106 ±
    Завтра напишу)

  2. #12
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Что ж, если верить тому набору координат, порядок расположения гангзон следующий:
    Код:
    
    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
    
    Итого получаем матрицу 10x13.

    Для начала введём константы под кол-во гангзон в ширину и в высоту:
    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).

  3. #13
    Аватар для gangzone.ini
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.06.2014
    Сообщений
    651
    Репутация:
    106 ±
    Ну вот с мода команда /capture...
    PHP код:
    CMD:capture(playeridparams[])
    {
        if(
    CaptureTime && CaptureStatus == true) return SendClientMessage(playerid,0xAFAFAFAA"На данный момент уже идет захват территории!");
        new 
    Float:XcoordFloat:YcoordFloat:Zcoord;
        
    GetPlayerPos(playeridXcoord,Ycoord,Zcoord);
        new 
    =-1;
        while(++
    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"Выберите другую зону, которая соединена с вашей территорией!");
        } 

  4. #14
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Цитата Сообщение от #Azumi Посмотреть сообщение
    Ну вот с мода команда /capture...
    PHP код:
    CMD:capture(playeridparams[])
    {
        if(
    CaptureTime && CaptureStatus == true) return SendClientMessage(playerid,0xAFAFAFAA"На данный момент уже идет захват территории!");
        new 
    Float:XcoordFloat:YcoordFloat:Zcoord;
        
    GetPlayerPos(playeridXcoord,Ycoord,Zcoord);
        new 
    =-1;
        while(++
    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"Выберите другую зону, которая соединена с вашей территорией!");
        } 
    Тупая вырезка, откуда то.

    Стасу же спасибо, проверю.

    - - - Добавлено - - -

    В выше вариянте придеться прописывать все зоны, оно мне надо? Если есть легче вариант как у Стаса?

  5. #15
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    А что ты хотел, когда взялся программировать? -_- Чтоб всё за тебя писалось, а ты лишь сидел и чаёк попивал? Можешь написать свою систему гангзон с нуля и там учесть новые потребности, придумав особый тип записи захваченных территорий. Нужно лишь включить голову и всё обязательно получится.
    P.S. Самое простое - поиграться с одним массивом и циклом. Кажется, Стас именно это и предлагает (не читал весь его пост).
    Последний раз редактировалось DeimoS; 12.10.2014 в 22:55.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 
Страница 2 из 2 ПерваяПервая 1 2

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •