Имеет ли смысл писать плагин для хранения данных, то есть я хочу написать плагин в котором будет храниться данные о предметах инвенторя игрока, машины, ящиков и так далее, будет ли разумнее всё это хранить в переменных мода или в переменных плагина?
Вид для печати
Имеет ли смысл писать плагин для хранения данных, то есть я хочу написать плагин в котором будет храниться данные о предметах инвенторя игрока, машины, ящиков и так далее, будет ли разумнее всё это хранить в переменных мода или в переменных плагина?
А в чём вообще цель делать это в плагине?
Сейчас я например храню данные о предмете в инвенторе примерно таким образом:
#define MAX_PLAYER_INV_COUNT (100) enum PLAYER_INV_INFO { PLAYER_INV_MODEL PLAYER_INV_AMOUNT } new PlayerInv[MAX_PLAYERS][MAX_PLAYER_INV_COUNT][PLAYER_INV_INFO];
Не самый лучший наверное вариант так делать, но иначе я не смог придумать. Мне кажется такой вид не самый лучший, по моему мнению взаимодействовать мне нужно с таким массивом через функцию, а не посредственно к массиву, на примере pawn это можно сделать примерно так:
stock AddPlayerInvItem(playerid, slot, model, amount) { if(slot < 0 || slot > MAX_PLAYER_INV_COUNT) return 0; if(PlayerInv[playerid][slot][PLAYER_INV_MODEL] > 0) return 0; PlayerInv[playerid][slot][PLAYER_INV_MODEL] = model; PlayerInv[playerid][slot][PLAYER_INV_AMOUNT] = amount; return 1; } stock GetPlayerInvModel(playerid, slot) { if(slot < 0 || slot > MAX_PLAYER_INV_COUNT) return -1; return PlayerInv[playerid][slot][PLAYER_INV_MODEL]; }
Но я рассуждаю так, это вещи что должны быть под капотом, мне не они не нужны в моде непосредственно, если я могу тоже самое сделать в плагине, а быть может лучше, я к сожалению посредственно знаю плюсы, но очень хотел бы себя в них попробовать, но из-за малого опыта меня в них я не знаю будет ли такое использование плагина к месту, вот и спрашиваю.
В плагин рациональнее выносить сложные математические исчисления или те алгоритмы, которые не реализовать с помощью павн без костылей.
А твоя система не относится к вышеперечисленным. Вот и не создавай себе проблему на ровном месте.
1) Тем, что на деле получится двумерный массив, а не трёхмерный. Соответственно, обращение к нему будет происходить хоть и немного, но быстрее.
2) И, что важнее - тем, что с такой структурой enum у тебя остаётся возможность создания и одиночных констант, и констант с размерностью, отличной от MAX_PLAYER_INV_COUNT.
То бишь:
#define MAX_PLAYER_INV_COUNT (100) enum PLAYER_INV_INFO { PLAYER_INV_MODEL[MAX_PLAYER_INV_COUNT], PLAYER_INV_AMOUNT[MAX_PLAYER_INV_COUNT], SOME_CONST, SOME_ARRAY_CONST[30], } new PlayerInv[MAX_PLAYERS][PLAYER_INV_INFO];