Понедельник, 01.12.2008, 21:20
 
 
Приветствую Вас Проезжий | RSS
[ Новые сообщения · Участники · Правила форума · Поиск! · RSS ]
Статистика Форума
Последние ответы Популярные темы Лучшие пользователи TOP 7
  • Падает FPS при пр... [Системы и Сети]
  • Счёт до 1000 [Трёп]
  • SAMP 0.2.2 to 0.2... [Админ-раздел]
  • GTA 4 уже можно с... [GTA 4]
  • Несколько нубо-во... [Вопросы и Проблемы]
  • Добавление миссий... [Pen1: Series]
  • Общение с новыми ... [Media-ProGroup]
  • Вопрос - Ответ (Ответов: 953)
  • Обсуждение мода CityLi... (Ответов: 921)
  • Задавайте сюда ваши во... (Ответов: 918)
  • Помощь новечкам по скр... (Ответов: 592)
  • Обратный отщёт от 500 (Ответов: 512)
  • Пошли всех на хуй тут! (Ответов: 503)
  • Pen1 LS v1.4 by ONEhel... (Ответов: 386)
  • MiX (Сообщений: 2600)
  • AXE (Сообщений: 2234)
  • OKStyle™ (Сообщений: 1934)
  • fAkm4n (Сообщений: 1724)
  • RockStarGamer (Сообщений: 1608)
  • DarkByte (Сообщений: 1311)
  • MAK (Сообщений: 1290)
  • Страница 1 из 212»
    Модератор форума: MAK 
    Форум о GTA Multiplayers. GTA SA-MP, MTA, VC-MP, IV-MP. » San Andreas MultiPlayer » Вопросы и Проблемы » определение кол-ва игроков в определенной области (как сделать?)
    определение кол-ва игроков в определенной области
    SanSayДата: Понедельник, 11.08.2008, 01:31 | Сообщение # 1
    Местный

    Группа: Продвинутые
    Сообщений: 623
    Город: Наб.Челны
    Статус: status
    мод Пенсел.
    есть определенная область... чтобы вы поняли приведу пример:
    например заправка, как известно заправки имеют определенный радиус действия, так вот как например можно узнать кол-во игроков которые в данный момент находятся в радиусе действия заправки? По сути важно узнать даже не кол-во, а например принадлежность к классу или какую нить инфу (ник, цвет и т.п.) у каждого игрока, если игроков больше чем один.
    Это как в ГТО, когда на точку кача заходит кто-то из другой банды, то игроку первому игроку об этом сообщается.
    функция может есть какая нить?

    217.198.1.76:7777 Mode:PEN1(LS)+GTO(банды+кач)
    PEN1(LS)+GTO(банды+кач)v3.14
    AntiBot


    Сообщение отредактировал SanSay - Понедельник, 11.08.2008, 07:00
     
    OKStyle™Дата: Понедельник, 11.08.2008, 19:34 | Сообщение # 2
    Джэдай

    Группа: Разработчики
    Сообщений: 1934
    Город: Оренбург
    Статус: status
    SanSay, нет, только ручками и PlayerToPoint... задаёшь радиус, нужный тебе и делаешь проверку не на игрока, а на цикл i...



    Мои работы

    * Меню цветов

    Слова окстайла всегда правда © HITMAN07

     
    AVANGARDДата: Понедельник, 11.08.2008, 19:39 | Сообщение # 3
    Уверенный

    Группа: Public Team
    Сообщений: 196
    Город: Омск
    Статус: status
    Примерно так:
    Code

    for (new i=0; i < MAX_PLAYERS; i++)
       {
        if (IsPlayerConnected(i))
           {
         if(IsPlayerInSphere(i, X, Y, Z, RADIUS))
         {
          PlayersToPoint++;
                         return;
         }
        }
        }

    Значение PlayersToPoint и будет количеством игроков находящихся в области с координатами X, Y, Z и радиусом RADIUS!


    Респект пацанам из SAMP!
    наш сайт http://www.joylife.ru/
    [FS] ButtonEditor
    [GM] BattleField2[changemap]
    В разработке:
    [FS] NEW_Alkatras


    Сообщение отредактировал AVANGARD - Понедельник, 11.08.2008, 19:41
     
    OKStyle™Дата: Понедельник, 11.08.2008, 21:36 | Сообщение # 4
    Джэдай

    Группа: Разработчики
    Сообщений: 1934
    Город: Оренбург
    Статус: status
    AVANGARD, ну можно и радиус... просто PlayerToPoint более распространена, а с твоей ща будут просить её выложить =) В PTP есть же тоже радиус вокруг точки yes



    Мои работы

    * Меню цветов

    Слова окстайла всегда правда © HITMAN07

     
    SanSayДата: Вторник, 12.08.2008, 00:23 | Сообщение # 5
    Местный

    Группа: Продвинутые
    Сообщений: 623
    Город: Наб.Челны
    Статус: status
    сделал... но возникла проблема:
    я сделал, чтобы проверка велась раз в секунду... отсюда вытекла проблема - он проверяет раз в секунду есть в зоне кто-нить или нет и если есть то прибавляет к PlayersToPoint единицу, а т.к. он проверяет это каждую секунду получается он одного и того же игрока и считает, т.е. кол-во игроков в точке постоянно растет, хотя стоит один игрок
    вопрос: куда впихнуть эту проверку чтобы она происходила только когда новый игрок входит в эту облась?

    217.198.1.76:7777 Mode:PEN1(LS)+GTO(банды+кач)
    PEN1(LS)+GTO(банды+кач)v3.14
    AntiBot
     
    OKStyle™Дата: Вторник, 12.08.2008, 08:35 | Сообщение # 6
    Джэдай

    Группа: Разработчики
    Сообщений: 1934
    Город: Оренбург
    Статус: status
    SanSay, давай всем входящим переменную: inzone[playerid]=1, а по выходу: inzone[playerid]=0. А в проверке условие: if(inzone[i]==0) PlayersToPoint++;



    Мои работы

    * Меню цветов

    Слова окстайла всегда правда © HITMAN07

    Сообщение отредактировал OKStyle™ - Вторник, 12.08.2008, 08:36
     
    AVANGARDДата: Вторник, 12.08.2008, 09:03 | Сообщение # 7
    Уверенный

    Группа: Public Team
    Сообщений: 196
    Город: Омск
    Статус: status
    Скажи свою затею полностью тогда скажу как сделать а так не могу сообразить... Что то должно происходить когда в области будет определённое количество игроко?

    Добавлено (12.08.2008, 09:01)
    ---------------------------------------------
    OKStyle™, я такое же хотел написать, но тоже тупость получается... если игрок останется в области один хер  PlayersToPoint будет увеличиваться каждую секунду!

    Добавлено (12.08.2008, 09:03)
    ---------------------------------------------
    Тут событие нужно какое нибудь по достижении определённого значения PlayersToPoint! Тогда можно в цыкл вставить обнуление


    Респект пацанам из SAMP!
    наш сайт http://www.joylife.ru/
    [FS] ButtonEditor
    [GM] BattleField2[changemap]
    В разработке:
    [FS] NEW_Alkatras
     
    OKStyle™Дата: Вторник, 12.08.2008, 09:07 | Сообщение # 8
    Джэдай

    Группа: Разработчики
    Сообщений: 1934
    Город: Оренбург
    Статус: status
    Quote (AVANGARD)
    если игрок останется в области

    у него будет параметр 1, а подсчёт идёт на только-что вошедших с параметром 0. главное не перепутать очередность функций.



    Мои работы

    * Меню цветов

    Слова окстайла всегда правда © HITMAN07

     
    AVANGARDДата: Вторник, 12.08.2008, 09:13 | Сообщение # 9
    Уверенный

    Группа: Public Team
    Сообщений: 196
    Город: Омск
    Статус: status
    Так он и будет раз за разом прибавлять тех у кого 1 или 0.... я запутался :)
    Где этот автор вопроса?

    Респект пацанам из SAMP!
    наш сайт http://www.joylife.ru/
    [FS] ButtonEditor
    [GM] BattleField2[changemap]
    В разработке:
    [FS] NEW_Alkatras


    Сообщение отредактировал AVANGARD - Вторник, 12.08.2008, 09:15
     
    OKStyle™Дата: Вторник, 12.08.2008, 09:54 | Сообщение # 10
    Джэдай

    Группа: Разработчики
    Сообщений: 1934
    Город: Оренбург
    Статус: status
    AVANGARD, там смысл в том, что:
    Code
    if(игрок зашел в зону)
    {
    inzone[playerid]=1;
    if(inzone[playerid]==1)
    {
    PlayersToPoint++;
    inzone[playerid]=0;
    }
    }




    Мои работы

    * Меню цветов

    Слова окстайла всегда правда © HITMAN07

     
    AVANGARDДата: Вторник, 12.08.2008, 10:40 | Сообщение # 11
    Уверенный

    Группа: Public Team
    Сообщений: 196
    Город: Омск
    Статус: status
    Усё догнал я ход твоей мысли... надеюсь автор тоже поймёт о чом мы тут дискутировали :)

    Респект пацанам из SAMP!
    наш сайт http://www.joylife.ru/
    [FS] ButtonEditor
    [GM] BattleField2[changemap]
    В разработке:
    [FS] NEW_Alkatras
     
    SpiritДата: Вторник, 12.08.2008, 11:17 | Сообщение # 12
    Освоившийся

    Группа: Продвинутые
    Сообщений: 129
    Город: Омск
    Статус: status
    И так судя по последнему коду у нас будет всё таже ситуация только с ещё одним непонятным массивом, поясню, игрок зашёл в зону его посчитали что он в зоне и в массиве опять показали что он не в зоне следующая проверка его опять посчитали если он там оказался, примерно так.

    Значит вообще если нам надо посчитать колличество игроков в области скажем по команде то таймером ничего делать не надо и необходимость в глобальной переменной отпадает пользуем код ниже.

    Code

    new PlayersToPoint;
    for (new i=0; i < MAX_PLAYERS; i++)
    {
          if (IsPlayerConnected(i)&&IsPlayerInSphere(i, X, Y, Z, RADIUS))
            PlayersToPoint++;
    }
    //Посчитали и ля-ля тополя дальше поехали

    Если делаем таймером и глобальной переменной то

    Code

    PlayersToPoint = 0;//Каждый раз обнуляем
    for (new i=0; i < MAX_PLAYERS; i++)
    {
          if (IsPlayerConnected(i)&&IsPlayerInSphere(i, X, Y, Z, RADIUS))
            PlayersToPoint++;
    }

    Если необходимо именно узнать то что зашёл игрок в зону, тоесть не колличество даже считаем, а то что зашёл ли игрок в зону то да можно отлепить массив, но обнулять элемент будем только тогда когда игрок вне зоны, а не при том когда его посчитали

    Code

    new inzone[MAX_PLAYERS];//Массив глобальный

    for (new i=0; i < MAX_PLAYERS; i++)
    {
          if (IsPlayerConnected(i))
          {
            if(IsPlayerInSphere(i, X, Y, Z, RADIUS))
            {
              inzone[i] = 1;
              //Ну типо игрок зашёл в зону, тревога грабят млядь!!!
              //Если считаем так колличество то PlayerToPoint++;
            }
            else if(inzone[i] == 1)
            {
              inzone[i] = 0;//Показываем что игрок из зоны вышел
              PlayerToPoint--;//Ну и раз на одного игрока в зоне стало меньше то это должно отразится на переменной
            }
          }
    }


    Любиш садизм люби и мазахизм :)

    Сообщение отредактировал Spirit - Вторник, 12.08.2008, 11:41
     
    SanSayДата: Среда, 13.08.2008, 00:46 | Сообщение # 13
    Местный

    Группа: Продвинутые
    Сообщений: 623
    Город: Наб.Челны
    Статус: status
    парни нужно следующее:
    первый игрок заходит в зону и сидит там, если заходит следующий игрок, то у него нужно проверить, например цвет, если совпадает с первым то ок, если нет то тревога.

    кстати предыдущие ответы очень помогли... для решения другой задачи
    всем кому еще не ставил +, за помощь
    осталось решить первую задачу


    217.198.1.76:7777 Mode:PEN1(LS)+GTO(банды+кач)
    PEN1(LS)+GTO(банды+кач)v3.14
    AntiBot
     
    SpiritДата: Среда, 13.08.2008, 10:02 | Сообщение # 14
    Освоившийся

    Группа: Продвинутые
    Сообщений: 129
    Город: Омск
    Статус: status
    new zone = -1;//Щас зона никому не принадлежит
    //И теперь пишем для таймера
    new PlayerToPoint = 0 ;
    new Team1, Team2;
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i)&&IsPlayerInSphere(i, X, Y, Z, RADIUS))
    {
    PlayerToPoint++;
    if(zone == -1)
    zone = PlayerTeam[i];//Зона как бы захвачена
    if(PlayerTeam[i] == 0)
    Team1++;
    else
    Team2++;
    }
    if(PlayerToPoint == 0&&zone != -1)
    {
    zone = -1;
    }
    if(zone == 0&&Team1 == 0&&Team 2 != 0)
    zone = 1;
    else if(zone == 1&&Team1 != 0&&Team 2 == 0)
    zone =0;
    if(zone == 0&&Team2 > 0)
    //Тревога
    else if(zone == 1&&Team1 > 0)
    //Тревога
    }

    Примерно вот так, хотя должен быть способ проще.


    Любиш садизм люби и мазахизм :)
     
    SanSayДата: Среда, 13.08.2008, 20:12 | Сообщение # 15
    Местный

    Группа: Продвинутые
    Сообщений: 623
    Город: Наб.Челны
    Статус: status
    короче сделал так:
    for(new i = 0; i <= MAX_PLAYERS; i++)
    {
    new string[64];
    if(IsPlayerConnected(i)&&IsPlayerInSphere(i, 2095.7,-1691.8,13.5,3))
    {
    if(zone == -1) //если зона ничья то ...
    {
    zone = PlayerInfo[i][значение]; //... то ее захват
    SendClientMessage(i, COLOR_YELLOW, " вы захватили зону");
    дейсвия разные
    }
    else if(zone == PlayerInfo[i][значение]) //если зона принадлежит твоей банде
    {
    теже действия что и выше
    }
    else if(zone != PlayerInfo[i][pJailed]) //если зона принадлежит не твоей банде
    {
    SendClientMessage(i, COLOR_YELLOW, " зона чужая, захватите ее");
    for(new g = 0; g == zone; g++)
    {
    SendClientMessage(zone, COLOR_LIGHTBLUE, "посторонний в зоне!"); //сообщение для тех, чья зона на текущий момент
    }
    }
    }
    }
    }
    и вопрос, как теперь вернуть зону в "ничейное" состояние если из нее ушли "захватчики"?

    217.198.1.76:7777 Mode:PEN1(LS)+GTO(банды+кач)
    PEN1(LS)+GTO(банды+кач)v3.14
    AntiBot


    Сообщение отредактировал SanSay - Среда, 13.08.2008, 20:46
     
    Форум о GTA Multiplayers. GTA SA-MP, MTA, VC-MP, IV-MP. » San Andreas MultiPlayer » Вопросы и Проблемы » определение кол-ва игроков в определенной области (как сделать?)
    Страница 1 из 212»
    Поиск:

    Copyright SAMP-RUS© 2008