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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±

    Система поставки материалов для Армий (с СРП)

    Здравствуйте.

    Предисловие: на самп рп, есть матовозки, где после загрузки лежат материалы, а в дальнейшем Зона 51 их развозит по гос. фракциям.

    Так вот, в чем вопрос. Вот что ТОЛЬКО пришло в голову сделать:
    PHP код:
    // Переменные
    new materials_car[MAX_VEHICLES];

    // При загрузке: 
    new vehicleid GetPlayerVehicleID(playerid);
    materials_car[vehicleid] = 10000
    Но, таких ТС только 7 штук будет (2 cargobob для SFa и 5 матовозок для LVa), и создавать переменную с 2000 ячейками помойму (по дефолту MAX_VEHICLES), не очень целесообразно.

    Кто может лучше вариант предложить, буду благодарен!

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

    Статус
    Оффлайн
    Регистрация
    06.03.2016
    Адрес
    Moscow
    Сообщений
    167
    Репутация:
    44 ±
    del (не так понял вопрос)
    Последний раз редактировалось Nash_Brigers; 07.05.2017 в 14:24.
    Член сообщества Green Square.

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

    Статус
    Оффлайн
    Регистрация
    06.04.2017
    Сообщений
    7
    Репутация:
    0 ±
    Создаешь двойной массив (как минимум нужно хранить ID машины и кол-во материалов в кузове). Инициализируешь ячейки с ID автомобилей значением INVALID_VEHICLE_ID. Далее, при когда дело подойдет до создания транспорта, прогоняйся по ячейкам массива и смотрим: если ID автомобиля равен INVALID_VEHICLE_ID, вытаскивай номер итерации к крепи к массиву с ранее вытащенным номером ID автомобиля (уже будет любой другой, кроме INVALID_VEHICLE_ID).
    Когда потребуется изменить кол-во материалов в кузове автомобиле, то опять же при помощи цикла, сравнивай ID автомобилей, и если они совпали, записывай в нужную ячейку новое количество материалов

    UPD: Хотя, при создание транспорта можно обойтись и без лишних взаимодействий с массивами. Крепить в ручную, начиная с нуля и кончая шестьми.
    Последний раз редактировалось Mr.Forest; 07.05.2017 в 14:28.

  4. #4
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Да, можно сэкономить память, но лишь ценой процессорного времени, что в наше время не имеет смысла. Я напомню, что 2000 ячеек - это 8000 байт, а это меньше, чем 8 КиБ. Всего 8 КиБ, когда сейчас иметь в телефоне 4 ГиБ оперативной памяти - это стандарт (а скоро уже и 8).

  5. 2 пользователя(ей) сказали cпасибо:
    Nexius_Tailer (07.05.2017) StevenH (07.05.2017)
  6. #5
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    PHP код:
    const MAX_MATERIALS_CAR 7;
    new 
    materials_car_id[2],
        
    materials_car[MAX_MATERIALS_CAR];

    public 
    OnGameModeInit()
    {
        
    //Остальной код
        
    materials_car_id[0] = CreateVehicle(...);
        
    CreateVehicle(...);
        
    CreateVehicle(...);
        
    CreateVehicle(...);
        
    CreateVehicle(...);
        
    CreateVehicle(...);
        
    materials_car_id[1] = CreateVehicle(...);
        
    //Остальной код

    PHP код:
    stock IsVehicleCarriesMaterials(vehicleid)//Вернёт "-1", если автомобиль не является транспортным и номер ячейки, если является
        
    return ((materials_car_id[0] <= vehicleid <= materials_car_id[1]) ? vehicleid-materials_car_id[0] : -1); 
    Пример использования:
    PHP код:
    new result IsVehicleCarriesMaterials(GetPlayerVehicleID(playerid));
    if(
    result == -1)
        return 
    SendClientMessage(playerid, -1"Вы не находитесь в матовозе!");
    else
    {
        new 
    string[17+11+1];
        
    format(stringsizeof(string), "В матовозе %d матов"materials_car[result];
        
    SendClientMessage(playerid, -1string);

    Но на деле это всё довольно бессмысленно и лишь делает систему привязанной к ID автомобилей при создании. Гораздо надёжнее будет создать тот самый массив в 2000 автомобилей
    Последний раз редактировалось DeimoS; 07.05.2017 в 15:03.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  7. Пользователь сказал cпасибо:
    StevenH (07.05.2017)
  8. #6
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    PHP код:
    const MAX_MATERIALS_CAR 7;
    new 
    materials_car_id[2],
        
    materials_car[MAX_MATERIALS_CAR];

    public 
    OnGameModeInit()
    {
        
    //Остальной код
        
    materials_car_id[0] = CreateVehicle(...);
        
    CreateVehicle(...);
        
    CreateVehicle(...);
        
    CreateVehicle(...);
        
    CreateVehicle(...);
        
    CreateVehicle(...);
        
    materials_car_id[1] = CreateVehicle(...);
        
    //Остальной код

    PHP код:
    stock IsVehicleCarriesMaterials(vehicleid)//Вернёт "-1", если автомобиль не является транспортным и номер ячейки, если является
        
    return ((materials_car_id[0] <= vehicleid <= materials_car_id[1]) ? vehicleid-materials_car_id[0] : -1); 
    Пример использования:
    PHP код:
    new result IsVehicleCarriesMaterials(GetPlayerVehicleID(playerid));
    if(
    result == -1)
        return 
    SendClientMessage(playerid, -1"Вы не находитесь в матовозе!");
    else
    {
        new 
    string[17+11+1];
        
    format(stringsizeof(string), "В матовозе %d матов"materials_car[result];
        
    SendClientMessage(playerid, -1string);

    Но на деле это всё довольно бессмысленно и лишь делает систему привязанной к ID автомобилей при создании. Гораздо надёжнее будет создать тот самый массив в 2000 автомобилей
    Благодарю

 

 

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

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

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

Ваши права

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