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