PDA

Просмотр полной версии : [Вопрос] Написание плагинов



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

Nexius_Tailer
08.03.2021, 16:00
А в чём вообще цель делать это в плагине?

Seviel
08.03.2021, 16:32
А в чём вообще цель делать это в плагине?

Сейчас я например храню данные о предмете в инвенторе примерно таким образом:

#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];
}


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

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

Pa4enka
08.03.2021, 18:46
В плагин рациональнее выносить сложные математические исчисления или те алгоритмы, которые не реализовать с помощью павн без костылей.

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

DeimoS
09.03.2021, 08:19
#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];


Ну и вот такая структура кода была бы эффективнее :)
#define MAX_PLAYER_INV_COUNT (100)
enum PLAYER_INV_INFO
{
PLAYER_INV_MODEL[MAX_PLAYER_INV_COUNT],
PLAYER_INV_AMOUNT[MAX_PLAYER_INV_COUNT],
}
new PlayerInv[MAX_PLAYERS][PLAYER_INV_INFO];

execution
09.03.2021, 17:31
Ну и вот такая структура кода была бы эффективнее :)
#define MAX_PLAYER_INV_COUNT (100)
enum PLAYER_INV_INFO
{
PLAYER_INV_MODEL[MAX_PLAYER_INV_COUNT],
PLAYER_INV_AMOUNT[MAX_PLAYER_INV_COUNT],
}
new PlayerInv[MAX_PLAYERS][PLAYER_INV_INFO];


Чем?

DeimoS
10.03.2021, 00:21
Чем?

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];

execution
10.03.2021, 09:01
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];

Со вторым примером теперь уже понятно :pardon: