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

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±

    Написание плагинов

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

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

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    А в чём вообще цель делать это в плагине?
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

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

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    А в чём вообще цель делать это в плагине?
    Сейчас я например храню данные о предмете в инвенторе примерно таким образом:
    1. #define MAX_PLAYER_INV_COUNT (100)
    2. enum PLAYER_INV_INFO
    3. {
    4. PLAYER_INV_MODEL
    5. PLAYER_INV_AMOUNT
    6. }
    7. new PlayerInv[MAX_PLAYERS][MAX_PLAYER_INV_COUNT][PLAYER_INV_INFO];


    Не самый лучший наверное вариант так делать, но иначе я не смог придумать. Мне кажется такой вид не самый лучший, по моему мнению взаимодействовать мне нужно с таким массивом через функцию, а не посредственно к массиву, на примере pawn это можно сделать примерно так:

    1. stock AddPlayerInvItem(playerid, slot, model, amount)
    2. {
    3. if(slot < 0 || slot > MAX_PLAYER_INV_COUNT) return 0;
    4. if(PlayerInv[playerid][slot][PLAYER_INV_MODEL] > 0) return 0;
    5. PlayerInv[playerid][slot][PLAYER_INV_MODEL] = model;
    6. PlayerInv[playerid][slot][PLAYER_INV_AMOUNT] = amount;
    7. return 1;
    8. }
    9.  
    10. stock GetPlayerInvModel(playerid, slot)
    11. {
    12. if(slot < 0 || slot > MAX_PLAYER_INV_COUNT) return -1;
    13. return PlayerInv[playerid][slot][PLAYER_INV_MODEL];
    14. }


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

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

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от Seviel Посмотреть сообщение
    Но я рассуждаю так, это вещи что должны быть под капотом, мне не они не нужны в моде непосредственно, если я могу тоже самое сделать в плагине, а быть может лучше, я к сожалению посредственно знаю плюсы, но очень хотел бы себя в них попробовать, но из-за малого опыта меня в них я не знаю будет ли такое использование плагина к месту, вот и спрашиваю.
    Можешь тогда вынести всё это в инклуд, да и всё
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  5. Пользователь сказал cпасибо:
    Seviel (08.03.2021)
  6. #5
    Аватар для Pa4enka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    В плагин рациональнее выносить сложные математические исчисления или те алгоритмы, которые не реализовать с помощью павн без костылей.

    А твоя система не относится к вышеперечисленным. Вот и не создавай себе проблему на ровном месте.

  7. 3 пользователя(ей) сказали cпасибо:
    Daniel_Cortez (09.03.2021) oukibt (08.03.2021) Seviel (08.03.2021)
  8. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Seviel Посмотреть сообщение
    1. #define MAX_PLAYER_INV_COUNT (100)
    2. enum PLAYER_INV_INFO
    3. {
    4. PLAYER_INV_MODEL
    5. PLAYER_INV_AMOUNT
    6. }
    7. new PlayerInv[MAX_PLAYERS][MAX_PLAYER_INV_COUNT][PLAYER_INV_INFO];
    Ну и вот такая структура кода была бы эффективнее :)
    1. #define MAX_PLAYER_INV_COUNT (100)
    2. enum PLAYER_INV_INFO
    3. {
    4. PLAYER_INV_MODEL[MAX_PLAYER_INV_COUNT],
    5. PLAYER_INV_AMOUNT[MAX_PLAYER_INV_COUNT],
    6. }
    7. new PlayerInv[MAX_PLAYERS][PLAYER_INV_INFO];
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  9. Пользователь сказал cпасибо:
    Seviel (09.03.2021)
  10. #7
    Аватар для execution
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну и вот такая структура кода была бы эффективнее :)
    1. #define MAX_PLAYER_INV_COUNT (100)
    2. enum PLAYER_INV_INFO
    3. {
    4. PLAYER_INV_MODEL[MAX_PLAYER_INV_COUNT],
    5. PLAYER_INV_AMOUNT[MAX_PLAYER_INV_COUNT],
    6. }
    7. new PlayerInv[MAX_PLAYERS][PLAYER_INV_INFO];

    Чем?

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от execution Посмотреть сообщение
    Чем?
    1) Тем, что на деле получится двумерный массив, а не трёхмерный. Соответственно, обращение к нему будет происходить хоть и немного, но быстрее.
    2) И, что важнее - тем, что с такой структурой enum у тебя остаётся возможность создания и одиночных констант, и констант с размерностью, отличной от MAX_PLAYER_INV_COUNT.
    То бишь:
    1. #define MAX_PLAYER_INV_COUNT (100)
    2. enum PLAYER_INV_INFO
    3. {
    4. PLAYER_INV_MODEL[MAX_PLAYER_INV_COUNT],
    5. PLAYER_INV_AMOUNT[MAX_PLAYER_INV_COUNT],
    6. SOME_CONST,
    7. SOME_ARRAY_CONST[30],
    8. }
    9. new PlayerInv[MAX_PLAYERS][PLAYER_INV_INFO];
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    1) Тем, что на деле получится двумерный массив, а не трёхмерный. Соответственно, обращение к нему будет происходить хоть и немного, но быстрее.
    2) И, что важнее - тем, что с такой структурой enum у тебя остаётся возможность создания и одиночных констант, и констант с размерностью, отличной от MAX_PLAYER_INV_COUNT.
    То бишь:
    1. #define MAX_PLAYER_INV_COUNT (100)
    2. enum PLAYER_INV_INFO
    3. {
    4. PLAYER_INV_MODEL[MAX_PLAYER_INV_COUNT],
    5. PLAYER_INV_AMOUNT[MAX_PLAYER_INV_COUNT],
    6. SOME_CONST,
    7. SOME_ARRAY_CONST[30],
    8. }
    9. new PlayerInv[MAX_PLAYERS][PLAYER_INV_INFO];
    Со вторым примером теперь уже понятно

 

 

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

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

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

Ваши права

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