As a fix that I made for duplicated skins (using Market then Trading) I tried to remove the user's item as soon as he puts it in Market. So if he cancells his Item sell the item goes back to his Inventory.
PHP Code:
public MarketMenuh(id, Menu, Item)
{
if(Item == MENU_EXIT)
{
menu_destroy(Menu);
return;
}
new Data[14], Line[32];
new Access, Callback;
menu_item_getinfo(Menu, Item, Access, Data, charsmax(Data), Line, charsmax(Line), Callback);
new x = str_to_num(Data);
switch(x)
{
case 0:
{
if(InMarket[id]) {
if(MarketItem[id] > 0 && MarketItem[id] <= 90+MAXKNIFESKINS)
{
Weapons[id][MarketItem[id]]++;
}
else if(MarketItem[id] > 90+MAXKNIFESKINS && MarketItem[id] <= 90+MAXKNIFESKINS+MAXCASES)
{
Cases[id][MarketItem[id]-(90+MAXKNIFESKINS)]++;
}
else if(MarketItem[id] > 0)
{
Keys[id]++;
}
}
InMarket[id] = 0;
MarketItem[id] = 0;
MarketDollar[id] = 0;
MChooseItem(id);
}
case 1:
{
MChooseItem(id);
}
case 2:
{
client_cmd(id, "messagemode MARKETDOLLAR");
MarketMenu(id);
}
case 3:
{
if(MarketItem[id] > 0)
{
new ItemName[32];
if(MarketItem[id] > 0 && MarketItem[id] <= 90+MAXKNIFESKINS)
{
formatex(ItemName, charsmax(ItemName), "%s", SkinData[MarketItem[id]][0]);
Weapons[id][MarketItem[id]]--;
}
else if(MarketItem[id] > 90+MAXKNIFESKINS && MarketItem[id] <= 90+MAXKNIFESKINS+MAXCASES)
{
formatex(ItemName, charsmax(ItemName), "%s", Case_Data[MarketItem[id]-(90+MAXKNIFESKINS)][0]);
Cases[id][MarketItem[id]-(90+MAXKNIFESKINS)]--;
}
else if(MarketItem[id] > 0)
{
formatex(ItemName, charsmax(ItemName), "%s", KeyName);
Keys[id]--;
}
for(new i; i < MAXP; i++)
if(is_user_connected(i))
print_color(i, "!g%s!y %L", Prefix, i, "SOLVEDTOMARKET", Name[id], ItemName, MarketDollar[id]);
InMarket[id] = 1;
MarketMenu(id);
}
else
{
MarketMenu(id);
}
}
}
}
public BuyMenu(id)
{
//Original Code
}
public BuyMenuh(id, Menu, Item)
{
if(Item == MENU_EXIT)
{
menu_destroy(Menu);
return;
}
new Data[14], Line[32];
new Access, Callback;
menu_item_getinfo(Menu, Item, Access, Data, charsmax(Data), Line, charsmax(Line), Callback);
new x = str_to_num(Data);
if(InMarket[x] > 0 && MarketItem[x] > 0 && MarketDollar[x] > 0)
{
if(Dollars[id] < MarketDollar[x])
{
print_color(id, "!g%s!y %L", Prefix, id, "NOTENOUGHDOLLAR");
return;
}
if(MarketItem[x] > 0 && MarketItem[x] <= 90+MAXKNIFESKINS)
{
Weapons[id][MarketItem[x]]++;
}
else if(MarketItem[x] > 90+MAXKNIFESKINS && MarketItem[x] <= 90+MAXKNIFESKINS+MAXCASES)
{
Cases[id][MarketItem[x]-(90+MAXKNIFESKINS)]++;
}
else if(MarketItem[x] > 0)
{
Keys[id]++;
}
Dollars[id] -= MarketDollar[x];
Dollars[x] += MarketDollar[x];
InMarket[x] = 0;
new ItemName[32];
if(MarketItem[id] > 0 && MarketItem[id] <= 90+MAXKNIFESKINS)
{
formatex(ItemName, charsmax(ItemName), "%s", SkinData[MarketItem[id]][0]);
}
else if(MarketItem[id] > 90+MAXKNIFESKINS && MarketItem[id] <= 90+MAXKNIFESKINS+MAXCASES)
{
formatex(ItemName, charsmax(ItemName), "%s", Case_Data[MarketItem[id]-(90+MAXKNIFESKINS)][0]);
}
else if(MarketItem[id] > 0)
{
formatex(ItemName, charsmax(ItemName), "%s", KeyName);
}
for(new i; i < MAXP; i++)
if(is_user_connected(i))
print_color(i, "!g%s!y %L", Prefix, i, "BUYINGITEM", Name[id], ItemName, MarketDollar[x], Name[x]);
MarketDollar[x] = 0;
MarketItem[x] = 0;
SQL_UpdateUser(id);
SQL_UpdateUser(x);
}
}