SteveStage
28.04.2020, 00:15
В теории я написал рабочий код, но на практике загрузка инвентаря останавливается на первом слоте (по крайней мере в диалоге инвентаря 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];
format(string, sizeof(string), fmt_str, player[playerid][p_tableid], i+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]);
strcat(string, str);
}
}
}
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];
format(string, sizeof(string), fmt_str, player[playerid][p_tableid]);
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);
@_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];
format(string, sizeof(string), fmt_str, player[playerid][p_tableid], i+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]);
strcat(string, str);
}
}
}
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];
format(string, sizeof(string), fmt_str, player[playerid][p_tableid]);
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);