В теории я написал рабочий код, но на практике загрузка инвентаря останавливается на первом слоте (по крайней мере в диалоге инвентаря 1 слот, тогда как в бд их два).
@_LoadInvent(playerid); @_LoadInvent(playerid) { new rows, fields; cache_get_data(rows, fields); if(rows) { new i = cache_get_field_content_int(0, "slotid"); inv[playerid][i][i_item] = cache_get_field_content_int(0, "itemid"); inv[playerid][i][i_amount] = cache_get_field_content_int(0, "amountid"); inv_slots{playerid}++; static fmt_str[] = "SELECT * FROM `inventory` WHERE `ownertableid` = '%d' AND `slotid` = '%d' LIMIT 1"; new string[sizeof(fmt_str)-4+4+2+1]; mysql_function_query(connect_mysql, string, true, "@_LoadInvent", "d", playerid); return true; } else return false; }
stock DialogInvent(playerid) { new string[128+1]; format(string, sizeof(string), "{00C0FF}%s [%d]", invent_items[inv[playerid][0][i_item]], inv[playerid][0][i_amount]); if(inv_slots{playerid} >= 1) { for(new i = 1; i < inv_slots{playerid}; i++) { if(inv[playerid][i][i_item] != 0 && inv[playerid][i][i_amount] != 0) { new str[17-4+16+5+1]; format(str, sizeof(str), "\n{00C0FF}%s [%d]", invent_items[inv[playerid][i][i_item]], inv[playerid][i][i_amount]); } } } SPD(playerid, DLG_ID_INVENT_SELECT_SLOT, DSL, !"{00C0FF}Инвентарь", string, !"{00C0FF}Выбрать", !"{00C0FF}Отмена"); return true; }
stock LoadInvent(playerid) { static fmt_str[] = "SELECT * FROM `inventory` WHERE `ownertableid` = '%d' AND `slotid` = '0' LIMIT 1"; new string[sizeof(fmt_str)-2+4+1]; mysql_function_query(connect_mysql, string, true, "@_LoadInvent", "d", playerid); return true; }
new inv_slots[MAX_PLAYERS char], select_slot[MAX_PLAYERS char];
new invent_items[22][16+1] = { "Пусто", "Бургер", "Пепси-Кола", "Desert Eagle", "Shotgun", "M4A1", "AK-47", "Baseball Bat", "Colt 45", "Spas-12", "Silenced Colt 45", "Golf Club", "Nitestick", "Knife", "Chainsaw", "Grenade", "Molotov", "Tec 9", "Uzi", "Mp5", "Rifle", "Sniper rifle" };
enum e_INVENTORY_DATA { i_item, i_amount } new inv[MAX_PLAYERS][MAX_INVENT_SLOTS][e_INVENTORY_DATA];
enum { INVENT_ITEM_NONE = 0, INVENT_ITEM_BURGER = 1, INVENT_ITEM_PEPSI = 2, INVENT_WEAPON_DEAGLE, INVENT_WEAPON_SHOTGUN, INVENT_WEAPON_M4A1, INVENT_WEAPON_AK47, INVENT_WEAPON_BAT, INVENT_WEAPON_COLT45, INVENT_WEAPON_SPAS12, INVENT_WEAPON_SILENCED_COLT45, INVENT_WEAPON_GOLFCLUB, INVENT_WEAPON_NITESTICK, INVENT_WEAPON_KNIFE, INVENT_WEAPON_CHAINSAW, INVENT_WEAPON_FLOWER, INVENT_WEAPON_CANE, INVENT_WEAPON_GRENADE, INVENT_WEAPON_MOLOTOV, INVENT_WEAPON_TEC9, INVENT_WEAPON_UZI, INVENT_WEAPON_MP5, INVENT_WEAPON_RIFLE, INVENT_WEAPON_SNIPER };
#define MAX_INVENT_SLOTS 7
При авторизации и загрузке данных аккаунта:
LoadInvent(playerid);