Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 4 из 4
  1. #1
    Аватар для Boulevard_Picard
    Пользователь

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

    Использование массива и Enum

    Приветствую пользователей форума.

    Мне в игровом режиме нужно хранить для каждого игрока несколько автомобилей (16), осложняется это тем что каждый автомобиль имеет ряд переменных (тюнинг, номер, состояние двигателя и топливо). Вопрос в том, как будет правильнее хранить эти данные.

    На данный момент у меня заложена такая структура массива:
    1. enum vInfo {
    2. ID,
    3. Model,
    4. Color_Primary,
    5. Color_Second,
    6. Plate[32],
    7. Flasher,
    8. Fuel,
    9. Engine,
    10. Paintjob,
    11. Spoiler,
    12. Hood,
    13. Roof.... (и так далее)
    14. };
    15.  
    16. #define MAX_PLAYER_VEHICLES (16)
    17.  
    18. new VehicleInfo[MAX_PLAYERS][MAX_PLAYER_VEHICLES][vInfo];


    Решение работает, но есть сомнения по поводу его правильности. Был вариант организовать структуру чтобы массив был двухмерным:
    1. new VehicleInfo[MAX_PLAYERS*MAX_PLAYER_VEHICLES][vInfo];

    Но отпугнуло обращение к данным при индексе 0. Жду ваших советов, как грамотнее осуществить то что я задумал
    Последний раз редактировалось Boulevard_Picard; 16.09.2020 в 10:54.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    А ты точно хочешь загружать все данные? Зачем создавать сразу все автомобили, которые есть у игрока, если он может пользоваться только одним и если, при этом, количество автомобилей, которые можно создать, ограничено 2000 шт.? То бишь, даже уже при онлайне в 200 игроков ты уже исчерпаешь лимит.

    А если, собственно, грузить все данные не нужно, то проще загружать данные конкретного автомобиля. Если же игрок решит его сменить - тут же подгрузить данные другого автомобиля. Нет никакого практического смысла в хранении данных обо всех 16 автомобилях сразу.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    Boulevard_Picard (17.09.2020)
  4. #3
    Аватар для Boulevard_Picard
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.06.2018
    Сообщений
    13
    Репутация:
    0 ±
    Создавать все автомобили сразу я не планировал. Задумка в том что у игрока есть список, где выбранный транспорт можно заспавнить (скриншот прикрепил). Если загружать данные только об одном автомобиле, такой список сделать не представляется возможным. Только если каждый раз при форматировании списка делать запрос и получать названия всех имеющихся у игрока транспортных средств и их номеров. Довольно накладно выйдет, нет?

     Скриншот

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

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Вполне можно и делать каждый раз запрос, если правильно организовать структуру таблицы, расставив индексы и т.п.
    Но можно и ограничиться тем, что вместо всей информации, просто загружать то, что нужно для отображения диалога + ID строки для конкретной машины из таблицы. А уже при нажатии на конкретный пункт диалога, загружать данные по сохранённому ID строки.
    То бишь, будет один массив, который будет содержать в себе всю информацию о текущем выбранном автомобиле + ещё один массив, который будет содержать только частичную информацию, которая будет нужна для отображения диалога. Это будет довольно оптимальный и не сложный в исполнении вариант, с минимальным расходом лишней памяти.



    Касаемо изначального вопроса - второй вариант крайне неудачный, ибо работать с данными будет неудобно.
    Делать стоит либо как первый вариант, либо так:
    1. #define MAX_PLAYER_VEHICLES (16)
    2. enum vInfo {
    3. ID[MAX_PLAYER_VEHICLES],
    4. Model[MAX_PLAYER_VEHICLES],
    5. Color_Primary[MAX_PLAYER_VEHICLES],
    6. Color_Second[MAX_PLAYER_VEHICLES],
    7. Plate[32][MAX_PLAYER_VEHICLES],
    8. Flasher[MAX_PLAYER_VEHICLES],
    9. Fuel[MAX_PLAYER_VEHICLES],
    10. Engine[MAX_PLAYER_VEHICLES],
    11. Paintjob[MAX_PLAYER_VEHICLES],
    12. Spoiler[MAX_PLAYER_VEHICLES],
    13. Hood[MAX_PLAYER_VEHICLES],
    14. Roof[MAX_PLAYER_VEHICLES],
    15. //.... (и так далее)
    16. };
    17.  
    18. new VehicleInfo[MAX_PLAYERS][vInfo];

    Мой пример, в теории, даже лучше, ибо вместо трёхмерного массива будет двумерный, как в твоём втором примере, только распределение ячеек и обращение к ним мы переложили на плечи компилятора благодаря enum.

    Хотя напомню, что наиболее оптимальный вариант - тот, который я предложил в начале этого сообщения (с частичной загрузкой информации для диалога).
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  6. Пользователь сказал cпасибо:
    Boulevard_Picard (17.09.2020)
 

 

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

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

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

Ваши права

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