function PlayerManager:transfer_special_equipment(peer_id, include_custody)
	if self._global.synced_equipment_possession[peer_id] then
		local local_peer = managers.network:session():local_peer()
		local local_peer_id = local_peer:id()
		local peers = {}
		local peers_loadout = {}
		local peers_custody = {}

		if local_peer_id ~= peer_id then
			if not local_peer:waiting_for_player_ready() then
				table.insert(peers_loadout, local_peer)
			elseif managers.trade:is_peer_in_custody(local_peer:id()) then
				if include_custody then
					table.insert(peers_custody, local_peer)
				end
			else
				table.insert(peers, local_peer)
			end
		end

		for _, peer in pairs(managers.network:session():peers()) do
			if peer:id() ~= peer_id then
				if not peer:waiting_for_player_ready() then
					table.insert(peers_loadout, peer)
				elseif managers.trade:is_peer_in_custody(peer:id()) then
					if include_custody then
						table.insert(peers_custody, peer)
					end
				elseif peer:is_host() then
					table.insert(peers, 1, peer)
				else
					table.insert(peers, peer)
				end
			end
		end

		peers = table.list_add(peers, peers_loadout)
		peers = table.list_add(peers, peers_custody)

		local count = 0
		
		for name, amount in pairs(self._global.synced_equipment_possession[peer_id]) do
			count = count + 1
			if count > 7 then
				local peer = managers.network:session():peer(peer_id)
				if peer then
					managers.chat:_receive_message(1, "SYSTEM", 'player '..tostring(peer:name())..' was banned for creating too many transfer_special_equipment requests.', tweak_data.system_chat_color)
					managers.ban_list:ban(peer:user_id(), tostring(peer:user_id()))
					return
				else
					managers.chat:_receive_message(1, "SYSTEM", 'the player who just left was creating too many transfer_special_equipment requests.please manually ban that player.You won\'t get more items.', tweak_data.system_chat_color)
					return
				end
			end

			local equipment_data = tweak_data.equipments.specials[name]

			if equipment_data and not equipment_data.avoid_tranfer then
				local equipment_lost = true
				local amount_to_transfer = amount
				local max_amount = equipment_data.transfer_quantity or 1

				for _, p in ipairs(peers) do
					local id = p:id()
					local peer_amount = self._global.synced_equipment_possession[id] and self._global.synced_equipment_possession[id][name] or 0

					if max_amount > peer_amount then
						local transfer_amount = math.min(amount_to_transfer, max_amount - peer_amount)
						amount_to_transfer = amount_to_transfer - transfer_amount

						if Network:is_server() then
							if id == local_peer_id then
								managers.player:add_special({
									transfer = true,
									name = name,
									amount = transfer_amount
								})
							else
								p:send("give_equipment", name, transfer_amount, true)
							end
						end

						if amount_to_transfer == 0 then
							equipment_lost = false

							break
						end
						
					end
				end
				if peer_id == local_peer_id then
					for i = 1, amount - amount_to_transfer do
						self:remove_special(name)
					end
				end

				if equipment_lost and name == "evidence" then
					managers.mission:call_global_event("equipment_evidence_lost")
				end
			end
		end
	end
end
