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

    Статус
    Оффлайн
    Регистрация
    02.12.2016
    Сообщений
    41
    Репутация:
    0 ±

    Довести до ума.

    Помогите доделать систему каптов,хуть я и знаю математику на базе 9 классов,но мне это еще как-то сложно..,а именно: Я пытался сделать проверку на близ стоящие территории..То есть что бы когда игрок писал команду /capture в квадрате который не соприкасается с территорий его банды ему писала типо "Данную территорию нельзя завоевать. Нужно находиться возле своей территории!"
    Вот код
    PHP код:
    CMD:capture(playeridparams[])
    {
        if(!
    pTemp[playerid][pLogined]) return 1;
        new 
    string[256];
        if(
    IsAGang(playerid))
        {
            new 
    hZonePos[MAX_PLAYERS]; gettime(h);
            if(
    13 || 23 ) return SendClientMessage(playeridCGRAY"Использовать команду можно только с 13:00 до 23:00");
            if(
    pData[playerid][pRank] < 7) return SendClientMessage(playerid,COLOR_LIGHTRED,"Функция доступна с 7 ранга и выше!");
            new 
    faction pData[playerid][pFraction];
            if(!
    IsInAllowed(playerid)) return SendClientMessage(playeridCOLOR_GREY"Ваша банда уже учавствует в захвате зон!");
            if(
    zGangTime[faction] <= 0) return SendClientMessage(playerid, -1"Сегодня ваша банда больше не может учавствовать в захвате");
            new 
    booldostup false;
            for(new 
    iMAX_GZONE;i++)
            {
                if(
    PlayerToKvadrat(playerid,GZMZ[i][gCoords][0], GZMZ[i][gCoords][1],GZMZ[i][gCoords][2],GZMZ[i][gCoords][3]) && ZoneOnBattle[i] == 0)
                {
                    
    ZonePos[playerid] = i;
                    switch(
    i)
                    {
                            case 
    12345dostup true;
                    }
                    if(
    dostup == true) return SendClientMessage(playeridCOLOR_GREY"Эта основная территория банды её нельзя захватить");
                }
            }
            for(new 
    iMAX_GZONE;i++)
            {
                if ((
    PlayerToKvadrat(playerid,GZMZ[ZonePos[playerid]][gCoords][0], GZMZ[ZonePos[playerid]][gCoords][1],GZMZ[i][gCoords][2],GZMZ[i][gCoords][3]) || PlayerToKvadrat(playerid,GZMZ[i][gCoords][0], GZMZ[i][gCoords][1],GZMZ[ZonePos[playerid]][gCoords][2],GZMZ[ZonePos[playerid]][gCoords][3]))&& ZoneOnBattle[i] == 0)
                {
                   
                    if(
    GZMZ[i][gFrak] != pData[playerid][pFraction]) return SendClientMessage(playeridCOLOR_GREY"Данную территорию нельзя завоевать. Нужно находится возле своей территории!");
                }
            }
            if(
    FrakCD 0)
            {
                new 
    fd[128];
                
    format(fd,128,"До следующего захвата территори %d минут."floatround(FrakCD/60));
                
    SendClientMessage(playerid,CGRAY,fd);
                return 
    1;
            }
            for(new 
    i=1;i<=TOTALGZ;i++)
            {
                if(
    PlayerToKvadrat(playerid,GZMZ[i][gCoords][0], GZMZ[i][gCoords][1],GZMZ[i][gCoords][2],GZMZ[i][gCoords][3]) && ZoneOnBattle[i] == 0)
                {
                    if(
    IsPlayerInBandOnline(faction) < 1) return SendMes(playerid,COLOR_GREY"В вашей банде мало игроков онлайн!");
                    if(
    IsPlayerInBandOnline(GZMZ[i][gFrak]) < 1) return SendMes(playerid,COLOR_GREY"У банды \"%s\" мало игроков!"GetGangName(GZMZ[i][gFrak]));
                    if(
    IsCapture == 1) return SendClientMessage(playeridCOLOR_GREY"Уже происходит захват одной из зон. Дождитесь окончания!");
                    
    format(string2024""W"Эта территория принадлежит %s\nВы уверены что хотите её захватить?",GetGangName(GZMZ[i][gFrak]));
                    
    ShowPlayerDialog(playerid,dZaxvat,DIALOG_STYLE_MSGBOX,"{F3FF02}Захват территории",string,"Да","Нет");
                }
             }
        }
        return 
    true;

    Конкретно сейчас фразу "Данную территорию нельзя завоевать. Нужно находиться возле своей территории!" пишет когда я пытаюсь захватить любой квадрат..даже своей банды...

  2. #2
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
     То что нужно)
    PHP код:
    #define DISTANCE_CAPTURE (20.0) //Максимальный радиус до определения ближайшей дружественной терры

    CMD:capture(playeridparams[])
    {
        if(!
    pTemp[playerid][pLogined] || !IsAGang(playerid)) return 1;
        if(
    pData[playerid][pRank] < 7)
            return 
    SendClientMessage(playeridCOLOR_LIGHTRED"Функция доступна с 7 ранга и выше!");
        new 
    faction pData[playerid][pFraction];
        if(
    IsPlayerInBandOnline(faction) < 1)
            return 
    SendClientMessage(playeridCOLOR_GREY"В вашей банде мало игроков онлайн!");
        if(!
    IsInAllowed(playerid))
            return 
    SendClientMessage(playeridCOLOR_GREY"Ваша банда уже участвует в захвате зон!");
        if(
    zGangTime[faction] <= 0)
            return 
    SendClientMessage(playerid, -1"Сегодня ваша банда больше не может участвовать в захвате");
        if(
    IsCapture == 1)
            return 
    SendClientMessage(playeridCOLOR_GREY"Уже происходит захват одной из зон. Дождитесь окончания!");
            
        new 
    string[256], h,
            
    Float:qXFloat:qYFloat:pZZ,
            
    bool:dostup false,
            
    bool:guadro_find false
            terraid
    ;
            
        
    gettime(h);
        if(!(
    13 <= <= 23))
            return 
    SendClientMessage(playeridCGRAY"Использовать команду можно только с 13:00 до 23:00");
        
    GetPlayerPos(playeridpZZpZZpZZ);

        
    //с какого ID начинается терра укажи в "new i"
        //как правильно называется максимальная константа ганг зон?
        
    for(new 0MAX_GZONEi++)
        {
            
    //Если под итерацию попала дружественная терра
            //то чекаем каптёра в её радиусе
            
    if(dostup == false && GZMZ[i][gFrak] == pData[playerid][pFraction])
            {
                
    GetCenterOfSquare(GZMZ[i][gCoords][0], GZMZ[i][gCoords][1], GZMZ[i][gCoords][2], GZMZ[i][gCoords][3], qXqY);
                if(
    IsPlayerInRangeOfPoint(playeridDISTANCE_CAPTUREqXqYpZZ) == 1)
                    
    dostup true//найдена ближайшая дружественная терра
            
    }
            
    //поиск вражеской терры(на которой стоит каптёр) для капта
            
    if(guadro_find == false && ZoneOnBattle[i] == 0
            
    && PlayerToKvadrat(playeridGZMZ[i][gCoords][0], GZMZ[i][gCoords][1], GZMZ[i][gCoords][2], GZMZ[i][gCoords][3]))
            {
                switch(
    i)
                {
                    case 
    1..5:
                        return 
    SendClientMessage(playeridCOLOR_GREY"Эта основная территория банды её нельзя захватить");
                    default:
                    {
                        if(
    IsPlayerInBandOnline(GZMZ[i][gFrak]) < 1)
                            return 
    SendMes(playeridCOLOR_GREY"У банды \"%s\" мало игроков!"GetGangName(GZMZ[i][gFrak]));
                        
    guadro_find true;
                        
    terraid i;
                    }
                }
            }
            if(
    dostup == true && guadro_find == true)
                break; 
    //всё готово, выходим из этой путаны и идём дальше
        
    }

        
    //терры могли пройти все и без доступа, но теперь запасная проверка и всё под контролем
        
    if(dostup == false && guadro_find == true)
            return 
    SendClientMessage(playeridCOLOR_GREY"Данную территорию нельзя завоевать. Нужно находится возле своей территории!");

        
    format(string256""W"Эта территория принадлежит %s\nВы уверены что хотите её захватить?"GetGangName(GZMZ[terraid][gFrak]));
        
    ShowPlayerDialog(playeriddZaxvatDIALOG_STYLE_MSGBOX"{F3FF02}Захват территории"string"Да""Нет");

        
    //это я так и не понял до каптура или после
        
    if(FrakCD 0)
        {
            
    format(string128"До следующего захвата территории %d минут."floatround(FrakCD/60));
            
    SendClientMessage(playeridCGRAYstring);
            return 
    1;
        }
        return 
    1;
    }

    //функция для нахождения центра в прямоугольнике/квадрате(спасибо ziggi)
    stock GetCenterOfSquare(Float:x1Float:y1Float:x2Float:y2, &Float:cx, &Float:cy)
    {
        
    cx = (x1 x2) / 2.0;
        
    cy = (y1 y2) / 2.0;



    Радиус только сам настрой и фсё.

    Обновил.
    Последний раз редактировалось vovandolg; 12.12.2016 в 18:49.
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

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

    Статус
    Оффлайн
    Регистрация
    02.12.2016
    Сообщений
    41
    Репутация:
    0 ±
    Огромное спасибо!
    Только вот жалуется на эти строки
    PHP код:
            Float:qXFloat:qYFloat:pZ//строка 13637
        
    GetPlayerPos(playeridpZpZpZ); //строка 13644
               
    if(IsPlayerInRangeOfPoint(playeridDISTANCE_CAPTUREqXqYpZ) == 1//строка 13655
        
    format(string256""W"Эта территория принадлежит %s\nВы уверены что хотите её захватить?"GetGangName(GZMZ[i][gFrak])); //строка 13677 
    (13637) : warning 219: local variable "pZ" shadows a variable at a preceding level
    (13644) : error 035: argument type mismatch (argument 2)
    (13655) : error 001: expected token: ";", but found "if"
    (13655) : warning 213: tag mismatch
    (13677) : error 017: undefined symbol "i"
    (13637) : warning 203: symbol is never used: "pZ"
    Последний раз редактировалось Redo; 05.12.2016 в 18:04.

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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    PHP код:
    Float:qXFloat:qYFloat:qZ//строка 13637
    GetPlayerPos(playeridqXqYqZ); //строка 13644
    if(IsPlayerInRangeOfPoint(playeridDISTANCE_CAPTUREqXqYqZ) == 1

  5. #5
    Аватар для Redo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.12.2016
    Сообщений
    41
    Репутация:
    0 ±
    Теперь вот что
    (13653) : error 001: expected token: ";", but found "if"
    (13675) : error 017: undefined symbol "i"
    PHP код:
    if(IsPlayerInRangeOfPoint(playeridDISTANCE_CAPTUREqXqYqZ) == 1// строка (13653) 
    format(string256""W"Эта территория принадлежит %s\nВы уверены что хотите её захватить?"GetGangName(GZMZ[i][gFrak])); // строка (13675) 

  6. #6
    Аватар для Redo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.12.2016
    Сообщений
    41
    Репутация:
    0 ±
    Вообщем ничего хорошего из этого всего не вышло...
    Когда пишу /capture в любом месте даже не в гетто.. Пишет вы не можете захватить Ацтеков..
    И еще всякой хрени там куча..Перепутано все!
    Ну все ровно большое спасибо всем за старание..Буду ломать голова дальше..С меня +

  7. #7
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Я тебе дал готовый примерочный код, но ты его видимо перековырял на свой лад и сделал это не правильно, вставь ещё раз мой код без всяких изменений и попробуй скомпилируй!
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  8. #8
    Аватар для Redo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.12.2016
    Сообщений
    41
    Репутация:
    0 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Я тебе дал готовый примерочный код, но ты его видимо перековырял на свой лад и сделал это не правильно, вставь ещё раз мой код без всяких изменений и попробуй скомпилируй!
    Вставил вот это ко всем дефайнам #define DISTANCE_CAPTURE (20.0)
    и код вставил без всяких изменений..и вот что вышло..


    warning 219: local variable "pZ" shadows a variable at a preceding level
    error 035: argument type mismatch (argument 2)
    error 001: expected token: ";", but found "if"
    warning 213: tag mismatch
    error 017: undefined symbol "i"
    warning 203: symbol is never used: "pZ"

  9. #9
    Аватар для Redo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.12.2016
    Сообщений
    41
    Репутация:
    0 ±
    И можно ли вот это вставить как то в код?Только оно не совсем правильно работает...
    PHP код:

           
    for(new iMAX_GZONE;i++) 
            { 
                if ((
    PlayerToKvadrat(playerid,GZMZ[ZonePos[playerid]][gCoords][0], GZMZ[ZonePos[playerid]][gCoords][1],GZMZ[i][gCoords][


    2],GZMZ[i][gCoords][3]) || PlayerToKvadrat(playerid,GZMZ[i][gCoords][0], GZMZ[i][gCoords][1],GZMZ[ZonePos[playerid]][gCoords][


    2],GZMZ[ZonePos[playerid]][gCoords][3]))&& ZoneOnBattle[i] == 0
                { 
                    
                    if(
    GZMZ[i][gFrak] != pData[playerid][pFraction]) return SendClientMessage(playeridCOLOR_GREY"Данную территорию нельзя завоевать. Нужно находится возле своей территории!"); 
                } 
            } 

  10. #10
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от Redo Посмотреть сообщение
    И можно ли вот это вставить как то в код?Только оно не совсем правильно работает...
    PHP код:

           
    for(new iMAX_GZONE;i++) 
            { 
                if ((
    PlayerToKvadrat(playerid,GZMZ[ZonePos[playerid]][gCoords][0], GZMZ[ZonePos[playerid]][gCoords][1],GZMZ[i][gCoords][


    2],GZMZ[i][gCoords][3]) || PlayerToKvadrat(playerid,GZMZ[i][gCoords][0], GZMZ[i][gCoords][1],GZMZ[ZonePos[playerid]][gCoords][


    2],GZMZ[ZonePos[playerid]][gCoords][3]))&& ZoneOnBattle[i] == 0
                { 
                    
                    if(
    GZMZ[i][gFrak] != pData[playerid][pFraction]) return SendClientMessage(playeridCOLOR_GREY"Данную территорию нельзя завоевать. Нужно находится возле своей территории!"); 
                } 
            } 
    Обновил свой код который выше, попробуй.

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

    Цитата Сообщение от StevenH Посмотреть сообщение
    PHP код:
    Float:qXFloat:qYFloat:qZ//строка 13637
    GetPlayerPos(playeridqXqYqZ); //строка 13644
    if(IsPlayerInRangeOfPoint(playeridDISTANCE_CAPTUREqXqYqZ) == 1
    Тут не путайте координаты квадрата и игрока, от квадрата X и Y всего лишь нужны, а от игрока Z.
    Последний раз редактировалось vovandolg; 06.12.2016 в 05:08.
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

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

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

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

Ваши права

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