Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7

Тема: /capture

  1. #1
    Аватар для TestBot
    Пользователь

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

    /capture

    Здравствуйте уважаемые пользователи, у меня такая проблема с командой /capture, не захватывает территорию на радаре территория мигает, и капт не останавливается, и TextDraw не пропадает, неделя как, не могу исправить эту проблему..


    Вот код:

    PHP код:
    CMD:capture(playerid)
    {
        if(!
    IsAGang(playerid)) return SendClientMessage(playeridCOLOR_GREYYouCanNot);
        else if(
    pInfo[playerid][pRank] < 9) return SendClientMessage(playeridCOLOR_GREY"Захват территории доступен с 9 ранга!");
        new 
    hgettime(h);
        
    //if(!(11 <= h <= 22)) return SendClientMessage(playerid, COLOR_GREY, "Проводить захват можно только с 11:00 до 22:00");
        
    if(pInfo[playerid][pMember] == && b_Capture[0]) return SendClientMessage(playeridCOLOR_GREY"[Ошибка] Доступ вашей банде к войне за территории закрыт");
        else if(
    pInfo[playerid][pMember] == && b_Capture[1]) return SendClientMessage(playeridCOLOR_GREY"[Ошибка] Доступ вашей банде к войне за территории закрыт");
        else if(
    pInfo[playerid][pMember] == && b_Capture[2]) return SendClientMessage(playeridCOLOR_GREY"[Ошибка] Доступ вашей банде к войне за территории закрыт");
        else if(
    pInfo[playerid][pMember] == 10 && b_Capture[3]) return SendClientMessage(playeridCOLOR_GREY"[Ошибка] Доступ вашей банде к войне за территории закрыт");
        else if(
    pInfo[playerid][pMember] == 11 && b_Capture[4]) return SendClientMessage(playeridCOLOR_GREY"[Ошибка] Доступ вашей банде к войне за территории закрыт");
        else if(
    FrakCD != 0)
        {
            new 
    fd[128];
            
    format(fd,sizeof(fd),"Следующий захват территории возможен через %d мин"FrakCD/60);
            return 
    SendClientMessage(playerid,COLOR_GREY,fd);
        }
        new 
    zone GetPlayerGangZone(playerid);
        if(
    zone == -1) return SendClientMessage(playeridCOLOR_GREY"Вы должны находится в опасном районе");
        else if(
    CaptureStatus) return SendClientMessage(playeridCOLOR_GREY"[Ошибка] Уже происходит захват одной из зон. Дождитесь окончания!");
        else if(
    GZInfo[zone][gFrak] == pInfo[playerid][pMember]) return SendClientMessage(playeridCOLOR_GREY"[Ошибка] Вы не можете захватывать зону вашей банды!");
        else if(
    GZInfo[zone][gFrak] == 0)
        {
            new 
    string[128];
            
    format(string,sizeof(string),"Банда %s захватила новую территорию",Fraction_Name[pInfo[playerid][pMember]]);
            
    SendGhettoMes(COLOR_BLUEstring);
            
    GangZoneHideForAll(GangZone[zone]);
            
    GangZoneShowForAll(GangZone[zone],TeamColors[pInfo[playerid][pMember]]);
            
    GZInfo[zone][gFrak] = pInfo[playerid][pMember];
            
    SaveGZ(zone);
            return 
    1;
        }
        else if(
    GZInfo[zone][gFrak] == 22 && b_Capture[0]) return SendClientMessage(playeridCOLOR_GREY"[Ошибка] Доступ данной банды к войне за территории закрыт");
        else if(
    GZInfo[zone][gFrak] == 23 && b_Capture[1]) return SendClientMessage(playeridCOLOR_GREY"[Ошибка] Доступ данной банды к войне за территории закрыт");
        else if(
    GZInfo[zone][gFrak] == 24 && b_Capture[2]) return SendClientMessage(playeridCOLOR_GREY"[Ошибка] Доступ данной банды к войне за территории закрыт");
        else if(
    GZInfo[zone][gFrak] == 25 && b_Capture[3]) return SendClientMessage(playeridCOLOR_GREY"[Ошибка] Доступ данной банды к войне за территории закрыт");
        else if(
    GZInfo[zone][gFrak] == 26 && b_Capture[4]) return SendClientMessage(playeridCOLOR_GREY"[Ошибка] Доступ данной банды к войне за территории закрыт");
        
    //else if(IsPlayerInBandOnline(pInfo[playerid][pMember]) < 3) return SendClientMessage(playerid, COLOR_GREY, "Для захвата территории должен быть онлайн хотябы 3 членов банды");
        //else if(IsPlayerInBandOnline(GZInfo[zone][gFrak]) < 3) return SendClientMessage(playerid, COLOR_GREY, "У банды владеющей этой территорией менее 3 членов банды онлайн");
        
    new str[128];
        
    format(strsizeof(str), "%s начали захват территории банды %s"Fraction_Name[pInfo[playerid][pMember]], Fraction_Name[GZInfo[zone][gFrak]]);
        
    SendGhettoMes(COLOR_ORANGEstr);
        
    format(strsizeof(str), "%s %s[%d] инициировал захват"Fraction_Rang[pInfo[playerid][pMember]][pInfo[playerid][pRank]], GetName(playerid), playerid);
        
    SendGhettoMes(COLOR_ORANGEstr);
        
    GangZoneFlashForAll(GangZone[zone], TeamColors[GetTeamID(playerid)]);
        
    CaptureTime 180;
        
    FrakCD 1800;
        
    CaptureStatus 1;
        
    CaptureZone zone;
        
    GZInfo[zone][gNapad] = pInfo[playerid][pMember];
        
    GangInfo[pInfo[playerid][pMember]][g_Capture] = 1;
        
    GangInfo[GZInfo[zone][gFrak]][g_Capture] = 1;
        
    GangInfo[pInfo[playerid][pMember]][g_Number] = 1;
        
    GangInfo[GZInfo[zone][gFrak]][g_Number] = 0;
        
    CaptureStart(pInfo[playerid][pMember], GZInfo[zone][gFrak]);
        
    format(strsizeof(str), "[A] Банда %s напала на территорию банды %s",Fraction_Name[pInfo[playerid][pMember]],Fraction_Name[GZInfo[zone][gFrak]]);
        
    SendAdminMessage(COLOR_GRAD1str);
        return 
    1;


    PHP код:
    stock GangZoneCheck()
    {
        if(
    CaptureTime || CaptureStatus == 0) return 1;
        new 
    CaptureZoneplayers_in_square_frakplayers_in_square_napad;
        foreach(new 
    playeridPlayer)
        {
            if(
    GZInfo[i][gFrak] != pInfo[playerid][pMember] && GZInfo[i][gNapad] != pInfo[playerid][pMember]) continue;
            if(
    IsPlayerToSquare(playeridGZInfo[i][gCoords][0], GZInfo[i][gCoords][1], GZInfo[i][gCoords][2], GZInfo[i][gCoords][3]))
            {
                if(
    GZInfo[i][gFrak] == pInfo[playerid][pMember]) players_in_square_frak++;
                else 
    players_in_square_napad++;
            }
        }
        new 
    string[128];
        if(
    GangInfo[GZInfo[i][gFrak]][g_Score] > GangInfo[GZInfo[i][gNapad]][g_Score])
        {
            
    format(string,sizeof(string),"Попытка захватить территорию %s провалилась",Fraction_Name[GZInfo[i][gFrak]]);
            
    SendGhettoMes(COLOR_BLUEstring);
            
    CaptureEnd(GZInfo[i][gNapad], GZInfo[i][gFrak]);
            
    GangZoneStopFlashForAll(GangZone[i]);
            
    GangZoneHideForAll(GangZone[i]);
            
    GangZoneShowForAll(GangZone[i],TeamColors[GZInfo[i][gFrak]]);
            foreach(new 
    Player)
            {
                if(!
    gPlayerLogged[x] || (pInfo[x][pMember] != GZInfo[i][gNapad] && pInfo[x][pMember] != GZInfo[i][gFrak])) continue;
                
    ClearDeathMessage(x);
            }
            
    GangInfo[GZInfo[i][gNapad]][g_Capture] =
            
    GangInfo[GZInfo[i][gNapad]][g_Score] =
            
    GangInfo[GZInfo[i][gFrak]][g_Capture] =
            
    GangInfo[GZInfo[i][gFrak]][g_Score] =
            
    GangInfo[GZInfo[i][gNapad]][g_Number] =
            
    GangInfo[GZInfo[i][gFrak]][g_Number] = 0;
            
    GZInfo[i][gFrak] = GZInfo[i][gFrak];
            
    GZInfo[i][gNapad] = 0;
            
    SaveGZ(i);
        }
        else if(
    GangInfo[GZInfo[i][gFrak]][g_Score] == GangInfo[GZInfo[i][gNapad]][g_Score])
        {
            if(
    players_in_square_frak players_in_square_napad)
            {
                
    format(string,sizeof(string),"Попытка захватить территорию %s провалилась",Fraction_Name[GZInfo[i][gFrak]]);
                
    SendGhettoMes(COLOR_BLUEstring);
                
    CaptureEnd(GZInfo[i][gNapad], GZInfo[i][gFrak]);
                
    GangZoneStopFlashForAll(GangZone[i]);
                
    GangZoneHideForAll(GangZone[i]);
                
    GangZoneShowForAll(GangZone[i],TeamColors[GZInfo[i][gFrak]]);
                foreach(new 
    Player)
                {
                    if(!
    gPlayerLogged[x] || (pInfo[x][pMember] != GZInfo[i][gNapad] && pInfo[x][pMember] != GZInfo[i][gFrak])) continue;
                    
    ClearDeathMessage(x);
                }
                
    GangInfo[GZInfo[i][gNapad]][g_Capture] =
                
    GangInfo[GZInfo[i][gNapad]][g_Score] =
                
    GangInfo[GZInfo[i][gFrak]][g_Capture] =
                
    GangInfo[GZInfo[i][gFrak]][g_Score] =
                
    GangInfo[GZInfo[i][gNapad]][g_Number] =
                
    GangInfo[GZInfo[i][gFrak]][g_Number] = 0;
                
    GZInfo[i][gFrak] = GZInfo[i][gFrak];
                
    GZInfo[i][gNapad] = 0;
                
    SaveGZ(i);
            }
            else if(
    players_in_square_frak == players_in_square_napad)
            {
                
    format(string,sizeof(string),"Банда %s захватила новую территорию",Fraction_Name[GZInfo[i][gNapad]]);
                
    SendGhettoMes(COLOR_BLUEstring);
                
    CaptureEnd(GZInfo[i][gNapad], GZInfo[i][gFrak]);
                
    GangZoneStopFlashForAll(GangZone[i]);
                
    GangZoneHideForAll(GangZone[i]);
                
    GangZoneShowForAll(GangZone[i],TeamColors[GZInfo[i][gNapad]]);
                foreach(new 
    Player)
                {
                    if(!
    gPlayerLogged[x] || (pInfo[x][pMember] != GZInfo[i][gNapad] && pInfo[x][pMember] != GZInfo[i][gFrak])) continue;
                    
    ClearDeathMessage(x);
                }
                
    GangInfo[GZInfo[i][gNapad]][g_Capture] =
                
    GangInfo[GZInfo[i][gNapad]][g_Score] =
                
    GangInfo[GZInfo[i][gFrak]][g_Capture] =
                
    GangInfo[GZInfo[i][gFrak]][g_Score] =
                
    GangInfo[GZInfo[i][gNapad]][g_Number] =
                
    GangInfo[GZInfo[i][gFrak]][g_Number] = 0;
                
    GZInfo[i][gFrak] = GZInfo[i][gNapad];
                
    GZInfo[i][gNapad] = 0;
                
    SaveGZ(i);
            }
            else
            {
                
    format(string,sizeof(string),"Банда %s захватила новую территорию",Fraction_Name[GZInfo[i][gNapad]]);
                
    SendGhettoMes(COLOR_BLUEstring);
                
    CaptureEnd(GZInfo[i][gNapad], GZInfo[i][gFrak]);
                
    GangZoneStopFlashForAll(GangZone[i]);
                
    GangZoneHideForAll(GangZone[i]);
                
    GangZoneShowForAll(GangZone[i],TeamColors[GZInfo[i][gNapad]]);
                foreach(new 
    Player)
                {
                    if(!
    gPlayerLogged[x] || (pInfo[x][pMember] != GZInfo[i][gNapad] && pInfo[x][pMember] != GZInfo[i][gFrak])) continue;
                    
    ClearDeathMessage(x);
                }
                
    GangInfo[GZInfo[i][gNapad]][g_Capture] =
                
    GangInfo[GZInfo[i][gNapad]][g_Score] =
                
    GangInfo[GZInfo[i][gFrak]][g_Capture] =
                
    GangInfo[GZInfo[i][gFrak]][g_Score] =
                
    GangInfo[GZInfo[i][gNapad]][g_Number] =
                
    GangInfo[GZInfo[i][gFrak]][g_Number] = 0;
                
    GZInfo[i][gFrak] = GZInfo[i][gNapad];
                
    GZInfo[i][gNapad] = 0;
                
    SaveGZ(i);
            }
        }
        else
        {
            
    format(string,sizeof(string),"Банда %s захватила новую территорию",Fraction_Name[GZInfo[i][gNapad]]);
            
    SendGhettoMes(COLOR_BLUEstring);
            
    CaptureEnd(GZInfo[i][gNapad], GZInfo[i][gFrak]);
            
    GangZoneStopFlashForAll(GangZone[i]);
            
    GangZoneHideForAll(GangZone[i]);
            
    GangZoneShowForAll(GangZone[i],TeamColors[GZInfo[i][gNapad]]);
            foreach(new 
    Player)
            {
                if(!
    gPlayerLogged[x] || (pInfo[x][pMember] != GZInfo[i][gNapad] && pInfo[x][pMember] != GZInfo[i][gFrak])) continue;
                
    ClearDeathMessage(x);
            }
            
    GangInfo[GZInfo[i][gNapad]][g_Capture] =
            
    GangInfo[GZInfo[i][gNapad]][g_Score] =
            
    GangInfo[GZInfo[i][gFrak]][g_Capture] =
            
    GangInfo[GZInfo[i][gFrak]][g_Score] =
            
    GangInfo[GZInfo[i][gNapad]][g_Number] =
            
    GangInfo[GZInfo[i][gFrak]][g_Number] = 0;
            
    GZInfo[i][gFrak] = GZInfo[i][gNapad];
            
    GZInfo[i][gNapad] = 0;
            
    SaveGZ(i);
        }
        
    CaptureStatus 0;
        
    CaptureZone 0;
        return 
    1;
    }

    stock GetPlayerGangZone(playerid)
    {
        for(new 
    0sizeof(GZInfo); i++)
        {
            if(
    IsPlayerToSquare(playeridGZInfo[i][gCoords][0], GZInfo[i][gCoords][1], GZInfo[i][gCoords][2], GZInfo[i][gCoords][3]))
             {
                 return 
    i;
             }
        }
        return -
    1;
    }

    stock CaptureUpdate(gangid)
    {
        new 
    string[64];
        if(
    GangInfo[gangid][g_Number] == 1)
        {
            
    format(stringsizeof(string), "%d"GangInfo[gangid][g_Score]);
            
    TextDrawSetString(panel_capture_TD[5], string);
        }
        else
        {
            
    format(stringsizeof(string), "%d"GangInfo[gangid][g_Score]);
            
    TextDrawSetString(panel_capture_TD[6], string);
        }
    }

    stock GetGangName(fracid)
    {
        new 
    fracname[20];
        switch(
    fracid)
        {
            case 
    TEAM_GROVEfracname "Grove Street";
            case 
    TEAM_BALLASfracname "The Ballas";
            case 
    TEAM_RIFAfracname "The Rifa";
            case 
    TEAM_CORONAfracname "Varios Los Aztecas";
            case 
    TEAM_VAGOSfracname "Los Santos Vagos";
        }
        return 
    fracname;
    }

    stock CaptureShow(playeridgangidtargetgangidstatus)
    {
        new 
    string[64];
        if(
    status == 1)
        {
            
    GangZoneFlashForPlayer(playeridGangZone[CaptureZone], TeamColors[gangid]);
            for(new 
    s7s++) TextDrawShowForPlayer(playeridpanel_capture_TD[s]);
            
    format(stringsizeof(string), "%s"GetGangName(gangid));
            
    TextDrawSetString(panel_capture_TD[3], string);
            
    format(stringsizeof(string), "%s"GetGangName(targetgangid));
            
    TextDrawSetString(panel_capture_TD[4], string);
            
    format(stringsizeof(string), "%d"GangInfo[gangid][g_Score]);
            
    TextDrawSetString(panel_capture_TD[5], string);
            
    format(stringsizeof(string), "%d"GangInfo[targetgangid][g_Score]);
            
    TextDrawSetString(panel_capture_TD[6], string);
        }
        else if(
    status == 0)
        {
            if(
    GetPVarInt(playerid"settext") == 1DeletePVar(playerid"settext");
            
    GangZoneStopFlashForPlayer(playeridGangZone[CaptureZone]);
            
    ClearDeathMessage(playerid);
            for(new 
    s7s++) TextDrawHideForPlayer(playeridpanel_capture_TD[s]);
        }
    }

    stock CaptureStart(gangidtargetgangid)
    {
        new 
    string[64];
        foreach(new 
    Player)
        {
            if(!
    gPlayerLogged[i]) continue;
            if(
    pInfo[i][pMember] == gangid || pInfo[i][pMember] == targetgangid)
            {
                if(
    pInfo[i][pAdmin]) SetPVarInt(i"settext"1);
                for(new 
    s7s++) TextDrawShowForPlayer(ipanel_capture_TD[s]);
                
    format(stringsizeof(string), "%s"GetGangName(gangid));
                
    TextDrawSetString(panel_capture_TD[3], string);
                
    format(stringsizeof(string), "%s"GetGangName(targetgangid));
                
    TextDrawSetString(panel_capture_TD[4], string);
                
    TextDrawSetString(panel_capture_TD[5], "0");
                
    TextDrawSetString(panel_capture_TD[6], "0");
            }
        }
    }

    stock CaptureEnd(gangidtargetgangid)
    {
        foreach(new 
    Player)
        {
            if(
    pInfo[i][pMember] == gangid || pInfo[i][pMember] == targetgangid || GetPVarInt(i"settext") == 1)
            {
                if(
    GetPVarInt(i"settext") == 1DeletePVar(i"settext");
                for(new 
    s7s++) TextDrawHideForPlayer(ipanel_capture_TD[s]);
            }
        }


    Буду рад Вам за помощь.
    Последний раз редактировалось TestBot; 26.03.2020 в 21:00.

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

    Статус
    Оффлайн
    Регистрация
    08.12.2018
    Адрес
    Россия
    Сообщений
    146
    Репутация:
    25 ±
    Извини, все не стал разбирать, самое первое что в глаза бросилось. У тебя в GangZoneCheck в начале стоит проверка
    1. if(CaptureTime > 0 || CaptureStatus == 0) return 1;

    На сколько мне понятно, это значение времени для таймера в секундах, но я не нашел декремента, из чего следует что у тебя будет терра длится постоянно.
    Поменяй ее на
    1. if(CaptureTime < 0 || CaptureStatus == 0) return 1;


    Отпишись если не будет работать, обязательно поможем.

    UPD: И еще, если ты используешь функцию GangZoneCheck в таймере, то создай ее лучше через public предварительно объявив для нее forward разумеется.
    Последний раз редактировалось punkochel; 27.03.2020 в 00:23. Причина: Дополнение

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

    Статус
    Оффлайн
    Регистрация
    25.03.2020
    Сообщений
    5
    Репутация:
    0 ±
    Привет друг, у меня GangZoneCheck стоит на

    PHP код:
    forward SecTimer();
    public 
    SecTimer()
    {

    GangZoneCheck();
        
        if(
    FrakCD && !CaptureStatusFrakCD--;
        if(
    CaptureTime 0)
        {
            
    CaptureTime--;
            
    TextDrawSetString(panel_capture_TD[2], Converts(CaptureTime));
            
    GangZoneFlashForAll(GangZone[CaptureZone],TeamColors[GZInfo[CaptureZone][gNapad]]);
        }
    }
    return 
    1;

    Код HTML:
    ещё в OnGameInt есть SetTimer("SecTimer", 1000, true);

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

    Статус
    Оффлайн
    Регистрация
    08.12.2018
    Адрес
    Россия
    Сообщений
    146
    Репутация:
    25 ±
    В таком случае нужно сделать то, что я написал выше и ещё вот это:
    1. public SecTimer()
    2. {
    3.  
    4. if(FrakCD > 0 && !CaptureStatus) FrakCD--;
    5. if(CaptureTime > 0)
    6. {
    7. CaptureTime--;
    8. GangZoneCheck();
    9. TextDrawSetString(panel_capture_TD[2], Converts(CaptureTime));
    10. GangZoneFlashForAll(GangZone[CaptureZone],TeamColors[GZInfo[CaptureZone][gNapad]]);
    11. }
    12. }
    13. return 1;
    14. }


    P.S. пишу с телефона.

    UPD: на самом деле тут можно все гораздо проще сделать.
    Последний раз редактировалось punkochel; 27.03.2020 в 07:10.

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

    Статус
    Оффлайн
    Регистрация
    25.03.2020
    Сообщений
    5
    Репутация:
    0 ±
    Да, не братан, чёт не помогло...

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

    Статус
    Оффлайн
    Регистрация
    08.06.2015
    Адрес
    Запорожье
    Сообщений
    117
    Репутация:
    1 ±
    Код кривой, советую переписать полностью систему...

    P.S а вообще пробуй так:

    В stock GangZoneCheck() заменить:
    PHP код:
    if(CaptureTime || CaptureStatus == 0) return 1;// это вот заменить на

    if(CaptureTime && CaptureStatus == 0) return 1// вот это

    // а вот этот код удалить..
    CaptureStatus 0;
    CaptureZone 0;
    // И добавить после if(CaptureTime > 0 && CaptureStatus != 0) return 1;" вот это
    if(CaptureTime == 0)
    {
    CaptureStatus CaptureZone 0;

    Заменить public SecTimer() на это:
    PHP код:
    forward SecTimer();
    public 
    SecTimer()
    {
        if(
    FrakCD && !CaptureStatus)
        {
            
    FrakCD--;
        }
        if(
    CaptureTime 0)
        {
            
    CaptureTime--;
            
    TextDrawSetString(panel_capture_TD[2], Converts(CaptureTime));
            
    GangZoneFlashForAll(GangZone[CaptureZone],TeamColors[GZInfo[CaptureZone][gNapad]]);
        }
        
    GangZoneCheck();
        return 
    1;

    Последний раз редактировалось Paradox; 29.03.2020 в 17:43. Причина: P.S

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

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

 

 

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

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

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

Ваши права

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