鸦片战争前夕,英雄黄飞鸿(王爵饰)协助钦差大臣林则徐(包芳饰)禁鸦片。 十二贝儿(熊欣欣饰)与烟贩勾结,决定亲自来广州对付黄琳等人。 广东富商苏仁(吴孟达饰)的儿子苏灿(甄子丹饰)一身武功。 苏灿的女友戴一德(袁洁莹饰)刚从国外回来,就遭到了火莲教的袭击。 苏灿用巨型鞭炮救了女友。 毁坏马厩鼓,伤及无辜。 黄飞鸿得知此事后,去找苏灿商量此事,苏灿对黄飞鸿不满,矛盾由此产生。 十二美女知道两人不在一起,趁机挑衅,试图诱骗苏灿对付黄飞鸿。 暗恋苏仁的姑姑乔雅珍(陈淑兰饰)因误会带领大家破坏戴义德的妇女协会。 与此同时,戴发现了十二美女的阴谋,却被十二美女抓住。 苏灿为了救戴,被十二美女抓住。 十二美女抓走了他,让苏灿染上了毒瘾。 苏灿受到挑衅后,前去刺杀林则徐,并与黄飞鸿发生了争执。 戴义德终于现身澄清此事。 苏灿后悔不已,无法挽回。 幸好老乞丐(关海山饰)出现,帮助苏灿成功戒毒。 大军即将进攻时,苏灿出现,帮助黄飞鸿制服了十二美女。