鴉片戰爭前夕,大俠黃飛鴻(王珏 飾)協助欽差大人林則徐(鮑方 飾)查禁鴉片。十二貝勒(熊欣欣 飾)勾結煙商決定親自來廣州對付黃林二人。廣東富商蘇仁(吳孟達 飾)的兒子蘇燦(甄子丹 飾)武功了得,蘇燦的女友戴懿德(袁潔瑩 飾)剛從國外回國,遭到火蓮教襲擊,蘇燦為救女友用巨型炮仗炸毀了太平鼓還傷及了無辜。黃飛鴻得知此事後找到蘇燦理論,蘇燦對黃不滿矛盾由此而生。十二貝勒知道兩人不和趁機挑撥,想利用蘇燦對付黃飛鴻。暗戀蘇仁的小姨峭牙珍(陳淑蘭 飾)因為誤會率領眾人去破壞戴懿德的婦女會,與此同時戴發現了十二貝勒的陰謀,但反被十二貝勒抓住,蘇燦為救戴被十二貝勒擒住,還讓蘇燦染上了毒癮。受到挑撥之後的蘇燦前去行刺林則徐,與黃飛鴻發生打鬥,戴懿德終於出現說明了真相,蘇燦懊悔不已一蹶不振。幸虧老乞丐(關海山 飾)出現幫助蘇燦戒毒成功,在千軍一發之際蘇燦出現幫助黃飛鴻制服了十二貝勒。