Ok first off if you ever come across an "#if 0" or "#if 1" Odds are it's me reimplenting something for whatever reason struck me (didn't make sense, didn't work, just plain felt like it..)
Onto OP_MoveItem, theres a bug in the client_proccess file with cursored items. The trade code in MoveItem() is a direct copy and paste from this original code, including all it's problems.
Code:
if ( to_slot >=3000 && to_slot <= 3016){// Item Trade
TradeList[to_slot-3000] = GetItemAt(0); // Put item number from cursor into Tradelist
TradeCharges[to_slot-3000] = pp.invitemproperties[0].charges; // Get charge count from cursor into TradeList
// Missing bag flag check?
for (int j = 0;j != 10;j++) { // Process bag items into out half of trade window
TradeList[((to_slot-2999)*10)+j] = GetItemAt(250+j); // Item number from cursor bag to Tradelist
TradeCharges[((to_slot-2999)*10)+j] = GetItemPropAt(250+j).charges; // Item charge from cursor bag to TradeList
}