Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!
Иконка ресурса

PawnMap - плагин для создания мап в pawn v1.0.0

Май
13
80
Пользователь
Saibot добавил(а) новый ресурс:

PawnMap - плагин для создания мап в pawn - Cоздания мап в pawn

PawnMap - плагин для создания мап в pawn​

Основная задача была: сделать максимально понятную и производительную мапу для Pawn, насколько это было возможно.
Чтобы её можно было использовать в обычных системах, при этом чтобы она сильно не уступала сырым массивам pawn, а там, где нужна какая-то операция с данными (поиск, сортировка), была и вовсе быстрее.

Вся подробная документация с примерами находится в моем репозитории>>...

Узнать больше об этом ресурсе...
 
Июл
355
307
Пользователь
Есть конечно пара опечаток и пара логических несоответствий в сигнатурах, но в целом всё написано грамотно. Для Pawn-экосистемы уровень выше среднего.
 
Май
13
80
Пользователь
Есть конечно пара опечаток и пара логических несоответствий в сигнатурах, но в целом всё написано грамотно. Для Pawn-экосистемы уровень выше среднего.
Можешь показать где, чтобы я пофиксил?
 
Последнее редактирование:
Июл
355
307
Пользователь
Можешь показать где, чтобы я пофиксил?

Pawn:
#define mapfor(%0,%1) \
    for(new _mpidx = 0, %1; \
        _mpidx < Map_Internal_LoopStep(%0, _mpidx) && ((%1 = Map_GetKeyByIndex(%0, _mpidx)) != -1); \
        _mpidx++)

_mpidx захардкожен как фиксированное имя. Если написать два вложенных mapfor, оба объявят одну и ту же переменную, внешний цикл сломается молча без единой ошибки компилятора.

Pawn:
native bool:Map_Get(PawnMap:mapid, key, const AnyTag:data_array[], size = sizeof(data_array));

const на выходном буфере семантически неверен. Функция пишет данные в массив, а const говорит компилятору что массив не тронут. Map_Set сделан правильно, там данные только читаются и const уместен. Здесь его можно было бы убрать.

Pawn:
native Map_FindKeyByField(PawnMap:mapid, AnyTag:offset, PawnMapType:type, {Float, _}:...);
native bool:Map_SortByField(PawnMap:mapid, offset, PawnMapSortOrder:order, PawnMapType:typeid = MAP_TYPE_INT);

В FindKeyByField offset принимает AnyTag, в SortByField тот же параметр просто int без тега. Одна и та же концепция, разное оформление в рамках одного API, это непоследовательно и сбивает при чтении инклюда.

--

Для павн экосистемы у тебя выше среднего однозначно. Большинство плагинов в этой среде пишутся без нормального API-дизайна вообще, здесь же видно что ты думал об удобстве использования, теги везде расставлены, INVALID_MAP_ID и INVALID_MAP_KEY_ID как константы а не голые -1, ALS хук на OnGameModeInit сделан правильно, проверка версий между бинарником и инклюдом,это уже достаточно хорошая практика, которую мало кто делает.

Замечания которые я указал это скорее точечные вещи но не системные проблемы. const на выходном буфере и непоследовательность тегов в offset, правки на пять минут, не переработка архитектуры. Проблема с вложенным mapfor реальная, но проявится только в специфичном сценарии.

Определённый плюс.
 
Сверху