鸦片战争前夕,黄飞鸿(王珏饰)帮助钦差大臣林则徐(鲍方饰)查禁鸦片。十二贝勒(熊欣欣饰)勾搭上了一个香烟商,决定向广州和林晃订婚。苏灿(甄子丹饰),广东富商苏仁(吴孟达饰)之子,精通武术。苏灿的女友戴一德(袁洁莹饰)刚从海外归来,就遭到了火莲教的袭击。苏灿为了救他的女朋友,用一个巨大的鞭炮炸掉了城平鼓,并伤害了无辜的人。得知已经提前发现了的真实,对黄的不满由此而生。十二贝勒知道他们没有跟着机会去煽动,想操纵苏灿对抗黄飞鸿。素人的暗恋者乔雅贞(陈淑兰饰)因曲解导致世人砸碎戴一德的女协。与此同时,戴使出了十二贝勒的诡计,却被十二贝勒识破。为救戴,被十二贝勒抓获,染上毒瘾。苏灿被教唆后,去谋杀林则徐,并与黄飞鸿斗争。戴义德终于现身并说出了真相,苏灿后悔了。好在老乞丐(关海三)出现协助苏灿戒毒成功,苏灿出现协助黄飞鸿着装当时的十二贝勒千军万马。