mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-02-17 09:14:34 +00:00
Merge branch 'azerothcore:master' into Playerbot
This commit is contained in:
542
data/sql/updates/db_world/2022_09_21_04.sql
Normal file
542
data/sql/updates/db_world/2022_09_21_04.sql
Normal file
@@ -0,0 +1,542 @@
|
||||
-- DB update 2022_09_21_03 -> 2022_09_21_04
|
||||
REPLACE INTO `gossip_menu_option_locale` (`MenuID`, `OptionID`, `Locale`, `OptionText`) VALUES
|
||||
(161, 0, 'zhCN', '我还需要一套盗贼工具。'),
|
||||
(231, 0, 'zhCN', '告诉我提尔斯保险箱的密码。'),
|
||||
(268, 0, 'zhCN', '什么消息?'),
|
||||
(445, 0, 'zhCN', '你能告诉我布瑞恩在哪里吗?'),
|
||||
(841, 0, 'zhCN', '请继续你的故事。'),
|
||||
(842, 0, 'zhCN', '真是悲惨啊……'),
|
||||
(922, 1, 'zhCN', '最近在沙漠中有发现什么奇怪的东西吗?'),
|
||||
(347, 3, 'zhCN', '让我看看你出售的货物。'),
|
||||
(980, 0, 'zhCN', '你好,索维克,我想要看看你的货物。'),
|
||||
(1043, 0, 'zhCN', '请让我接受训练。'),
|
||||
(1141, 0, 'zhCN', '告诉我更多关于灵魂精华的东西。'),
|
||||
(1201, 0, 'zhCN', '会发生什么糟糕的事情?'),
|
||||
(1202, 0, 'zhCN', '此路不通?那还有别的路吗……'),
|
||||
(1203, 0, 'zhCN', '兽人?荒芜之地?小意思!'),
|
||||
(1204, 0, 'zhCN', '当然!'),
|
||||
(1205, 0, 'zhCN', '对不起,贝波蒂。'),
|
||||
(1206, 0, 'zhCN', '完成了,全部完成了。'),
|
||||
(1212, 0, 'zhCN', '你能帮个忙吗?'),
|
||||
(1213, 0, 'zhCN', '请继续说下去。'),
|
||||
(1214, 0, 'zhCN', '我不明白。'),
|
||||
(1215, 0, 'zhCN', '确实如此。'),
|
||||
(1216, 0, 'zhCN', '洛拉姆斯,无论你是否帮忙,我都会去做的。'),
|
||||
(1217, 0, 'zhCN', '是的。'),
|
||||
(1666, 0, 'zhCN', '弗兰克罗恩,告诉我该怎么做。'),
|
||||
(1822, 0, 'zhCN', '我们还没有失去一切,卡兰!'),
|
||||
(1822, 1, 'zhCN', '我不是来伤害你的,卡兰。哥沙克派我来找你。他说你会告诉我关于公主的事情。'),
|
||||
(1823, 0, 'zhCN', '卡兰,门开了。你自由了。'),
|
||||
(1824, 0, 'zhCN', '确实如此。'),
|
||||
(1825, 0, 'zhCN', '请继续讲你的故事。'),
|
||||
(1826, 0, 'zhCN', '你怀疑某个内部人员与此有关?向敌方泄密?'),
|
||||
(1827, 0, 'zhCN', '接下来发生了什么事?'),
|
||||
(1828, 1, 'zhCN', '继续……'),
|
||||
(1831, 0, 'zhCN', '我们还没有失去一切,卡兰!'),
|
||||
(1832, 0, 'zhCN', '因为你还活着,我的手也没有卡在你结实的短脖子上。'),
|
||||
(1833, 0, 'zhCN', '没什么。我的任务是跟你谈谈,然后回去找萨尔。萨尔对营救公主的事情很有兴趣。'),
|
||||
(1834, 0, 'zhCN', '这就解释了你被关在黑石山下的囚房里的原因,是吧,矮人?'),
|
||||
(1835, 0, 'zhCN', '接下来发生了什么事?'),
|
||||
(1836, 0, 'zhCN', '你怀疑某个内部人员与此有关?向敌方泄密?'),
|
||||
(1837, 0, 'zhCN', '请继续讲你的故事。'),
|
||||
(1838, 0, 'zhCN', '确实如此。'),
|
||||
(1839, 0, 'zhCN', '我会把门开着的,你怎么逃出去是你的问题。再见,卡兰。'),
|
||||
(1843, 0, 'zhCN', '我准备好了!'),
|
||||
(1842, 1, 'zhCN', '塞勒斯,我没有任何证据。'),
|
||||
(1922, 0, 'zhCN', '我想购买更多的萨伦迪斯种子。'),
|
||||
(1945, 0, 'zhCN', '我已经把你要的都给你了,格鲁雷尔。现在,告诉我你的秘密!'),
|
||||
(1945, 1, 'zhCN', '杜姆雷尔,告诉我你的秘密!'),
|
||||
(2061, 0, 'zhCN', '挤“奶”吧,约翰。'),
|
||||
(2062, 0, 'zhCN', '做吧……现在就做。'),
|
||||
(2081, 0, 'zhCN', '你有秘银外壳吗?'),
|
||||
(2184, 0, 'zhCN', '请告诉我关于东部水晶塔的事情。'),
|
||||
(2184, 1, 'zhCN', '请告诉我关于北部水晶塔的事情。'),
|
||||
(2184, 2, 'zhCN', '请告诉我关于西部水晶塔的事情。'),
|
||||
(2184, 3, 'zhCN', '我把水晶塔使用手册弄丢了,能再给我一份吗?'),
|
||||
(2188, 0, 'zhCN', '你所说的这个拉克维是谁?'),
|
||||
(2189, 0, 'zhCN', '安戈洛环形山在哪儿?'),
|
||||
(2303, 0, 'zhCN', '这是给你的贪婪圣契。'),
|
||||
(2302, 0, 'zhCN', '这是给你的恢复圣契。'),
|
||||
(2301, 0, 'zhCN', '这是给你的坚韧圣契。'),
|
||||
(2300, 0, 'zhCN', '这是给你的体质圣契。'),
|
||||
(2299, 0, 'zhCN', '看看吧,这就是沉思圣契。'),
|
||||
(2405, 0, 'zhCN', '软泥怪和泥浆怪有何不同?'),
|
||||
(2407, 0, 'zhCN', '你认为还有这样一块处女地吗?'),
|
||||
(2465, 0, 'zhCN', '吉安娜女士,这听起来像是个奇怪的请求……但是我正在照顾一个非常害羞的孩子。对他来说,你是个英雄,他想要你的签名。'),
|
||||
(2562, 1, 'zhCN', '古博,我不知道怎么钓鱼。'),
|
||||
(2871, 0, 'zhCN', '我将进一步检查尸体。'),
|
||||
(2884, 0, 'zhCN', '什么职责?'),
|
||||
(2885, 0, 'zhCN', '是梦境吗?'),
|
||||
(2886, 0, 'zhCN', '我祈求能得到这样的经历。'),
|
||||
(2887, 0, 'zhCN', '这样的赞扬我可承受不起,高图斯。'),
|
||||
(2888, 0, 'zhCN', '长官!我将不惜一切代价来完成任务!'),
|
||||
(2889, 0, 'zhCN', '是,长官!谢谢你,长官!'),
|
||||
(2951, 0, 'zhCN', '你究竟是怎么进去的?'),
|
||||
(2984, 0, 'zhCN', '告诉我关于那块皮的事情。'),
|
||||
(2985, 2, 'zhCN', '关于莱斯·霜语的防腐液的章节。'),
|
||||
(2985, 1, 'zhCN', '关于魔化红线的章节。'),
|
||||
(2985, 0, 'zhCN', '关于磨损的憎恶缝合线的章节。'),
|
||||
(2991, 0, 'zhCN', '我如何才能获得比斯巨兽的皮呢?'),
|
||||
(2992, 0, 'zhCN', '假设我已经得到了比斯巨兽的皮,那么你还需要什么东西吗?你能用它做些什么?'),
|
||||
(2993, 0, 'zhCN', '好!'),
|
||||
(2994, 0, 'zhCN', '我将洗耳恭听。'),
|
||||
(2995, 0, 'zhCN', '让我搞搞清楚。你穿着这件……这件熔岩服,在火红的岩浆里面游泳,不,仰泳?而且在毫无察觉的情况下,被这只野兽吞下了肚?'),
|
||||
(2996, 0, 'zhCN', '我必须知道一些事情:你如何穿着这个东西解决个人问题的?'),
|
||||
(2997, 0, 'zhCN', '哦?'),
|
||||
(2998, 0, 'zhCN', '下次再遇到这种事情的时候我会好好考虑一下的。'),
|
||||
(2999, 0, 'zhCN', '我想,你应该去玛雷弗斯那里。'),
|
||||
(3044, 0, 'zhCN', '或许我能帮上忙。萨特,我们来谈笔交易吧。我去取回这块未铸造的胸甲并杀死野兽古拉鲁克。作为交换,你要教我如何制造胸甲。'),
|
||||
(3045, 0, 'zhCN', '他是怎么破坏协议的?'),
|
||||
(3046, 0, 'zhCN', '什么交易?'),
|
||||
(3047, 0, 'zhCN', '是吗?或许你该告诉我是什么让你烦恼。'),
|
||||
(3048, 0, 'zhCN', '很抱歉,我没有意识到你可以理解我说的话。你在这儿做什么?'),
|
||||
(3063, 0, 'zhCN', '你会没事的,奥比。攻击你的人已经被杀死了。'),
|
||||
(3064, 0, 'zhCN', '毫无疑问。'),
|
||||
(3065, 0, 'zhCN', '太可怕了。'),
|
||||
(3066, 0, 'zhCN', '请继续……'),
|
||||
(3067, 1, 'zhCN', '我想要遗忘龙鳞制皮专精!'),
|
||||
(3067, 0, 'zhCN', '我要接受训练。'),
|
||||
(3130, 0, 'zhCN', '我想从你这里买点东西。'),
|
||||
(3142, 0, 'zhCN', '艾瑞丹,我把上古长笛弄丢了,想再要一支。'),
|
||||
(3502, 0, 'zhCN', '我准备好听你的故事,提里奥。'),
|
||||
(3664, 0, 'zhCN', '战争之王,请将你的智慧与我共享。'),
|
||||
(3665, 0, 'zhCN', '有什么发现?'),
|
||||
(3666, 0, 'zhCN', '篡位者?'),
|
||||
(3667, 0, 'zhCN', '恕我直言,统帅大人--为什么不消灭他们?难道这不会巩固我们的地位吗?'),
|
||||
(3668, 0, 'zhCN', '我……我可不这样想,战争之王。'),
|
||||
(3669, 0, 'zhCN', '我活着就是为了为战争之王服务!没有你的指导,我的生活将空虚而无意义。'),
|
||||
(3670, 0, 'zhCN', '遵命,酋长!'),
|
||||
(3681, 0, 'zhCN', '谢谢你,提里奥。你的身份是什么?'),
|
||||
(3682, 0, 'zhCN', '那可真糟糕。'),
|
||||
(3683, 0, 'zhCN', '我会的,提里奥。'),
|
||||
(3801, 0, 'zhCN', '我准备好接受幻象了,麦兰达。'),
|
||||
(3862, 1, 'zhCN', '你战斗得很勇敢,精灵。我请你赐予我你身体和心灵的力量。'),
|
||||
(3862, 0, 'zhCN', '你战斗得很勇敢,精灵。我请你赐予我你身体和心灵的力量。'),
|
||||
(3881, 0, 'zhCN', '我想了解躯体力量的重要性。'),
|
||||
(3882, 0, 'zhCN', '你代表什么,灵魂?'),
|
||||
(3883, 0, 'zhCN', '我想了解心灵力量的重要性。'),
|
||||
(3884, 0, 'zhCN', '我听到你的话了,巨熊之灵,而且我理解。我现在寻求你的赐福以深入地学习力利爪的技能。'),
|
||||
(3884, 1, 'zhCN', '我听到你的话了,巨熊之灵,而且我理解。我现在寻求你的赐福以深入地学习力利爪的技能。'),
|
||||
(4041, 0, 'zhCN', '我想飞往鲁瑟兰村。'),
|
||||
(4041, 1, 'zhCN', '你知道在哪儿能找到水兽敏捷坠饰吗?'),
|
||||
(4041, 2, 'zhCN', '你知道在哪儿能找到水兽敏捷坠饰吗?'),
|
||||
(4042, 0, 'zhCN', '我想飞往雷霆崖。'),
|
||||
(4042, 1, 'zhCN', '你知道在哪儿能找到水兽耐力坠饰吗?'),
|
||||
(4042, 2, 'zhCN', '你知道在哪儿能找到水兽耐力坠饰吗?'),
|
||||
(4085, 0, 'zhCN', '是的,奥古斯图斯。我想做生意。'),
|
||||
(4093, 0, 'zhCN', '你向我们发出挑战而我们来了。你所说的大师在哪里?'),
|
||||
(4108, 0, 'zhCN', '告诉我更多的信息。'),
|
||||
(4109, 0, 'zhCN', '你还想说什么?'),
|
||||
(4763, 0, 'zhCN', '我的答案是伊瑟拉。'),
|
||||
(4763, 1, 'zhCN', '我的答案是奈萨里奥。'),
|
||||
(4763, 2, 'zhCN', '我的答案是阿莱克丝塔萨。'),
|
||||
(4763, 3, 'zhCN', '我的答案是玛里苟斯。'),
|
||||
(4764, 0, 'zhCN', '我的答案是克尔苏加德。'),
|
||||
(4764, 1, 'zhCN', '我的答案是古尔丹。'),
|
||||
(4764, 2, 'zhCN', '我的答案是基尔加丹。'),
|
||||
(4764, 3, 'zhCN', '我的答案是耐奥祖。'),
|
||||
(5102, 0, 'zhCN', '你听说过一个名叫厄运之槌的地方吗?'),
|
||||
(5346, 0, 'zhCN', '请告诉我关于雷姆洛斯和扎尔塔的历史。'),
|
||||
(1470, 0, 'zhCN', '好的,请教我召唤哈卡化身的法术。'),
|
||||
(5349, 2, 'zhCN', '请告诉我关于雷姆洛斯和扎尔塔的历史。'),
|
||||
(5349, 1, 'zhCN', '告诉我关于扎尔塔的更多信息。'),
|
||||
(5349, 0, 'zhCN', '告诉我关于玛拉顿的更多信息。'),
|
||||
(5351, 0, 'zhCN', '我不太明白……'),
|
||||
(5352, 0, 'zhCN', '不,真的,我还是不懂……'),
|
||||
(5502, 0, 'zhCN', '莱恩,我把达图尔的变形魔棒弄丢了。'),
|
||||
(5630, 0, 'zhCN', '拉瑞安,我想帮助你打败这些家伙!'),
|
||||
(5709, 0, 'zhCN', '游戏?你疯了吗?'),
|
||||
(5762, 0, 'zhCN', '雷克斯洛特,我把瑟银镣铐弄丢了。'),
|
||||
(5764, 0, 'zhCN', '拉比恩,你为什么说这是个巧合?'),
|
||||
(5765, 0, 'zhCN', '丰饶之果?');
|
||||
|
||||
REPLACE INTO `gossip_menu_option_locale` (`MenuID`, `OptionID`, `Locale`, `OptionText`) VALUES
|
||||
(5766, 0, 'zhCN', '但是,有些事情好像出了差错,是吗?'),
|
||||
(5767, 0, 'zhCN', '如果丰饶之果——或者说是魔藤——完全堕落,那会发生什么事呢?'),
|
||||
(5768, 0, 'zhCN', '下次再遇到这种事情的时候我会好好考虑一下的。'),
|
||||
(5812, 0, 'zhCN', '你是能制造出源质的塑地者吗?'),
|
||||
(5813, 0, 'zhCN', '弗兰扎尔,你对此了解多少?'),
|
||||
(5814, 0, 'zhCN', '裂缝?'),
|
||||
(5815, 0, 'zhCN', '发生了什么事?'),
|
||||
(5842, 0, 'zhCN', '我要干些什么呢?'),
|
||||
(5843, 0, 'zhCN', '这很有趣,但是你到底想说什么?'),
|
||||
(5844, 0, 'zhCN', '什么任务?'),
|
||||
(5845, 0, 'zhCN', '我在寻找一名强大的术士。'),
|
||||
(5864, 0, 'zhCN', '我想从你这儿买点东西。'),
|
||||
(6021, 0, 'zhCN', '我做不到,瓦拉斯塔兹!一定有什么办法可以拯救你!'),
|
||||
(6101, 0, 'zhCN', '瓦拉斯塔兹,不!!!'),
|
||||
(6141, 0, 'zhCN', '我现在赢得了在战歌峡谷中购买哪些物品的权利?'),
|
||||
(6142, 0, 'zhCN', '我现在赢得了在战歌峡谷中购买哪些物品的权利?'),
|
||||
(6187, 1, 'zhCN', '我按照王上的命令处决他,但是我尽可能地让他少受痛苦。正义必须得到伸张,但我们也要心怀怜悯。'),
|
||||
(6187, 2, 'zhCN', '我愿意以自己生命的代价来拯救他,然后他就可以证明自己的清白。如果可以的话,我会不惜一切代价来帮助他。'),
|
||||
(6208, 0, 'zhCN', '我挑战他的邪恶与蛮横,不惜一切代价捍卫王上的荣耀。'),
|
||||
(6208, 1, 'zhCN', '我平静但略有表示地对这种冒犯一言不发,让他对自己犯下的错心怀恐惧。回去之后,我会把这一切禀报王上。'),
|
||||
(6208, 2, 'zhCN', '我默不作声,忽略了这种侮辱。我不会告诉我的王上,因为我将不惜一切代价保护和平。这只是一次侮辱——而不是一次完全的宣战。'),
|
||||
(6209, 0, 'zhCN', '我会反对我的兄弟加入军队,即使我们的关系会因此产生永久的裂痕。对他自己和周围的人来说,他无疑是个危险,要想指望他会逐渐进步可就太冒险了。'),
|
||||
(6209, 1, 'zhCN', '我会支持我的兄弟加入军队,虽然这或许会威胁到军队的安全。我和军队的其他成员会帮助他,我相信他能够适应这儿的生活并且学会生存之道。'),
|
||||
(6209, 2, 'zhCN', '我会想办法让他不参加危险的任务,完全不需要他做任何事情,以此来保存我的家族的血脉。'),
|
||||
(6521, 0, 'zhCN', '我能从污染者那儿购买到什么好东西?'),
|
||||
(6522, 0, 'zhCN', '我能从阿拉索联军那儿购买到什么好东西?'),
|
||||
(6534, 0, 'zhCN', '你好,弗兰卡。我听说你知道纳塔莉亚的下落。'),
|
||||
(6539, 0, 'zhCN', '阿纳克洛斯,我已经准备好了。请将流沙节杖交给我吧。'),
|
||||
(6540, 0, 'zhCN', '你这怪物,我可不是什么教徒!来吧,受死吧!'),
|
||||
(6540, 1, 'zhCN', '赤红圣殿骑士!我手中握着你的召唤纹章。响应我的召唤吧!'),
|
||||
(6540, 2, 'zhCN', '碧蓝圣殿骑士!我手中握着你的召唤纹章。响应我的召唤吧!'),
|
||||
(6540, 3, 'zhCN', '土色圣殿骑士!我手中握着你的召唤纹章。响应我的召唤吧!'),
|
||||
(6540, 4, 'zhCN', '苍白圣殿骑士!我手中握着你的召唤纹章。响应我的召唤吧!'),
|
||||
(6542, 0, 'zhCN', '卑鄙的公爵,听好了!我可不是暮光之锤的走狗!我是来向你提出挑战的!来吧,受死吧……'),
|
||||
(6542, 1, 'zhCN', '灰烬公爵!我手中握着你的徽记!响应我的召唤吧!'),
|
||||
(6542, 2, 'zhCN', '深渊公爵!我手中握着你的徽记!响应我的召唤吧!'),
|
||||
(6542, 3, 'zhCN', '碎石公爵!我手中握着你的徽记!响应我的召唤吧!'),
|
||||
(6542, 4, 'zhCN', '微风公爵!我手中握着你的徽记!响应我的召唤吧!'),
|
||||
(6543, 0, 'zhCN', '审判之日已经来临了,恶魔!我向你挑战!'),
|
||||
(6543, 1, 'zhCN', '斯卡德诺克斯!我手中握着你的节杖,我召唤你进入这个世界!'),
|
||||
(6543, 2, 'zhCN', '斯古恩!我手中握着你的节杖,我召唤你进入这个世界!'),
|
||||
(6543, 3, 'zhCN', '卡苏姆!我手中握着你的节杖,我召唤你进入这个世界!'),
|
||||
(6543, 4, 'zhCN', '维拉希斯!我手中握着你的节杖,我召唤你进入这个世界!'),
|
||||
(6545, 0, 'zhCN', '等我把这些搞定了就会立刻回来。'),
|
||||
(6546, 0, 'zhCN', '被什么占据了?'),
|
||||
(6547, 0, 'zhCN', '失心疯?你说的是什么意思?'),
|
||||
(6548, 0, 'zhCN', '帮什么忙?'),
|
||||
(6550, 0, 'zhCN', '她后来怎么样了?'),
|
||||
(6552, 0, 'zhCN', '感谢你提供的信息,弗兰卡。'),
|
||||
(6553, 0, 'zhCN', '真是一个有意思的故事!那么说来她进入了雷戈虫巢,然后这就是你最后一次见到她了?'),
|
||||
(6554, 0, 'zhCN', '然后呢?'),
|
||||
(6555, 0, 'zhCN', '我想要问问你关于那只猴子的情况。'),
|
||||
(6556, 0, 'zhCN', '你连一个落单的暗夜精灵女祭司都没法摆平?'),
|
||||
(6557, 0, 'zhCN', '那真奇怪。'),
|
||||
(6558, 0, 'zhCN', '这就是我希望听到的。'),
|
||||
(6644, 0, 'zhCN', '请将我传送到双子皇帝的房间去。'),
|
||||
(6644, 1, 'zhCN', '请将我传送到最终密室前。'),
|
||||
(7058, 0, 'zhCN', '我想要忘掉侏儒工程学分支的知识!'),
|
||||
(7058, 1, 'zhCN', '我想要忘掉地精工程学分支的知识!'),
|
||||
(7058, 2, 'zhCN', '我100%地确定要在侏儒工程学这条路上走到底。'),
|
||||
(7058, 3, 'zhCN', '我100%地确定要在地精工程学这条路上走到底。'),
|
||||
(7058, 4, 'zhCN', '我确信自己要学习龙鳞制皮的技能。'),
|
||||
(7058, 5, 'zhCN', '我确信自己要学习元素制皮的技能。'),
|
||||
(7058, 6, 'zhCN', '我确信自己要学习部族制皮的技能。'),
|
||||
(7073, 0, 'zhCN', '我想我将你附过魔法的旗子放错了地方,法尔林。'),
|
||||
(7083, 0, 'zhCN', '关于幽灵显形器。我是不是把它放这儿了?要么就是我把它给弄丢了……'),
|
||||
(7083, 1, 'zhCN', '我似乎将提纯器弄丢了,穆克斯。我是不是把它放这儿了?'),
|
||||
(7099, 0, 'zhCN', '什么是无畏护甲?'),
|
||||
(7101, 0, 'zhCN', '你究竟是干什么的呢,洛汗?'),
|
||||
(7102, 0, 'zhCN', '什么是地穴追猎者护甲?'),
|
||||
(7103, 0, 'zhCN', '你这样的牛头人到底是为了什么来到瘟疫之地呢?'),
|
||||
(7104, 0, 'zhCN', '你好,莱茵。塞纳里奥议会到瘟疫之地来干什么?'),
|
||||
(7106, 0, 'zhCN', '请继续说下去。'),
|
||||
(7107, 0, 'zhCN', '还有什么可说的吗?'),
|
||||
(7111, 0, 'zhCN', '请继续说下去。'),
|
||||
(7113, 0, 'zhCN', '请继续说下去。'),
|
||||
(7114, 0, 'zhCN', '请继续说下去。'),
|
||||
(7118, 0, 'zhCN', '你为什么要来到光明之愿礼拜堂?'),
|
||||
(7119, 0, 'zhCN', '什么?骨镰?'),
|
||||
(7120, 0, 'zhCN', '啧啧,我看你是疯了……'),
|
||||
(7121, 0, 'zhCN', '嘿,等等,加基森真有舞厅吗?'),
|
||||
(7123, 0, 'zhCN', '难道这片土地还有救吗?它们已经遭受了如此严重腐化与侵蚀。'),
|
||||
(7124, 0, 'zhCN', '哪一种服务?'),
|
||||
(7379, 0, 'zhCN', '带我去北地哨塔。'),
|
||||
(7379, 1, 'zhCN', '带我去东墙哨塔。'),
|
||||
(7379, 2, 'zhCN', '带我去皇冠哨塔。'),
|
||||
(7415, 0, 'zhCN', '我准备好飞去埃索达了。'),
|
||||
(7431, 0, 'zhCN', '你好,帕卡特。我想购买点东西。'),
|
||||
(7435, 0, 'zhCN', '我想要学习你的铁匠技术,库雷恩。'),
|
||||
(7441, 0, 'zhCN', '喔,奶奶,你的耳朵怎么这么尖?'),
|
||||
(7442, 0, 'zhCN', '喔,奶奶,你的眼睛怎么这么大?'),
|
||||
(7443, 0, 'zhCN', '喔,奶奶,你的衣服怎么这么紫?'),
|
||||
(7482, 0, 'zhCN', '听着,人类。我不关心你们的约定,但是你们有我要的东西。告诉我在哪里可以找到血铸铁锭。'),
|
||||
(7571, 0, 'zhCN', '我希望遗忘药水专精。'),
|
||||
(7571, 1, 'zhCN', '我打算重新接受炼金师训练。我希望在药水制作方面有所专精。'),
|
||||
(7704, 1, 'zhCN', '把你知道的再跟我讲一遍!'),
|
||||
(7725, 0, 'zhCN', '奥图里斯派我过来的。他说你能帮我。'),
|
||||
(7729, 0, 'zhCN', '我是萨萨拉比姆派来收债的。还钱,否则我就不客气了。'),
|
||||
(7730, 0, 'zhCN', '我是萨萨拉比姆派来收债的。还钱,否则我就不客气了。'),
|
||||
(7731, 0, 'zhCN', '他想要“金币”。再说一次……要么付钱要么纳命来……'),
|
||||
(7732, 0, 'zhCN', '我是萨萨拉比姆派来收债的。还钱,否则我就不客气了。'),
|
||||
(7771, 0, 'zhCN', '列兵维克斯,我还需要一个伪装。'),
|
||||
(7970, 0, 'zhCN', '我正在执行前线指挥官金斯顿下达的轰炸任务。我需要一头武装狮鹫!'),
|
||||
(7970, 1, 'zhCN', '送我去破碎岗哨!'),
|
||||
(8095, 0, 'zhCN', '告诉我可以飞到哪里去。'),
|
||||
(8096, 0, 'zhCN', '送我去地狱岩床!'),
|
||||
(8096, 1, 'zhCN', '送我到荣耀岗哨去!'),
|
||||
(8207, 0, 'zhCN', '我需要一个新的相位扰流器,教授。'),
|
||||
(8229, 0, 'zhCN', '我准备起飞了!带我飞翔吧,龙!'),
|
||||
(8356, 0, 'zhCN', '拿走弗兰尼斯的背包。'),
|
||||
(8540, 0, 'zhCN', '我希望遗忘药剂专精。'),
|
||||
(8540, 1, 'zhCN', '我打算重新接受炼金师训练。我希望在药剂制作方面有所专精。'),
|
||||
(8542, 0, 'zhCN', '我希望遗忘转化专精。'),
|
||||
(8542, 1, 'zhCN', '我打算重新接受炼金师训练。我希望在元素转化方面有所专精。'),
|
||||
(8687, 0, 'zhCN', '<召唤泰罗克。>'),
|
||||
(8718, 0, 'zhCN', '是,我愿意乘坐虚空鳐飞往黑风码头。'),
|
||||
(8719, 0, 'zhCN', '当然!送我回天空卫队哨站吧。'),
|
||||
(8725, 0, 'zhCN', '我是巴塔斯的特使。他派我来收集一份完美的奥术精华。'),
|
||||
(8749, 1, 'zhCN', '我准备好了。带我去命令大厅吧。'),
|
||||
(8750, 2, 'zhCN', '我准备好了。带我去命令大厅吧。'),
|
||||
(8751, 0, 'zhCN', '我要兑换徽记。'),
|
||||
(8752, 0, 'zhCN', '我要兑换徽记。'),
|
||||
(8763, 0, 'zhCN', '无头骑士是谁?'),
|
||||
(8837, 0, 'zhCN', '我的潜水设备弄丢了,你还有备用的吗?'),
|
||||
(8846, 0, 'zhCN', '能替我捎个信吗?乌瑞恩国王有一封紧急信件要交给塞拉摩岛的吉安娜女士。'),
|
||||
(8886, 0, 'zhCN', '中士,把你的望远镜借给我。'),
|
||||
(8899, 0, 'zhCN', '望远镜借我用一下。'),
|
||||
(8934, 1, 'zhCN', '能再给我一头赛羊吗?'),
|
||||
(8934, 2, 'zhCN', '能再给我一头赛羊吗?'),
|
||||
(8934, 3, 'zhCN', '能再给我一头赛羊吗?'),
|
||||
(8976, 1, 'zhCN', '能再给我一头赛羊吗?'),
|
||||
(8976, 2, 'zhCN', '能再给我一头赛羊吗?'),
|
||||
(8976, 3, 'zhCN', '能再给我一头赛羊吗?'),
|
||||
(9013, 0, 'zhCN', '<谨慎地翻开海盗的口袋,寻找塔鲁克的欠款。>'),
|
||||
(9014, 0, 'zhCN', '给,你可以用这枚金币买给自己想要的东西。'),
|
||||
(9025, 1, 'zhCN', '奖币和纪念品'),
|
||||
(9025, 2, 'zhCN', '赛羊'),
|
||||
(9025, 3, 'zhCN', '本月美酒俱乐部'),
|
||||
(9165, 0, 'zhCN', '沃比斯波基,我弄丢了战歌兽人伪装。'),
|
||||
(9165, 1, 'zhCN', '沃比斯波基,我需要一面战歌旗帜。'),
|
||||
(9190, 0, 'zhCN', '在飞行员的尸体上搜寻应急工具包。'),
|
||||
(9190, 1, 'zhCN', '寻找飞行员的佩章。'),
|
||||
(9205, 0, 'zhCN', '送我去时光之穴。'),
|
||||
(9213, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9217, 0, 'zhCN', '你知道诅咒教派的情况吗?'),
|
||||
(9218, 0, 'zhCN', '我有理由相信你参与了信徒的行动。'),
|
||||
(9219, 0, 'zhCN', '你为诅咒教派效劳多长时间了?'),
|
||||
(9256, 0, 'zhCN', '把你的手放在石头上。');
|
||||
|
||||
REPLACE INTO `gossip_menu_option_locale` (`MenuID`, `OptionID`, `Locale`, `OptionText`) VALUES
|
||||
(9257, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9258, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9259, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9260, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9264, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9265, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9266, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9267, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9268, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9269, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9271, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9272, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9273, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9274, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9275, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9276, 0, 'zhCN', '把你的手放在石头上。'),
|
||||
(9297, 0, 'zhCN', '你不是一个人来的?'),
|
||||
(9297, 1, 'zhCN', '基尔加丹为什么会对普通的人类女孩感兴趣?'),
|
||||
(9335, 0, 'zhCN', '嗯……青蛙说你就是叛徒,我的“朋友”。'),
|
||||
(9429, 0, 'zhCN', '我来做示范!把练习用的降落伞包递给我!'),
|
||||
(9470, 0, 'zhCN', '无头骑士是谁?'),
|
||||
(9586, 0, 'zhCN', '旧斯坦索姆……为什么送我回到这一时间流?'),
|
||||
(9594, 0, 'zhCN', '是什么决定?'),
|
||||
(9595, 0, 'zhCN', '永恒之龙打算如何破坏这一时间流呢?'),
|
||||
(9610, 0, 'zhCN', '他们想干什么?'),
|
||||
(9611, 0, 'zhCN', '什么?加入王子的军队?'),
|
||||
(9612, 0, 'zhCN', '好吧,克罗米。'),
|
||||
(9724, 0, 'zhCN', '能给我一颗橙子吗?'),
|
||||
(9724, 2, 'zhCN', '我可能需要一颗木瓜。'),
|
||||
(9761, 0, 'zhCN', '我需要水下呼吸效果,盖伦。'),
|
||||
(9823, 1, 'zhCN', '我把禁魔监狱的钥匙弄丢了。'),
|
||||
(9823, 2, 'zhCN', '我把破碎大厅的钥匙弄丢了。'),
|
||||
(9823, 3, 'zhCN', '我把灼热峡谷的钥匙弄丢了。'),
|
||||
(9823, 5, 'zhCN', '我把哈拉迈德之眼弄丢了。'),
|
||||
(9823, 6, 'zhCN', '我把卡拉赞的钥匙弄丢了。'),
|
||||
(9823, 7, 'zhCN', '我丢掉了紫罗兰要塞的钥匙。'),
|
||||
(9823, 8, 'zhCN', '我遗失了灌注精华的月亮石。你能再给我一个吗?'),
|
||||
(9855, 0, 'zhCN', '我还有几个问题,盖米尔。'),
|
||||
(9860, 0, 'zhCN', '我还有几个问题,盖米尔。'),
|
||||
(9891, 1, 'zhCN', '我要参加对抗巨龙的战斗。能给我一只雄鹰吗,弗亚林?'),
|
||||
(9906, 0, 'zhCN', '很抱歉打扰到你,酋长。但是,你的兄弟的灵魂可能遇到了危险。你能把关于他的回忆告诉我吗?'),
|
||||
(9917, 1, 'zhCN', '我准备好进入风暴峭壁了。'),
|
||||
(10040, 3, 'zhCN', '我能帮你什么忙吗?'),
|
||||
(10160, 0, 'zhCN', '联盟区'),
|
||||
(10160, 1, 'zhCN', '部落区'),
|
||||
(10273, 0, 'zhCN', '拎起冰霜豹的尾巴,检查一下它是雄性还是雌性。'),
|
||||
(10274, 0, 'zhCN', '拎起冰爪熊的尾巴,检查一下它是雄性还是雌性。'),
|
||||
(10314, 0, 'zhCN', '我们这就来帮忙!'),
|
||||
(10316, 1, 'zhCN', '乐意为你效劳,女士。听说你曾是一把传说之剑的守护者。你能告诉我该去哪儿寻找这把剑吗?'),
|
||||
(10317, 0, 'zhCN', '前往一家银行。'),
|
||||
(10317, 1, 'zhCN', '拜访一名商人。'),
|
||||
(10317, 2, 'zhCN', '访问邮箱。'),
|
||||
(10317, 3, 'zhCN', '暗矛冠军的旗帜'),
|
||||
(10317, 4, 'zhCN', '被遗忘者冠军的旗帜'),
|
||||
(10317, 5, 'zhCN', '奥格瑞玛冠军的旗帜'),
|
||||
(10317, 6, 'zhCN', '银月城冠军的旗帜'),
|
||||
(10317, 7, 'zhCN', '雷霆崖冠军的旗帜'),
|
||||
(10318, 0, 'zhCN', '前往一家银行。'),
|
||||
(10318, 1, 'zhCN', '拜访一名商人。'),
|
||||
(10318, 2, 'zhCN', '访问邮箱。'),
|
||||
(10318, 3, 'zhCN', '达纳苏斯冠军的旗帜'),
|
||||
(10318, 4, 'zhCN', '埃索达冠军的旗帜'),
|
||||
(10318, 5, 'zhCN', '诺莫瑞根冠军的旗帜'),
|
||||
(10318, 6, 'zhCN', '铁炉堡冠军的旗帜'),
|
||||
(10318, 7, 'zhCN', '暴风城冠军的旗帜'),
|
||||
(10389, 2, 'zhCN', '传送到巨人熔炉。'),
|
||||
(10389, 4, 'zhCN', '传送到奥杜尔的前厅。'),
|
||||
(10389, 5, 'zhCN', '传送到破碎通道。'),
|
||||
(10389, 6, 'zhCN', '传送到生命温室。'),
|
||||
(10389, 7, 'zhCN', '传送到发明大厅。'),
|
||||
(10389, 8, 'zhCN', '传送到疯狂阶梯。'),
|
||||
(10599, 1, 'zhCN', '我们要向这些野兽再发出狠狠的一击!'),
|
||||
(10600, 1, 'zhCN', '我们已经准备好了。这一次情况就不一样了。'),
|
||||
(10609, 1, 'zhCN', '我们已经准备好了再次同那名法师作战。'),
|
||||
(10610, 0, 'zhCN', '我已经为下一个挑战做好了准备。'),
|
||||
(10610, 1, 'zhCN', '开始。'),
|
||||
(10638, 1, 'zhCN', '我希望能再次开始获取经验。'),
|
||||
(10668, 0, 'zhCN', '北风苔原'),
|
||||
(10668, 1, 'zhCN', '嚎风峡湾'),
|
||||
(10668, 2, 'zhCN', '索拉查盆地'),
|
||||
(10668, 3, 'zhCN', '冰冠冰川'),
|
||||
(10668, 4, 'zhCN', '风暴峭壁'),
|
||||
(10668, 5, 'zhCN', '地下……'),
|
||||
(10678, 1, 'zhCN', '等到我们将他们彻底消灭的时候,你会更吃惊的!'),
|
||||
(10679, 1, 'zhCN', '我们必须提高我们的团队协作能力,才能战胜那两个家伙。'),
|
||||
(10687, 1, 'zhCN', '我们已经做好了一切准备!'),
|
||||
(10688, 1, 'zhCN', '尽管把她们带出来,然后好好看着吧。'),
|
||||
(10692, 0, 'zhCN', '感谢你的赞扬,演武场统领。'),
|
||||
(10693, 0, 'zhCN', '这真奇怪……'),
|
||||
(10704, 0, 'zhCN', '我完成了十字军的试炼。'),
|
||||
(10704, 1, 'zhCN', '我还没有完成十字军的试炼。'),
|
||||
(10704, 2, 'zhCN', '我们要向这些野兽再发出狠狠的一击!'),
|
||||
(10706, 0, 'zhCN', '是的,我们已经准备好了迎接即将到来的挑战。'),
|
||||
(10847, 0, 'zhCN', '开始战斗'),
|
||||
(10854, 0, 'zhCN', '奥术师泰拜林说你会借我一件战袍。'),
|
||||
(10854, 1, 'zhCN', '魔导师哈瑟尔说你会借我一件战袍。'),
|
||||
(10933, 0, 'zhCN', '我们准备好了,穆拉丁。'),
|
||||
(10934, 0, 'zhCN', '确信无疑。出发吧!'),
|
||||
(10943, 0, 'zhCN', '有什么我能效劳的,我的女士?'),
|
||||
(10952, 0, 'zhCN', 'Lok tar ogar!我们准备好了!兽人兄弟们,冲啊!'),
|
||||
(10953, 0, 'zhCN', '我们准备好了,大王。巫妖王必须死!'),
|
||||
(10971, 0, 'zhCN', '有什么我能效劳的,女妖之王?'),
|
||||
(11013, 6, 'zhCN', '传送到辛达苟萨的巢穴。'),
|
||||
(11014, 6, 'zhCN', '传送到辛达苟萨的巢穴。'),
|
||||
(11015, 0, 'zhCN', '传送到圣光之锤。'),
|
||||
(11015, 1, 'zhCN', '传送到诅咒祷堂。'),
|
||||
(11015, 4, 'zhCN', '传送到死亡使者的高台。'),
|
||||
(11015, 5, 'zhCN', '传送到尖塔上层。'),
|
||||
(11015, 6, 'zhCN', '传送到辛达苟萨的巢穴。'),
|
||||
(11016, 6, 'zhCN', '传送到辛达苟萨的巢穴。'),
|
||||
(11017, 6, 'zhCN', '传送到辛达苟萨的巢穴。'),
|
||||
(11018, 0, 'zhCN', '传送到圣光之锤。'),
|
||||
(11018, 1, 'zhCN', '传送到诅咒祷堂。'),
|
||||
(11018, 3, 'zhCN', '传送到颅骨之墙。'),
|
||||
(11018, 4, 'zhCN', '传送到死亡使者的高台。'),
|
||||
(11018, 5, 'zhCN', '传送到尖塔上层。'),
|
||||
(11207, 0, 'zhCN', '我们言出如山,巫妖王必将败倒在我们脚下!'),
|
||||
(11277, 0, 'zhCN', '嗯,麻烦你啦!'),
|
||||
(11361, 0, 'zhCN', '有没有什么好玩的东西卖,索尔宾?'),
|
||||
(11387, 0, 'zhCN', '搞臭科林·烈酒的酒。'),
|
||||
(11388, 0, 'zhCN', '战斗'),
|
||||
(11388, 1, 'zhCN', '道歉。'),
|
||||
(11389, 1, 'zhCN', '用这块石头召唤埃霍恩大人。'),
|
||||
(11487, 0, 'zhCN', '嘿,洛拉姆斯,我从诅咒之地给你带来了一些消息。'),
|
||||
(11487, 1, 'zhCN', '我想要听听你的故事。'),
|
||||
(12039, 0, 'zhCN', '你们的种族?'),
|
||||
(12039, 1, 'zhCN', '如你所愿,维埃兰。'),
|
||||
(12040, 0, 'zhCN', '拜托。'),
|
||||
(12041, 0, 'zhCN', '不,维埃兰,我不清楚。'),
|
||||
(12042, 0, 'zhCN', '恶魔之魂?'),
|
||||
(12043, 0, 'zhCN', '未竟的事业?'),
|
||||
(12044, 0, 'zhCN', '为什么巨龙们不联合起来消灭它们?'),
|
||||
(12045, 0, 'zhCN', '除非?'),
|
||||
(12046, 0, 'zhCN', '我很乐意尝试,但是我需要指导。'),
|
||||
(12047, 0, 'zhCN', '我会尽力做到最好的,维埃兰。'),
|
||||
(12048, 0, 'zhCN', '我们会完成这个任务的。'),
|
||||
(21208, 0, 'zhCN', '转动钥匙,启动了机器。'),
|
||||
(21210, 1, 'zhCN', '萨纳瑞恩,我把捕兽器弄丢啦。你能再给我一个吗?'),
|
||||
(21211, 0, 'zhCN', '提尔斯的助手在哪里?'),
|
||||
(21212, 0, 'zhCN', '提尔斯的助手在哪里?'),
|
||||
(21217, 0, 'zhCN', '提尔斯的助手在哪里?'),
|
||||
(21251, 1, 'zhCN', '是的,我已经准备好前往风险湾了!'),
|
||||
(21321, 0, 'zhCN', '魂能是什么?'),
|
||||
(21402, 0, 'zhCN', '我下定决心了。让我遗忘炼金专精吧!'),
|
||||
(21403, 0, 'zhCN', '我下定决心了。让我遗忘炼金专精吧!'),
|
||||
(21404, 0, 'zhCN', '我下定决心了。让我遗忘炼金专精吧!'),
|
||||
(1842, 0, 'zhCN', '我让你看看我的能力的证明,塞勒斯。'),
|
||||
(57000, 0, 'zhCN', '你的职责是什么?');
|
||||
|
||||
REPLACE INTO `gossip_menu_option_locale` (`MenuID`, `OptionID`, `Locale`, `OptionText`) VALUES
|
||||
(57001, 0, 'zhCN', '什么是奥丹姆圆盘?'),
|
||||
(57002, 0, 'zhCN', '奥丹姆圆盘在哪里?'),
|
||||
(57003, 0, 'zhCN', '什么?我们的世界“被安排了新的探访计划”?这是什么意思?!'),
|
||||
(57004, 0, 'zhCN', '那么……奥丹姆里面到底有些什么?'),
|
||||
(57005, 0, 'zhCN', '我找到奥丹姆圆盘之后会回来的。'),
|
||||
(57011, 0, 'zhCN', '你所属的雇佣兵团迷雾之刃到底怎么了?'),
|
||||
(57010, 0, 'zhCN', '完了?'),
|
||||
(57009, 0, 'zhCN', '请继续,伯德雷。'),
|
||||
(57008, 0, 'zhCN', '不,不,请继续……这里的空气……似乎,呃,有点浑浊……'),
|
||||
(57007, 0, 'zhCN', '你在告诉我有关迷雾之刃的事情,以及你们怎样错误地接手了这个任务。'),
|
||||
(57006, 3, 'zhCN', '伯德雷,告诉我发生了什么事。'),
|
||||
(57006, 2, 'zhCN', '我把召唤火盆弄丢了!'),
|
||||
(57006, 1, 'zhCN', '我把一块瓦塔拉克公爵的饰品碎片弄丢了!'),
|
||||
(57006, 0, 'zhCN', '我把瓦塔拉克公爵的饰品弄丢了!'),
|
||||
(840, 3, 'zhCN', '我弄坏了我的艾萨莱特水晶武器!我需要你的帮助来打败那三个恶魔。'),
|
||||
(5851, 0, 'zhCN', '血蹄酋长,也许这请求听起来有些奇怪……但是我正在照顾一个非常害羞的孩子。对他来说,你就是个英雄,是他请求我来拿到你的蹄印。'),
|
||||
(5868, 0, 'zhCN', '我可不会受你的魅惑。去死吧。'),
|
||||
(5870, 0, 'zhCN', '这么说你是疯狂的克林弗兰?真不幸,我所期望的是一次真正的挑战。你敢以真面目视人吗?'),
|
||||
(5871, 0, 'zhCN', '我知道你是摧毁者阿托留斯。恶魔,现身吧!'),
|
||||
(5872, 0, 'zhCN', '侏儒?真可怜。面对我吧,恶魔!'),
|
||||
(347, 0, 'zhCN', '没有糖果就捣乱!'),
|
||||
(2985, 3, 'zhCN', '关于奥术水晶和奥金的章节。'),
|
||||
(2985, 4, 'zhCN', '关于暗影之皮的章节。'),
|
||||
(57015, 0, 'zhCN', '是的,我检查过了,上面的那一瓣找不到了!'),
|
||||
(57015, 1, 'zhCN', '是的,我检查过了,左边这一瓣找不到了!'),
|
||||
(57018, 0, 'zhCN', '是的,请把它召唤回来!'),
|
||||
(3801, 1, 'zhCN', '麦兰达,你有足够的眼珠再制作一个护身符吗?我把先前那个弄丢了。'),
|
||||
(15000, 0, 'zhCN', '我是来寻找拥有强大力量的神器的。把它们给我,我就不伤害你。'),
|
||||
(6445, 0, 'zhCN', '我要抓住加兹兰卡!告诉我怎么样才可以抓住它!'),
|
||||
(57023, 0, 'zhCN', '纳特,我想要购买一些臭泥鱼诱饵!'),
|
||||
(57023, 1, 'zhCN', '我要怎么样才能捕捉到鱼饵所需的臭泥鱼?'),
|
||||
(4013, 0, 'zhCN', '我想接受训练。'),
|
||||
(4013, 1, 'zhCN', '我想要遗忘我的天赋。'),
|
||||
(4013, 2, 'zhCN', '我该如何学习双天赋专精?'),
|
||||
(10631, 0, 'zhCN', '我把我的图腾丢掉了,你能帮助我吗?'),
|
||||
(10630, 0, 'zhCN', '我把我的图腾丢掉了,你能帮助我吗?'),
|
||||
(3068, 0, 'zhCN', '我要接受训练。'),
|
||||
(3068, 1, 'zhCN', '我想要遗忘龙鳞制皮专精!'),
|
||||
(3069, 0, 'zhCN', '我要接受训练。'),
|
||||
(3069, 1, 'zhCN', '我想要遗忘元素制皮专精!'),
|
||||
(3070, 0, 'zhCN', '我要接受训练。'),
|
||||
(3070, 1, 'zhCN', '我想要遗忘元素制皮专精!'),
|
||||
(3072, 0, 'zhCN', '我要接受训练。'),
|
||||
(3072, 1, 'zhCN', '我想要遗忘部族制皮专精!'),
|
||||
(3073, 0, 'zhCN', '我要接受训练。'),
|
||||
(3073, 1, 'zhCN', '我想要遗忘部族制皮专精!'),
|
||||
(3075, 1, 'zhCN', '我想要遗忘龙鳞制皮专精!'),
|
||||
(3076, 1, 'zhCN', '我想要遗忘元素制皮专精!'),
|
||||
(3077, 1, 'zhCN', '我想要遗忘部族制皮专精!'),
|
||||
(5481, 0, 'zhCN', '罗卡鲁,我丢了龙火护符。你能再给我一个吗?'),
|
||||
(5482, 0, 'zhCN', '哈尔琳,我把龙火护符弄丢了。你能帮我再做一个吗?'),
|
||||
(9676, 0, 'zhCN', '殿下,我已经准备好与恐惧魔王作战了。'),
|
||||
(6443, 0, 'zhCN', '学习配方。'),
|
||||
(5065, 0, 'zhCN', '我需要一瓶水之精萃,海达克西斯,因为我要去熔火之心毁掉炎魔之王的符文。'),
|
||||
(5065, 1, 'zhCN', '我想要这个永恒精萃,海达克西斯公爵。'),
|
||||
(5747, 0, 'zhCN', '(继续。)'),
|
||||
(60041, 0, 'zhCN', '(继续。)'),
|
||||
(60042, 0, 'zhCN', '(继续。)'),
|
||||
(60043, 0, 'zhCN', '(继续。)'),
|
||||
(12580, 0, 'zhCN', '我准备好了,我的军队也整装待命。让我们结束这次假面舞会吧!'),
|
||||
(7480, 0, 'zhCN', '请转告温德索尔元帅我已准备就绪。'),
|
||||
(51749, 0, 'zhCN', '普瑞斯托女士,请原谅我的冒昧,但是伯瓦尔·弗塔根公爵让我来寻求您的建议。'),
|
||||
(51750, 0, 'zhCN', '很抱歉,普瑞斯托女士。'),
|
||||
(51751, 0, 'zhCN', '普瑞斯托女士,请你原谅。这并非我的本意。'),
|
||||
(51752, 0, 'zhCN', '普瑞斯托女士您费时了,谢谢你。'),
|
||||
(59563, 0, 'zhCN', '约翰,我有公务在身。我需要一切有关温德索尔元帅的信息。你最后一次见他是什么时候?'),
|
||||
(59564, 0, 'zhCN', '你干了些什么?'),
|
||||
(59565, 0, 'zhCN', '矮人,脑子放清醒点。我可没问你什么老爹啊名誉啊之类的事儿。'),
|
||||
(59566, 0, 'zhCN', '反对者?'),
|
||||
(59567, 0, 'zhCN', '真有趣……继续。'),
|
||||
(59568, 0, 'zhCN', '温德索尔就那样死了……'),
|
||||
(59569, 0, 'zhCN', '他是怎么死的?'),
|
||||
(59570, 0, 'zhCN', '好吧,他到底在哪儿?等一会!你喝醉了吗?'),
|
||||
(59571, 0, 'zhCN', '他为什么在黑石深渊?'),
|
||||
(59572, 0, 'zhCN', '300?那么说黑铁矮人杀死了他,并把他拖到了深渊里?'),
|
||||
(59573, 0, 'zhCN', '啊……反对者。'),
|
||||
(59574, 0, 'zhCN', '谢谢你,约翰。你的故事振奋人心,使我受益匪浅。'),
|
||||
(59563, 1, 'zhCN', '挤“奶”吧,约翰。'),
|
||||
(4169, 0, 'zhCN', '请让我接受训练。'),
|
||||
(2782, 0, 'zhCN', '请让我接受训练。'),
|
||||
(4148, 0, 'zhCN', '请让我接受训练。'),
|
||||
(4151, 0, 'zhCN', '请让我接受训练。'),
|
||||
(4344, 0, 'zhCN', '请让我接受训练。'),
|
||||
(4128, 0, 'zhCN', '请让我接受训练。'),
|
||||
(4165, 0, 'zhCN', '请让我接受训练。'),
|
||||
(4207, 0, 'zhCN', '请让我接受训练。'),
|
||||
(4242, 0, 'zhCN', '请让我接受训练。'),
|
||||
(4351, 0, 'zhCN', '请让我接受训练。');
|
||||
|
||||
6
data/sql/updates/db_world/2022_09_21_05.sql
Normal file
6
data/sql/updates/db_world/2022_09_21_05.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
-- DB update 2022_09_21_04 -> 2022_09_21_05
|
||||
--
|
||||
UPDATE `creature` SET `phaseMask`=16 WHERE `guid` IN (246011,246009);
|
||||
UPDATE `creature` SET `phaseMask`=8 WHERE `guid` IN (246036,246098);
|
||||
|
||||
UPDATE `creature_template` SET `unit_flags`=`unit_flags`|770 WHERE `entry` IN (15072,15065,15066,15071);
|
||||
65
data/sql/updates/db_world/2022_09_21_06.sql
Normal file
65
data/sql/updates/db_world/2022_09_21_06.sql
Normal file
@@ -0,0 +1,65 @@
|
||||
-- DB update 2022_09_21_05 -> 2022_09_21_06
|
||||
SET @MAP_ID := 533;
|
||||
-- Fixes Naxxramas portals & teleport orbs
|
||||
-- Change portal animation from CCW to CW
|
||||
-- Delete double stacked portals outside Naxxramas in Dragonblight
|
||||
DELETE FROM `gameobject` WHERE `guid` IN (58826, 59714, 59738, 59743) AND `map` = 571;
|
||||
-- Swap opposite portal position
|
||||
-- 10man (id: 196467)
|
||||
DELETE FROM `gameobject` WHERE `guid` IN (151232, 151234, 151230, 151227);
|
||||
INSERT INTO `gameobject`
|
||||
(`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`,
|
||||
`position_x`, `position_y`, `position_z`, `orientation`, `rotation0`,
|
||||
`rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`,
|
||||
`ScriptName`, `VerifiedBuild`)
|
||||
VALUES
|
||||
(151234, 196467, 571, 0, 0, 1, 1, 3680.62, -1258.41, 244.434, 4.00824, 0.0, 0.0, 0.907575, -0.419889, 300, 0, 1, '', 0),
|
||||
(151230, 196467, 571, 0, 0, 1, 1, 3659.57, -1280.97, 244.434, 0.866651, 0.0, 0.0, 0.403068, 0.91517, 300, 0, 1, '', 0),
|
||||
(151232, 196467, 571, 0, 0, 1, 1, 3658.92, -1259.47, 244.434, 5.57904, 0.0, 0.0, 0.344844, -0.93866, 300, 0, 1, '', 0),
|
||||
(151227, 196467, 571, 0, 0, 1, 1, 3680.62, -1279.77, 244.434, 2.43745, 0.0, 0.0, 0.933127, 0.359547, 300, 0, 1, '', 0);
|
||||
-- Swap opposite portal position
|
||||
-- 25man (id: 192671)
|
||||
DELETE FROM `gameobject` WHERE `guid` IN (151228, 151229, 151231, 151233);
|
||||
INSERT INTO `gameobject`
|
||||
(`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`,
|
||||
`position_x`, `position_y`, `position_z`, `orientation`, `rotation0`,
|
||||
`rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`,
|
||||
`ScriptName`, `VerifiedBuild`)
|
||||
VALUES
|
||||
(151233, 192671, 571, 0, 0, 1, 1, 3680.62, -1258.41, 244.434, 4.00824, 0.0, 0.0, 0.907575, -0.419889, 300, 0, 1, '', 0),
|
||||
(151229, 192671, 571, 0, 0, 1, 1, 3659.57, -1280.97, 244.434, 0.866651, 0.0, 0.0, 0.403068, 0.91517, 300, 0, 1, '', 0),
|
||||
(151228, 192671, 571, 0, 0, 1, 1, 3680.62, -1279.77, 244.434, 2.43745, 0.0, 0.0, 0.933127, 0.359547, 300, 0, 1, '', 0),
|
||||
(151231, 192671, 571, 0, 0, 1, 1, 3658.92, -1259.47, 244.434, 5.57904, 0.0, 0.0, 0.352207, -0.935922, 300, 0, 1, '', 0);
|
||||
-- Remove unused portal object top of outside Naxxramas in Dragonblight
|
||||
DELETE FROM `gameobject` WHERE `guid` = 58826 AND `id` = 192613 AND `map` = 571;
|
||||
-- Remove unused portal object inside Naxxramas
|
||||
DELETE FROM `gameobject` WHERE `guid` = 65853 AND `map` = @MAP_ID;
|
||||
-- Remove double stacked portals inside Naxxramas
|
||||
DELETE FROM `gameobject` WHERE `id` IN (192663, 192664, 192665, 192666) AND `map` = @MAP_ID;
|
||||
-- Update AreaTriggerTeleport to middle of blue portal area
|
||||
-- Fix position Orb of Naxxramas and areatrigger
|
||||
SET @ORB_TP_TO_SAPPH:= 202278;
|
||||
DELETE FROM `gameobject` WHERE `id` = @ORB_TP_TO_SAPPH AND `guid` = 268048 AND `map` = @MAP_ID;
|
||||
INSERT INTO `gameobject`
|
||||
(`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`,
|
||||
`position_x`, `position_y`, `position_z`, `orientation`, `rotation0`,
|
||||
`rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`,
|
||||
`ScriptName`, `VerifiedBuild`)
|
||||
VALUES
|
||||
(268048, @ORB_TP_TO_SAPPH, @MAP_ID, 0, 0, 3, 1, 2997.5, -3437.73, 304.189, 5.95645, 0.0, 0.0,
|
||||
-0.162641, 0.986685, 300, 0, 1, '', 0);
|
||||
-- Update Teleport Positions of spells used by Naxxramas Portal and Orb of Naxxramas (id: 181575, ...)
|
||||
SET @DEATH_KNIGHT_PORTAL_EFFECT:= 28444;
|
||||
SET @SAPPHIRON_ENTRY_SPELL:= 72617;
|
||||
SET @SAPPHIRON_EXIT_SPELL:= 72613;
|
||||
DELETE FROM `spell_target_position` WHERE `ID` IN (@DEATH_KNIGHT_PORTAL_EFFECT, @SAPPHIRON_EXIT_SPELL, @SAPPHIRON_ENTRY_SPELL);
|
||||
INSERT INTO `spell_target_position`
|
||||
(`ID`, `EffectIndex`, `MapID`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `VerifiedBuild`)
|
||||
VALUES
|
||||
(@SAPPHIRON_ENTRY_SPELL, 0, @MAP_ID, 3498.300049, -5349.490234, 144.968002, 1.3698910, 0),
|
||||
(@SAPPHIRON_EXIT_SPELL, 0, @MAP_ID, 3038.98, -3434.47, 298.22, 1.994, 0),
|
||||
(@DEATH_KNIGHT_PORTAL_EFFECT, 0, @MAP_ID, 3005.51, -3434.64, 304.195, 6.2831, 0);
|
||||
-- AreaTrigger (id: 4156) Teleport to Sapphiron's Lair
|
||||
DELETE FROM `areatrigger_teleport` WHERE `ID` = 4156;
|
||||
DELETE FROM `areatrigger_scripts` WHERE `entry` = 4156;
|
||||
INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES (4156, 'at_naxxramas_hub_portal');
|
||||
74
data/sql/updates/db_world/2022_09_21_07.sql
Normal file
74
data/sql/updates/db_world/2022_09_21_07.sql
Normal file
@@ -0,0 +1,74 @@
|
||||
-- DB update 2022_09_21_06 -> 2022_09_21_07
|
||||
SET @VAELASTRASZ_UBRS := 10538;
|
||||
SET @VAELASTRASZ_THE_RED := 10340;
|
||||
SET @NEFARIUS := 10162;
|
||||
SET @CALL_OF_VAELASTRASZ := 16349;
|
||||
SET @CHROMATIC_PROTECTION := 16372;
|
||||
-- Add missing creature text: Vaelastrasz The Red, Vaelastrasz, Nefarius
|
||||
DELETE FROM `creature_text` WHERE `CreatureID` = @VAELASTRASZ_THE_RED AND `GroupID` IN (0,1);
|
||||
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`)
|
||||
VALUES
|
||||
(@VAELASTRASZ_THE_RED, 0, 0, 'All is not lost! Battle these beasts without fear. Your wounds I shall heal, bones I shall mend. Be renewed, heroes!', 14, 0, 100.0, 5, 0, 0, 5748, 0, 'Vaelastrasz the Red'),
|
||||
(@VAELASTRASZ_THE_RED, 1, 0, 'You have come too far to fail. Stand back, mortals.', 14, 0, 100.0, 5, 0, 0, 5760, 0, 'Vaelastrasz the Red');
|
||||
DELETE FROM `creature_text` WHERE `CreatureID` = @VAELASTRASZ_UBRS AND `GroupID` IN (0,1);
|
||||
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`)
|
||||
VALUES
|
||||
(@VAELASTRASZ_UBRS, 0, 0, 'You will suffer in this defeat, Nefarian!', 14, 0, 100.0, 5, 0, 0, 5761, 0, 'Vaelastrasz'),
|
||||
(@VAELASTRASZ_UBRS, 1, 0, 'You merely destroy an image, fool. I shall hunt you until the end of days.', 14, 0, 100.0, 5, 0, 0, 5778, 0, 'Vaelastrasz');
|
||||
DELETE FROM `creature_text` WHERE `CreatureID` = @NEFARIUS AND `GroupID` IN (15,16,17);
|
||||
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`)
|
||||
VALUES
|
||||
(@NEFARIUS, 15, 0, 'Enough! Playtime is over!', 14, 0, 100.0, 22, 0, 0, 5596, 0, 'Lord Victor Nefarius (UBRS)'),
|
||||
(@NEFARIUS, 16, 0, 'Vaelastrasz, when this world belongs to the black flight, your flight shall know its end.', 14, 0, 100.0, 22, 0, 0, 5776, 0, 'Lord Victor Nefarius (UBRS)'),
|
||||
(@NEFARIUS, 17, 0, 'But for now, your death will have to suffice...', 14, 0, 100.0, 0, 0, 0, 5777, 0, 'Lord Victor Nefarius (UBRS)');
|
||||
|
||||
-- Handle Seal of Ascension and passive aura proc Chromatic Protection with script
|
||||
DELETE FROM `event_scripts` WHERE `id`=4622;
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id` IN (@CALL_OF_VAELASTRASZ, @CHROMATIC_PROTECTION);
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`)
|
||||
VALUES
|
||||
(@CALL_OF_VAELASTRASZ, 'spell_blackrock_spire_call_of_vaelastrasz'),
|
||||
(@CHROMATIC_PROTECTION, 'spell_gyth_chromatic_protection');
|
||||
|
||||
-- Ring of Ascension only usable when inside Blackrock Spire AND Rend event started
|
||||
-- Show error message "SPELL_FAILED_INCORRECT_AREA" when not in BRS
|
||||
-- Show no error when trying to use the ring when not doing Rend event
|
||||
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 17) AND (`SourceGroup` = 0) AND (`SourceEntry` = @CALL_OF_VAELASTRASZ);
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`)
|
||||
VALUES
|
||||
(17, 0, @CALL_OF_VAELASTRASZ, 0, 0, 4, 0, 1583, 0, 0, 0, 39, 0, '', 'Ring of Ascension on-use-effect only if inside Blackrock Spire'),
|
||||
(17, 0, @CALL_OF_VAELASTRASZ, 0, 0, 13, 0, 10, 1, 2, 0, 172, 0, '', 'Ring of Ascension on-use-effect only if boss state 10 (Rend) is IN_PROGRESS.'),
|
||||
(17, 0, @CALL_OF_VAELASTRASZ, 0, 0, 13, 0, 25, 0, 0, 0, 172, 0, '', 'Ring of Ascension on-use-effect only if boss state 25 (Vaelastrasz) is NOT_STARTED.');
|
||||
|
||||
-- Set ScriptName Vaelastrasz the Red
|
||||
UPDATE `creature_template` SET `ScriptName`='npc_vaelastrasz_the_red' WHERE `entry` = @VAELASTRASZ_THE_RED;
|
||||
|
||||
-- Chromatic Protection
|
||||
-- PROC_EX_NORMAL_HIT 1 0x0000001
|
||||
-- PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG 131072 0x00020000 Taken negative spell that has dmg class magic
|
||||
DELETE FROM `spell_proc_event` WHERE `entry` = @CHROMATIC_PROTECTION;
|
||||
INSERT INTO `spell_proc_event`
|
||||
(`entry`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `procFlags`, `procEx`, `procPhase`, `ppmRate`, `CustomChance`, `Cooldown`)
|
||||
VALUES
|
||||
(@CHROMATIC_PROTECTION, 0, 0, 0, 0, 0, 131072, 1, 0, 0.0, 100.0, 0);
|
||||
|
||||
-- Allow corruption to be cast on Vaelastrasz
|
||||
-- Update comment to specify Vaelastrasz the Corrupt (BWL)
|
||||
SET @CORRUPTION:= 23642;
|
||||
UPDATE `conditions` SET `Comment` = 'Nefarius Corruption only affects Vaelastrasz the Corrupt'
|
||||
WHERE (`SourceTypeOrReferenceId` = 17) AND
|
||||
(`SourceGroup` = 0) AND (`SourceEntry` = @CORRUPTION) AND (`SourceId` = 0) AND
|
||||
(`ElseGroup` = 0);
|
||||
-- Add ElseGroup to also allow corruption to cast on Vaelastrasz (UBRS)
|
||||
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 17) AND
|
||||
(`SourceGroup` = 0) AND (`SourceEntry` = @CORRUPTION) AND (`SourceId` = 0) AND
|
||||
(`ElseGroup` = 1);
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`)
|
||||
VALUES
|
||||
(17, 0, @CORRUPTION, 0, 1, 31, 1, 3, 10538, 0, 0, 0, 0, '', 'Nefarius Corruption only affects Vaelastrasz');
|
||||
|
||||
-- Vaelastrasz the Red, Vaelastrasz
|
||||
-- Update mechanic immune mask, same as Vaelastrasz the Corrupt
|
||||
-- Update flags_extra to 1073742080 IMMUNITY_KNOCKBACK - creature is immune to knockback effects
|
||||
-- Immune to PC interaction (256) and NPC interaction (512)
|
||||
UPDATE `creature_template` SET `mechanic_immune_mask` = 650854239, `unit_flags` = 256|512, `type_flags` = 0, `flags_extra` = 1073741824 WHERE `entry` IN (@VAELASTRASZ_THE_RED, @VAELASTRASZ_UBRS);
|
||||
38
data/sql/updates/db_world/2022_09_21_08.sql
Normal file
38
data/sql/updates/db_world/2022_09_21_08.sql
Normal file
@@ -0,0 +1,38 @@
|
||||
-- DB update 2022_09_21_07 -> 2022_09_21_08
|
||||
--
|
||||
-- Correct speeds for display ids that were seen in 1.14 but not 1.13 sniffs. (Credit VMangos)
|
||||
UPDATE `creature_template` SET `speed_walk`=0.666668 WHERE `modelid1` IN (9444);
|
||||
UPDATE `creature_template` SET `speed_walk`=0.888888 WHERE `modelid1` IN (8315, 9489);
|
||||
UPDATE `creature_template` SET `speed_walk`=1 WHERE `modelid1` IN (127, 2142, 3212, 3231, 4537, 4869, 4912, 4937, 6117, 7311, 7336, 8594, 8702, 8870, 10443, 10454, 10612, 10802, 11014, 11017, 11023, 11308, 11341, 12069, 12070, 12071, 12072, 12081, 12082, 12083, 12084, 12935, 13229, 13230, 13231, 13232, 13249, 13250, 13251, 13252, 13254, 13255, 13256, 13257, 13266, 13267, 13268, 13269, 13270, 13271, 13272, 13273, 13286, 13287, 13288, 13289, 13290, 13291, 13292, 13293, 13296, 13297, 13301, 13302, 13303, 13304, 13306, 13307, 13308, 13309, 13351, 13352, 13353, 13354, 13357, 13358, 13359, 13360, 13365, 13366, 13367, 13368, 13371, 13372, 13373, 13374, 13375, 13376, 13377, 13378, 13379, 13380, 13381, 13382, 13456, 13459, 13533, 13534, 13544, 13546, 13547, 13549, 13557, 13558, 13559, 13560, 13561, 13563, 13564, 13565, 13566, 13567, 13568, 13569, 13632, 13633, 13634, 13635, 13636, 13637, 13638, 13639, 13640, 13641, 13642, 13643, 13775, 13789, 13790, 13791, 13792, 13803, 13804, 13805, 13806, 13889, 13890, 13893, 13894, 14255, 14515, 14520, 14523, 15201, 15330, 15563, 15622, 15637, 15641, 15735);
|
||||
UPDATE `creature_template` SET `speed_walk`=1.11111 WHERE `modelid1` IN (12342);
|
||||
UPDATE `creature_template` SET `speed_walk`=1.4 WHERE `modelid1` IN (10042);
|
||||
UPDATE `creature_template` SET `speed_walk`=1.55556 WHERE `modelid1` IN (549, 1127, 1128, 14514);
|
||||
UPDATE `creature_template` SET `speed_walk`=1.6 WHERE `modelid1` IN (11570);
|
||||
UPDATE `creature_template` SET `speed_walk`=4 WHERE `modelid1` IN (14884);
|
||||
UPDATE `creature_template` SET `speed_run`=1.14286 WHERE `modelid1` IN (127, 549, 1127, 1128, 2142, 3212, 3231, 4537, 4912, 4937, 6117, 7311, 8315, 8594, 8702, 8870, 9444, 9489, 10454, 10802, 11014, 11017, 11023, 11308, 11570, 12069, 12070, 12071, 12072, 12081, 12082, 12083, 12084, 12342, 13229, 13230, 13231, 13232, 13249, 13250, 13251, 13252, 13254, 13255, 13256, 13257, 13266, 13267, 13268, 13269, 13270, 13271, 13272, 13273, 13286, 13287, 13288, 13289, 13290, 13291, 13292, 13293, 13296, 13297, 13301, 13302, 13303, 13304, 13306, 13307, 13308, 13309, 13351, 13352, 13353, 13354, 13357, 13358, 13359, 13360, 13365, 13366, 13367, 13368, 13371, 13372, 13373, 13374, 13375, 13376, 13377, 13378, 13379, 13380, 13381, 13382, 13456, 13459, 13533, 13534, 13544, 13546, 13547, 13549, 13557, 13558, 13559, 13560, 13561, 13563, 13564, 13565, 13566, 13567, 13568, 13569, 13632, 13633, 13634, 13635, 13636, 13637, 13638, 13639, 13640, 13641, 13642, 13643, 13775, 13789, 13790, 13791, 13792, 13803, 13804, 13805, 13806, 13889, 13890, 13893, 13894, 14514, 14523, 15201, 15330, 15563, 15622, 15637, 15641, 15735);
|
||||
UPDATE `creature_template` SET `speed_run`=1.14286 WHERE `modelid1` IN (4869, 7336, 10443, 10612, 11341, 12935, 14255, 14515, 14520);
|
||||
UPDATE `creature_template` SET `speed_run`=1.42857 WHERE `modelid1` IN (10042);
|
||||
UPDATE `creature_template` SET `speed_run`=2.14286 WHERE `modelid1` IN (14884);
|
||||
|
||||
-- Correct speeds for creatures that were seen in 1.14 but not 1.13 sniffs. (Credit VMangos)
|
||||
UPDATE `creature_template` SET `speed_run`=1 WHERE `entry`=9688; -- Windwall Totem II
|
||||
UPDATE `creature_template` SET `speed_run`=0.992063 WHERE `entry`=10199; -- Grizzle Snowpaw
|
||||
UPDATE `creature_template` SET `speed_run`=0.992063 WHERE `entry`=14342; -- Ragepaw
|
||||
UPDATE `creature_template` SET `speed_walk`=0.888888 WHERE `entry`=1050; -- Scalebane Royal Guard
|
||||
UPDATE `creature_template` SET `speed_walk`=1.11111 WHERE `entry`=1552; -- Scale Belly
|
||||
UPDATE `creature_template` SET `speed_walk`=0.777776 WHERE `entry`=1847; -- Foulmane
|
||||
UPDATE `creature_template` SET `speed_walk`=1.55556 WHERE `entry`=2752; -- Rumbler
|
||||
UPDATE `creature_template` SET `speed_walk`=1.11111 WHERE `entry`=3094; -- Unseen
|
||||
UPDATE `creature_template` SET `speed_walk`=1.11111 WHERE `entry`=3617; -- Lordaeron Citizen
|
||||
UPDATE `creature_template` SET `speed_walk`=0.666668 WHERE `entry`=5808; -- Warlord Kolkanis
|
||||
UPDATE `creature_template` SET `speed_walk`=1.55556 WHERE `entry`=5889; -- Mesa Earth Spirit
|
||||
UPDATE `creature_template` SET `speed_walk`=1.55556 WHERE `entry`=5891; -- Minor Manifestation of Earth
|
||||
UPDATE `creature_template` SET `speed_walk`=1.11111 WHERE `entry`=8302; -- Deatheye
|
||||
UPDATE `creature_template` SET `speed_walk`=0.888888 WHERE `entry`=10196; -- General Colbatann
|
||||
UPDATE `creature_template` SET `speed_walk`=0.666668 WHERE `entry`=10199; -- Grizzle Snowpaw
|
||||
UPDATE `creature_template` SET `speed_walk`=1.55556 WHERE `entry`=10642; -- Eck'alom
|
||||
UPDATE `creature_template` SET `speed_walk`=0.666668 WHERE `entry`=13742; -- Kolk
|
||||
UPDATE `creature_template` SET `speed_walk`=0.666668 WHERE `entry`=14342; -- Ragepaw
|
||||
UPDATE `creature_template` SET `speed_walk`=1.55556 WHERE `entry`=14457; -- Princess Tempestria
|
||||
UPDATE `creature_template` SET `speed_walk`=1.55556 WHERE `entry`=14458; -- Watery Invader
|
||||
UPDATE `creature_template` SET `speed_walk`=0.666668 WHERE `entry`=15082; -- Gri'lek
|
||||
42
data/sql/updates/db_world/2022_09_21_09.sql
Normal file
42
data/sql/updates/db_world/2022_09_21_09.sql
Normal file
@@ -0,0 +1,42 @@
|
||||
-- DB update 2022_09_21_08 -> 2022_09_21_09
|
||||
--
|
||||
DELETE FROM `spell_target_position` WHERE `ID` IN (25865, 25866, 25867, 25868, 25869, 25870, 25871, 25872, 25873, 25874, 25875, 25876, 25877, 25878, 25879, 25880, 25881, 25882, 25883, 25884);
|
||||
INSERT INTO `spell_target_position` (`ID`, `MapID`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`) VALUES
|
||||
(25865, 531, -8023.59, 964.772, -41.229, 5.376),
|
||||
(25866, 531, -8042.13, 911.263, -42.841, 6.200),
|
||||
(25867, 531, -7999.36, 860.525, -47.206, 1.417),
|
||||
(25868, 531, -7971.30, 862.581, -48.099, 2.148),
|
||||
(25869, 531, -7943.21, 903.804, -48.473, 3.078),
|
||||
(25870, 531, -7954.38, 958.562, -41.609, 3.962),
|
||||
(25871, 531, -7997.19, 979.192, -41.653, 4.896),
|
||||
(25872, 531, -8037.89, 929.679, -43.416, 6.024),
|
||||
(25873, 531, -8015.41, 867.734, -45.607, 1.103),
|
||||
(25874, 531, -7982.80, 857.172, -48.212, 1.500),
|
||||
(25875, 531, -7952.12, 883.183, -48.194, 2.430),
|
||||
(25876, 531, -7947.22, 939.122, -44.014, 3.718),
|
||||
(25877, 531, -7975.77, 974.820, -41.584, 4.417),
|
||||
(25878, 531, -8032.75, 948.274, -41.919, 5.595),
|
||||
(25879, 531, -8037.08, 887.268, -43.581, 0.675),
|
||||
(25880, 531, -7992.21, 857.500, -47.762, 1.664),
|
||||
(25881, 531, -7960.71, 872.483, -48.759, 2.360),
|
||||
(25882, 531, -7942.98, 918.616, -46.401, 3.306),
|
||||
(25883, 531, -7964.32, 967.879, -42.112, 4.087),
|
||||
(25884, 531, -8015.24, 976.553, -41.647, 4.947);
|
||||
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_explode_trigger' AND `spell_id` = 25938;
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_summon_toxin_slime' AND `spell_id` = 26584;
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(25938, 'spell_explode_trigger'),
|
||||
(26584, 'spell_summon_toxin_slime');
|
||||
|
||||
UPDATE `creature_template` SET `flags_extra` = `flags_extra`|1073741824 WHERE `entry` = 15667;
|
||||
|
||||
UPDATE `creature_template_addon` SET `auras` = '25994' WHERE `entry` = 15299;
|
||||
|
||||
UPDATE `creature_template` SET `modelid1` = 19595, `unit_flags` = `unit_flags`|33554432, `flags_extra` = `flags_extra`|64, `AIName` = '', `ScriptName` = 'npc_toxic_slime' WHERE `entry` = 15925;
|
||||
|
||||
DELETE FROM `creature_template_movement` WHERE `CreatureId` = 15925;
|
||||
INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES
|
||||
(15925, 0, 0, 0, 1, 0, 0, 0);
|
||||
|
||||
UPDATE `spell_dbc` SET `Effect_1` = 28, `EffectBasePoints_1` = 1, `EffectDieSides_1` = 0, `EffectMiscValueB_1` = 64 WHERE `ID` = 26577;
|
||||
2790
data/sql/updates/db_world/2022_09_21_10.sql
Normal file
2790
data/sql/updates/db_world/2022_09_21_10.sql
Normal file
File diff suppressed because it is too large
Load Diff
6
data/sql/updates/db_world/2022_09_22_00.sql
Normal file
6
data/sql/updates/db_world/2022_09_22_00.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
-- DB update 2022_09_21_10 -> 2022_09_22_00
|
||||
-- Update spawnpoints in Ghostlands for multispawn Shadowpine Catlord & Shadowpine Hexxer
|
||||
UPDATE `creature` SET `id1`=16345, `id2`=16346 WHERE `guid` IN (85790,85835,85914,85826,85769,85933,85771,85763,85905,85833,85904,85846,85803,85931,85868,85929);
|
||||
|
||||
-- Update spawnpoints in Ghostlands for multispawn Shadowpine Headhunter & Shadowpine Shadowcaster
|
||||
UPDATE `creature` SET `id1`=16344, `id2`=16469 WHERE `guid` IN (81945,81948,81949,81993,81980,81929,81955,81989,81990,81959,81966,81973,81972,81968,81985,81984,81961);
|
||||
1941
data/sql/updates/db_world/2022_09_22_01.sql
Normal file
1941
data/sql/updates/db_world/2022_09_22_01.sql
Normal file
File diff suppressed because one or more lines are too long
@@ -153,6 +153,22 @@ bool SummonList::IsAnyCreatureAlive() const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SummonList::IsAnyCreatureWithEntryAlive(uint32 entry) const
|
||||
{
|
||||
for (auto const& guid : storage_)
|
||||
{
|
||||
if (Creature* summon = ObjectAccessor::GetCreature(*me, guid))
|
||||
{
|
||||
if (summon->GetEntry() == entry && summon->IsAlive())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SummonList::IsAnyCreatureInCombat() const
|
||||
{
|
||||
for (auto const& guid : storage_)
|
||||
|
||||
@@ -91,6 +91,7 @@ public:
|
||||
void DespawnEntry(uint32 entry);
|
||||
void DespawnAll();
|
||||
bool IsAnyCreatureAlive() const;
|
||||
bool IsAnyCreatureWithEntryAlive(uint32 entry) const;
|
||||
bool IsAnyCreatureInCombat() const;
|
||||
|
||||
template <typename T>
|
||||
|
||||
@@ -1986,6 +1986,11 @@ GroupJoinBattlegroundResult Group::CanJoinBattlegroundQueue(Battleground const*
|
||||
// don't let Death Knights join BG queues when they are not allowed to be teleported yet
|
||||
if (member->getClass() == CLASS_DEATH_KNIGHT && member->GetMapId() == 609 && !member->IsGameMaster() && !member->HasSpell(50977))
|
||||
return ERR_GROUP_JOIN_BATTLEGROUND_FAIL;
|
||||
|
||||
if (!member->GetBGAccessByLevel(bgTemplate->GetBgTypeID()))
|
||||
{
|
||||
return ERR_BATTLEGROUND_JOIN_TIMED_OUT;
|
||||
}
|
||||
}
|
||||
|
||||
// for arenas: check party size is proper
|
||||
|
||||
@@ -187,6 +187,10 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
|
||||
{
|
||||
err = ERR_BATTLEGROUND_NONE;
|
||||
}
|
||||
else if (!_player->GetBGAccessByLevel(bgTypeId))
|
||||
{
|
||||
err = ERR_BATTLEGROUND_NONE;
|
||||
}
|
||||
|
||||
if (err <= 0)
|
||||
{
|
||||
@@ -236,6 +240,10 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData)
|
||||
{
|
||||
err = ERR_BATTLEGROUND_NONE;
|
||||
}
|
||||
else if (!member->GetBGAccessByLevel(bgTypeId))
|
||||
{
|
||||
err = ERR_BATTLEGROUND_JOIN_TIMED_OUT;
|
||||
}
|
||||
|
||||
if (err < 0)
|
||||
{
|
||||
|
||||
@@ -51,7 +51,8 @@ enum DataTypes
|
||||
DATA_HALL_RUNE_6 = 21,
|
||||
DATA_HALL_RUNE_7 = 22,
|
||||
DATA_SOLAKAR_FLAMEWREATH = 23,
|
||||
DATA_MOR_GRAYHOOF = 24
|
||||
DATA_MOR_GRAYHOOF = 24,
|
||||
DATA_VAELASTRASZ = 25
|
||||
};
|
||||
|
||||
enum CreaturesIds
|
||||
@@ -75,6 +76,8 @@ enum CreaturesIds
|
||||
NPC_BLACKHAND_VETERAN = 9819,
|
||||
NPC_BLACKHAND_INCARCERATOR = 10316,
|
||||
NPC_LORD_VICTOR_NEFARIUS = 10162,
|
||||
NPC_VAELASTRASZ_THE_RED = 10340,
|
||||
NPC_VAELASTRASZ_UBRS = 10538,
|
||||
|
||||
NPC_SCARSHIELD_INFILTRATOR = 10299,
|
||||
|
||||
|
||||
@@ -18,15 +18,19 @@
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "blackrock_spire.h"
|
||||
#include "SpellScript.h"
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_REND_MOUNTS = 16167, // Change model
|
||||
SPELL_CORROSIVE_ACID = 16359, // Combat (self cast)
|
||||
SPELL_FLAMEBREATH = 16390, // Combat (Self cast)
|
||||
SPELL_FREEZE = 16350, // Combat (Self cast)
|
||||
SPELL_KNOCK_AWAY = 10101, // Combat
|
||||
SPELL_SUMMON_REND = 16328 // Summons Rend near death
|
||||
SPELL_REND_MOUNTS = 16167, // Change model
|
||||
SPELL_CORROSIVE_ACID = 16359, // Combat (self cast)
|
||||
SPELL_FLAMEBREATH = 16390, // Combat (Self cast)
|
||||
SPELL_FREEZE = 16350, // Combat (Self cast)
|
||||
SPELL_KNOCK_AWAY = 10101, // Combat
|
||||
SPELL_SUMMON_REND = 16328, // Summons Rend near death
|
||||
SPELL_CHROMATIC_PROTECTION_FIRE = 16373,
|
||||
SPELL_CHROMATIC_PROTECTION_FROST = 16392,
|
||||
SPELL_CHROMATIC_PROTECTION_NATURE = 16391,
|
||||
};
|
||||
|
||||
enum Misc
|
||||
@@ -179,7 +183,64 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
// 16372 - Chromatic Protection
|
||||
class spell_gyth_chromatic_protection : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_gyth_chromatic_protection);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_CORROSIVE_ACID, SPELL_FLAMEBREATH, SPELL_FREEZE });
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
if (SpellInfo const* spellInfo = eventInfo.GetSpellInfo())
|
||||
{
|
||||
switch (spellInfo->Id)
|
||||
{
|
||||
case SPELL_CORROSIVE_ACID:
|
||||
case SPELL_FLAMEBREATH:
|
||||
case SPELL_FREEZE:
|
||||
return true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* /* aurEff */, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
if (SpellInfo const* spellInfo = eventInfo.GetSpellInfo())
|
||||
{
|
||||
switch (spellInfo->Id)
|
||||
{
|
||||
case SPELL_CORROSIVE_ACID:
|
||||
GetTarget()->CastSpell(GetTarget(), SPELL_CHROMATIC_PROTECTION_NATURE, true);
|
||||
break;
|
||||
case SPELL_FLAMEBREATH:
|
||||
GetTarget()->CastSpell(GetTarget(), SPELL_CHROMATIC_PROTECTION_FIRE, true);
|
||||
break;
|
||||
case SPELL_FREEZE:
|
||||
GetTarget()->CastSpell(GetTarget(), SPELL_CHROMATIC_PROTECTION_FROST, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_gyth_chromatic_protection::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_gyth()
|
||||
{
|
||||
new boss_gyth();
|
||||
RegisterSpellScript(spell_gyth_chromatic_protection);
|
||||
}
|
||||
|
||||
@@ -253,6 +253,7 @@ public:
|
||||
{
|
||||
case EVENT_START_1:
|
||||
instance->SetBossState(DATA_WARCHIEF_REND_BLACKHAND, IN_PROGRESS);
|
||||
instance->SetData(DATA_VAELASTRASZ, NOT_STARTED);
|
||||
|
||||
if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
|
||||
victor->AI()->Talk(SAY_NEFARIUS_0);
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "ObjectMgr.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellScript.h"
|
||||
#include "blackrock_spire.h"
|
||||
|
||||
uint32 const DragonspireMobs[3] = { NPC_BLACKHAND_DREADWEAVER, NPC_BLACKHAND_SUMMONER, NPC_BLACKHAND_VETERAN };
|
||||
@@ -80,6 +81,7 @@ public:
|
||||
uint32 CurrentSolakarWave = 0;
|
||||
uint32 SolakarState = NOT_STARTED; // there should be a global instance encounter state, where is it?
|
||||
GuidVector SolakarSummons;
|
||||
uint32 VaelastraszState = NOT_STARTED;
|
||||
|
||||
instance_blackrock_spireMapScript(InstanceMap* map) : InstanceScript(map)
|
||||
{
|
||||
@@ -89,6 +91,7 @@ public:
|
||||
CurrentSolakarWave = 0;
|
||||
SolakarState = NOT_STARTED;
|
||||
SolakarSummons.clear();
|
||||
VaelastraszState = NOT_STARTED;
|
||||
}
|
||||
|
||||
void CreatureLooted(Creature* creature, LootType loot) override
|
||||
@@ -377,6 +380,9 @@ public:
|
||||
}
|
||||
SolakarState = data;
|
||||
break;
|
||||
case DATA_VAELASTRASZ:
|
||||
VaelastraszState = data;
|
||||
break;
|
||||
case DATA_UROK_DOOMHOWL:
|
||||
if (data == FAIL)
|
||||
{
|
||||
@@ -420,6 +426,10 @@ public:
|
||||
{
|
||||
return SolakarState;
|
||||
}
|
||||
else if (type == DATA_VAELASTRASZ)
|
||||
{
|
||||
return VaelastraszState;
|
||||
}
|
||||
else
|
||||
{
|
||||
return InstanceScript::GetData(type);
|
||||
@@ -877,6 +887,247 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/*#####
|
||||
# npc_vaelastrasz_the_red and Seal of Ascension event
|
||||
#####*/
|
||||
|
||||
// Set fixed spawn points so there's enough room for the dragon model
|
||||
Position VaelastraszTheRedPosNorth = Position(168.815506f, -420.311066f, 110.472298f, 3.141593f);
|
||||
Position VaelastraszTheRedPosSouth = Position(134.369049f, -420.311066f, 110.472298f, 6.283184f);
|
||||
|
||||
// 16349 - Call of Vaelastrasz
|
||||
|
||||
class spell_blackrock_spire_call_of_vaelastrasz : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_blackrock_spire_call_of_vaelastrasz);
|
||||
|
||||
void OnEffect(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
{
|
||||
if (InstanceScript* instance = caster->GetInstanceScript())
|
||||
{
|
||||
instance->SetData(DATA_VAELASTRASZ, IN_PROGRESS);
|
||||
float distanceToNorthSpawn = caster->GetDistance2d(VaelastraszTheRedPosNorth.m_positionX, VaelastraszTheRedPosNorth.m_positionY);
|
||||
float distanceToSouthSpawn = caster->GetDistance2d(VaelastraszTheRedPosSouth.m_positionX, VaelastraszTheRedPosSouth.m_positionY);
|
||||
Position spawnPosition = distanceToNorthSpawn < distanceToSouthSpawn ? VaelastraszTheRedPosNorth : VaelastraszTheRedPosSouth;
|
||||
// despawn is called by the CreatureAI
|
||||
caster->SummonCreature(NPC_VAELASTRASZ_THE_RED, spawnPosition, TEMPSUMMON_TIMED_DESPAWN, 60 * IN_MILLISECONDS);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectLaunch += SpellEffectFn(spell_blackrock_spire_call_of_vaelastrasz::OnEffect, EFFECT_0, SPELL_EFFECT_SEND_EVENT);
|
||||
}
|
||||
};
|
||||
|
||||
enum Spells
|
||||
{
|
||||
// Vaelastrasz the Red
|
||||
SPELL_VAELAN_SPAWNS = 16634, // Lightning Effect (Self cast)
|
||||
SPELL_TOUCH_OF_VAELASTRASZ = 16319, // AoE heal (Self cast)
|
||||
// Vaelastrasz
|
||||
SPELL_FLAMEBREATH = 16396, // Combat (Self cast)
|
||||
SPELL_VAELASTRASZ_SPAWN = 16354, // Self Cast Despawn (Self cast)
|
||||
// Victor Nefarius
|
||||
SPELL_NEFARIUS_CORRUPTION = 23642,
|
||||
};
|
||||
|
||||
enum ModelIds
|
||||
{
|
||||
MODEL_VAELASTRASZ_UBRS = 9909,
|
||||
MODEL_VAELASTRASZ_THE_RED = 9912,
|
||||
};
|
||||
|
||||
enum Says
|
||||
{
|
||||
// Vaelastrasz the Red
|
||||
SAY_RED_SUMMONED = 0,
|
||||
SAY_RED_BEFORE_TRANSFORM = 1,
|
||||
// Vaelastrasz
|
||||
SAY_VAEL_SUMMONED = 0,
|
||||
SAY_VAEL_STOP_COMBAT = 1,
|
||||
// Victor Nefarius
|
||||
SAY_NEFARIUS_15 = 15,
|
||||
SAY_NEFARIUS_16 = 16,
|
||||
SAY_NEFARIUS_17 = 17,
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
// Vaelastrasz the Red
|
||||
EVENT_RED_1_TALK_BEFORE_TRANSFORM = 1,
|
||||
EVENT_RED_2_TRANSFORM,
|
||||
// Vaelastrasz
|
||||
EVENT_VAEL_TALK_SUMMON,
|
||||
EVENT_VAEL_1_START_COMBAT,
|
||||
EVENT_NEFARIUS_TALK_1,
|
||||
EVENT_NEFARIUS_TALK_2,
|
||||
EVENT_NEFARIUS_TALK_3,
|
||||
EVENT_NEFARIUS_CORRUPTION,
|
||||
EVENT_VAEL_2_TRANSFORM,
|
||||
EVENT_VAEL_3_DESPAWN,
|
||||
EVENT_FLAME_BREATH,
|
||||
};
|
||||
|
||||
class npc_vaelastrasz_the_red : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_vaelastrasz_the_red() : CreatureScript("npc_vaelastrasz_the_red") { }
|
||||
|
||||
struct npc_vaelastrasz_the_redAI : public CreatureAI
|
||||
{
|
||||
npc_vaelastrasz_the_redAI(Creature* creature) : CreatureAI(creature) { }
|
||||
|
||||
void IsSummonedBy(Unit* summoner) override
|
||||
{
|
||||
if (!summoner)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_combatEnabled = false;
|
||||
me->CastSpell(me, SPELL_VAELAN_SPAWNS, false);
|
||||
me->SetFacingToObject(summoner);
|
||||
Talk(SAY_RED_SUMMONED);
|
||||
if (Creature* victor = me->FindNearestCreature(NPC_LORD_VICTOR_NEFARIUS, 100.0f))
|
||||
{
|
||||
_victorGUID = victor->GetGUID();
|
||||
}
|
||||
events.ScheduleEvent(EVENT_RED_1_TALK_BEFORE_TRANSFORM, 3s);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
events.Update(diff);
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_RED_1_TALK_BEFORE_TRANSFORM:
|
||||
Talk(SAY_RED_BEFORE_TRANSFORM);
|
||||
events.ScheduleEvent(EVENT_RED_2_TRANSFORM, 2s);
|
||||
break;
|
||||
case EVENT_RED_2_TRANSFORM:
|
||||
me->CastSpell(me, SPELL_TOUCH_OF_VAELASTRASZ, false);
|
||||
me->SetEntry(NPC_VAELASTRASZ_UBRS);
|
||||
me->SetDisplayId(MODEL_VAELASTRASZ_UBRS);
|
||||
events.ScheduleEvent(EVENT_VAEL_TALK_SUMMON, 1s);
|
||||
events.ScheduleEvent(EVENT_VAEL_1_START_COMBAT, 5s);
|
||||
break;
|
||||
case EVENT_VAEL_TALK_SUMMON:
|
||||
Talk(SAY_VAEL_SUMMONED);
|
||||
break;
|
||||
case EVENT_VAEL_1_START_COMBAT:
|
||||
_combatEnabled = true;
|
||||
me->SetImmuneToNPC(false);
|
||||
if (Creature* gyth = me->FindNearestCreature(NPC_GYTH, 100.0f, true))
|
||||
{
|
||||
me->AddThreat(gyth, 1000000.f);
|
||||
me->AI()->AttackStart(gyth);
|
||||
}
|
||||
if (Creature* rend = me->FindNearestCreature(NPC_WARCHIEF_REND_BLACKHAND, 100.0f, true))
|
||||
{
|
||||
if (!rend->IsImmuneToNPC() && rend->isTargetableForAttack())
|
||||
{
|
||||
me->AddThreat(rend, 100000.f);
|
||||
if (!me->FindNearestCreature(NPC_GYTH, 100.0f, true))
|
||||
{
|
||||
me->AI()->AttackStart(rend);
|
||||
}
|
||||
}
|
||||
}
|
||||
_events2.ScheduleEvent(EVENT_FLAME_BREATH, 5s);
|
||||
events.ScheduleEvent(EVENT_NEFARIUS_TALK_1, 500ms);
|
||||
break;
|
||||
case EVENT_NEFARIUS_TALK_1:
|
||||
if (Creature* victor = ObjectAccessor::GetCreature(*me, _victorGUID))
|
||||
{
|
||||
victor->GetMotionMaster()->Clear(); // stop pacing
|
||||
victor->GetMotionMaster()->MoveIdle();
|
||||
victor->StopMovingOnCurrentPos();
|
||||
victor->SetFacingToObject(me);
|
||||
victor->AI()->Talk(SAY_NEFARIUS_15);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_NEFARIUS_TALK_2, 6s);
|
||||
break;
|
||||
case EVENT_NEFARIUS_TALK_2:
|
||||
if (Creature* victor = ObjectAccessor::GetCreature(*me, _victorGUID))
|
||||
{
|
||||
victor->SetFacingToObject(me);
|
||||
victor->AI()->Talk(SAY_NEFARIUS_16);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_NEFARIUS_TALK_3, 5s);
|
||||
break;
|
||||
case EVENT_NEFARIUS_TALK_3:
|
||||
if (Creature* victor = ObjectAccessor::GetCreature(*me, _victorGUID))
|
||||
{
|
||||
victor->SetFacingToObject(me);
|
||||
victor->AI()->Talk(SAY_NEFARIUS_17);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_NEFARIUS_CORRUPTION, 5s);
|
||||
break;
|
||||
case EVENT_NEFARIUS_CORRUPTION:
|
||||
_combatEnabled = false;
|
||||
me->AttackStop();
|
||||
me->RemoveAllAuras();
|
||||
me->StopMovingOnCurrentPos();
|
||||
me->SetFaction(FACTION_FRIENDLY);
|
||||
if (Creature* victor = ObjectAccessor::GetCreature(*me, _victorGUID))
|
||||
{
|
||||
victor->SetFacingToObject(me);
|
||||
victor->CastSpell(me, SPELL_NEFARIUS_CORRUPTION, TRIGGERED_CAST_DIRECTLY);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_VAEL_2_TRANSFORM, 1s);
|
||||
break;
|
||||
case EVENT_VAEL_2_TRANSFORM:
|
||||
Talk(SAY_VAEL_STOP_COMBAT);
|
||||
me->SetDisplayId(MODEL_VAELASTRASZ_THE_RED);
|
||||
events.ScheduleEvent(EVENT_VAEL_3_DESPAWN, 500ms);
|
||||
break;
|
||||
case EVENT_VAEL_3_DESPAWN:
|
||||
DoCast(me, SPELL_VAELASTRASZ_SPAWN);
|
||||
me->DespawnOrUnsummon(1500);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!_combatEnabled || !UpdateVictim() || me->HasUnitState(UNIT_STATE_CASTING))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_events2.Update(diff);
|
||||
|
||||
switch (_events2.ExecuteEvent())
|
||||
{
|
||||
case EVENT_FLAME_BREATH:
|
||||
me->CastSpell(me, SPELL_FLAMEBREATH, false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
return;
|
||||
}
|
||||
|
||||
private:
|
||||
ObjectGuid _victorGUID;
|
||||
bool _combatEnabled;
|
||||
EventMap _events2;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return GetBlackrockSpireAI<npc_vaelastrasz_the_redAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_instance_blackrock_spire()
|
||||
{
|
||||
new instance_blackrock_spire();
|
||||
@@ -885,4 +1136,6 @@ void AddSC_instance_blackrock_spire()
|
||||
new go_father_flame();
|
||||
new near_scarshield_infiltrator();
|
||||
new at_scarshield_infiltrator();
|
||||
RegisterSpellScript(spell_blackrock_spire_call_of_vaelastrasz);
|
||||
new npc_vaelastrasz_the_red();
|
||||
}
|
||||
|
||||
@@ -17,34 +17,37 @@
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellInfo.h"
|
||||
#include "SpellScript.h"
|
||||
#include "TaskScheduler.h"
|
||||
#include "temple_of_ahnqiraj.h"
|
||||
|
||||
enum Spells
|
||||
{
|
||||
// Viscidus - Glob of Viscidus
|
||||
SPELL_POISON_SHOCK = 25993,
|
||||
SPELL_POISONBOLT_VOLLEY = 25991,
|
||||
SPELL_TOXIN = 26575,
|
||||
SPELL_SUMMON_TOXIN_SLIME = 26584,
|
||||
SPELL_SUMMON_TOXIN_SLIME_2 = 26577,
|
||||
SPELL_VISCIDUS_SLOWED = 26034,
|
||||
SPELL_VISCIDUS_SLOWED_MORE = 26036,
|
||||
SPELL_VISCIDUS_FREEZE = 25937,
|
||||
SPELL_REJOIN_VISCIDUS = 25896,
|
||||
SPELL_VISCIDUS_EXPLODE = 25938,
|
||||
SPELL_VISCIDUS_SUICIDE = 26003,
|
||||
SPELL_VISCIDUS_SHRINKS = 25893, // Removed from client, in world.spell_dbc
|
||||
SPELL_EXPLODE_TRIGGER = 25938,
|
||||
SPELL_VISCIDUS_SHRINKS = 25893, // Server-side
|
||||
SPELL_INVIS_SELF = 25905,
|
||||
SPELL_VISCIDUS_GROWS = 25897,
|
||||
SPELL_STUN_SELF = 25900,
|
||||
|
||||
SPELL_MEMBRANE_VISCIDUS = 25994, // damage reduction spell - removed from DBC
|
||||
SPELL_VISCIDUS_WEAKNESS = 25926, // aura which procs at damage - should trigger the slow spells - removed from DBC
|
||||
SPELL_VISCIDUS_GROWS = 25897, // removed from DBC
|
||||
SPELL_SUMMON_GLOBS = 25885, // summons npc 15667 using spells from 25865 to 25884; All spells have target coords - removed from DBC
|
||||
SPELL_VISCIDUS_TELEPORT = 25904, // removed from DBC
|
||||
// Toxic slime
|
||||
SPELL_TOXIN = 26575,
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_POISONBOLT_VOLLEY = 1,
|
||||
EVENT_POISON_SHOCK = 2,
|
||||
EVENT_RESET_PHASE = 3
|
||||
EVENT_TOXIN = 3,
|
||||
EVENT_RESET_PHASE = 4
|
||||
};
|
||||
|
||||
enum Phases
|
||||
@@ -81,52 +84,98 @@ enum MovePoints
|
||||
ROOM_CENTER = 1
|
||||
};
|
||||
|
||||
Position const ViscidusCoord = { -7992.36f, 908.19f, -52.62f, 1.68f }; /// @todo Visci isn't in room middle
|
||||
float const RoomRadius = 40.0f; /// @todo Not sure if its correct
|
||||
enum Misc
|
||||
{
|
||||
MAX_GLOB_SPAWN = 20,
|
||||
};
|
||||
|
||||
Position const roomCenter = { -7992.36f, 908.19f, -52.62f, 1.68f };
|
||||
|
||||
Position const resetPoint = { -7992.0f, 1041.0f, -23.84f };
|
||||
|
||||
std::array<uint32, MAX_GLOB_SPAWN> const spawnGlobSpells = { 25865, 25866, 25867, 25868, 25869, 25870, 25871, 25872, 25873, 25874, 25875, 25876, 25877, 25878, 25879, 25880, 25881, 25882, 25883, 25884 };
|
||||
|
||||
struct boss_viscidus : public BossAI
|
||||
{
|
||||
boss_viscidus(Creature* creature) : BossAI(creature, DATA_VISCIDUS) { }
|
||||
boss_viscidus(Creature* creature) : BossAI(creature, DATA_VISCIDUS)
|
||||
{
|
||||
me->LowerPlayerDamageReq(me->GetMaxHealth());
|
||||
}
|
||||
|
||||
bool CheckInRoom() override
|
||||
{
|
||||
if (me->GetExactDist2d(resetPoint) <= 10.f)
|
||||
{
|
||||
EnterEvadeMode(EVADE_REASON_BOUNDARY);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_Reset();
|
||||
_hitcounter = 0;
|
||||
_phase = PHASE_FROST;
|
||||
BossAI::Reset();
|
||||
events.Reset();
|
||||
SoftReset();
|
||||
_scheduler.CancelAll();
|
||||
me->RemoveAurasDueToSpell(SPELL_VISCIDUS_SHRINKS);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* attacker, uint32& /*damage*/, DamageEffectType, SpellSchoolMask) override
|
||||
void SoftReset()
|
||||
{
|
||||
_hitcounter = 0;
|
||||
me->RemoveAurasDueToSpell(SPELL_STUN_SELF);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
_phase = PHASE_FROST;
|
||||
me->RemoveAurasDueToSpell(SPELL_INVIS_SELF);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType effType, SpellSchoolMask) override
|
||||
{
|
||||
if (me->HealthBelowPct(5))
|
||||
damage = 0;
|
||||
|
||||
if (!attacker || _phase != PHASE_MELEE)
|
||||
return;
|
||||
|
||||
++_hitcounter;
|
||||
if (effType == DIRECT_DAMAGE)
|
||||
++_hitcounter;
|
||||
|
||||
if (attacker->HasUnitState(UNIT_STATE_MELEE_ATTACKING) && _hitcounter >= HITCOUNTER_EXPLODE)
|
||||
{
|
||||
if (me->GetHealthPct() <= 5.f)
|
||||
{
|
||||
Unit::Kill(attacker, me);
|
||||
return;
|
||||
}
|
||||
|
||||
Talk(EMOTE_EXPLODE);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
events.Reset();
|
||||
_phase = PHASE_GLOB;
|
||||
DoCast(me, SPELL_VISCIDUS_EXPLODE);
|
||||
me->SetVisible(false);
|
||||
me->RemoveAura(SPELL_TOXIN);
|
||||
me->RemoveAura(SPELL_VISCIDUS_FREEZE);
|
||||
|
||||
uint8 NumGlobes = me->GetHealthPct() / 5.0f;
|
||||
for (uint8 i = 0; i < NumGlobes; ++i)
|
||||
{
|
||||
float Angle = i * 2 * M_PI / NumGlobes;
|
||||
float X = ViscidusCoord.GetPositionX() + std::cos(Angle) * RoomRadius;
|
||||
float Y = ViscidusCoord.GetPositionY() + std::sin(Angle) * RoomRadius;
|
||||
float Z = -35.0f;
|
||||
|
||||
if (TempSummon* Glob = me->SummonCreature(NPC_GLOB_OF_VISCIDUS, X, Y, Z))
|
||||
DoCastSelf(SPELL_STUN_SELF, true);
|
||||
me->AttackStop();
|
||||
me->CastStop();
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_FLYDEATH); // not found in sniff, this is the best one I found
|
||||
_scheduler
|
||||
.Schedule(2500ms, [this](TaskContext /*context*/)
|
||||
{
|
||||
Glob->UpdateAllowedPositionZ(X, Y, Z);
|
||||
Glob->NearTeleportTo(X, Y, Z, 0.0f);
|
||||
Glob->GetMotionMaster()->MovePoint(ROOM_CENTER, ViscidusCoord);
|
||||
}
|
||||
}
|
||||
DoCastSelf(SPELL_EXPLODE_TRIGGER, true);
|
||||
})
|
||||
.Schedule(3000ms, [this](TaskContext /*context*/)
|
||||
{
|
||||
DoCastSelf(SPELL_INVIS_SELF, true);
|
||||
me->SetAuraStack(SPELL_VISCIDUS_SHRINKS, me, 20);
|
||||
me->LowerPlayerDamageReq(me->GetMaxHealth());
|
||||
me->SetHealth(me->GetMaxHealth() * 0.01f); // set 1% health
|
||||
DoResetThreat();
|
||||
me->NearTeleportTo(roomCenter.GetPositionX(),
|
||||
roomCenter.GetPositionY(),
|
||||
roomCenter.GetPositionZ(),
|
||||
roomCenter.GetOrientation());
|
||||
});
|
||||
}
|
||||
else if (_hitcounter == HITCOUNTER_SHATTER)
|
||||
Talk(EMOTE_SHATTER);
|
||||
@@ -136,7 +185,12 @@ struct boss_viscidus : public BossAI
|
||||
|
||||
void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
|
||||
{
|
||||
if ((spell->GetSchoolMask() & SPELL_SCHOOL_MASK_FROST) && _phase == PHASE_FROST && me->GetHealthPct() > 5.0f)
|
||||
if (spell->Id == SPELL_REJOIN_VISCIDUS)
|
||||
{
|
||||
me->RemoveAuraFromStack(SPELL_VISCIDUS_SHRINKS);
|
||||
}
|
||||
|
||||
if ((spell->GetSchoolMask() & SPELL_SCHOOL_MASK_FROST) && _phase == PHASE_FROST)
|
||||
{
|
||||
++_hitcounter;
|
||||
|
||||
@@ -145,85 +199,89 @@ struct boss_viscidus : public BossAI
|
||||
_hitcounter = 0;
|
||||
Talk(EMOTE_FROZEN);
|
||||
_phase = PHASE_MELEE;
|
||||
DoCast(me, SPELL_VISCIDUS_FREEZE);
|
||||
me->RemoveAura(SPELL_VISCIDUS_SLOWED_MORE);
|
||||
events.ScheduleEvent(EVENT_RESET_PHASE, 15000);
|
||||
DoCastSelf(SPELL_VISCIDUS_FREEZE);
|
||||
events.ScheduleEvent(EVENT_RESET_PHASE, 15s);
|
||||
}
|
||||
else if (_hitcounter >= HITCOUNTER_SLOW_MORE)
|
||||
else if (_hitcounter == HITCOUNTER_SLOW_MORE)
|
||||
{
|
||||
Talk(EMOTE_FREEZE);
|
||||
me->RemoveAura(SPELL_VISCIDUS_SLOWED);
|
||||
DoCast(me, SPELL_VISCIDUS_SLOWED_MORE);
|
||||
DoCastSelf(SPELL_VISCIDUS_SLOWED_MORE);
|
||||
}
|
||||
else if (_hitcounter >= HITCOUNTER_SLOW)
|
||||
else if (_hitcounter == HITCOUNTER_SLOW)
|
||||
{
|
||||
Talk(EMOTE_SLOW);
|
||||
DoCast(me, SPELL_VISCIDUS_SLOWED);
|
||||
DoCastSelf(SPELL_VISCIDUS_SLOWED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/) override
|
||||
void SummonedCreatureDies(Creature* summon, Unit* killer) override
|
||||
{
|
||||
_EnterCombat();
|
||||
events.Reset();
|
||||
if (summon->GetEntry() != NPC_GLOB_OF_VISCIDUS)
|
||||
return;
|
||||
|
||||
if (killer && killer->GetEntry() == NPC_GLOB_OF_VISCIDUS)
|
||||
{
|
||||
if (_phase == PHASE_GLOB)
|
||||
{
|
||||
_phase = PHASE_FROST;
|
||||
me->RemoveAurasDueToSpell(SPELL_INVIS_SELF);
|
||||
}
|
||||
|
||||
int32 heal = me->GetMaxHealth() * 0.05f;
|
||||
me->CastCustomSpell(me, SPELL_VISCIDUS_GROWS, &heal, nullptr, nullptr, true);
|
||||
}
|
||||
|
||||
if (!summons.IsAnyCreatureWithEntryAlive(NPC_GLOB_OF_VISCIDUS)) // all globs were killed
|
||||
{
|
||||
SoftReset();
|
||||
InitSpells();
|
||||
me->LowerPlayerDamageReq(me->GetMaxHealth());
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* who) override
|
||||
{
|
||||
BossAI::EnterCombat(who);
|
||||
InitSpells();
|
||||
}
|
||||
|
||||
void InitSpells()
|
||||
{
|
||||
DoCast(me, SPELL_TOXIN);
|
||||
events.ScheduleEvent(EVENT_TOXIN, 15s, 20s);
|
||||
events.ScheduleEvent(EVENT_POISONBOLT_VOLLEY, 10s, 15s);
|
||||
events.ScheduleEvent(EVENT_POISON_SHOCK, 7s, 12s);
|
||||
}
|
||||
|
||||
void EnterEvadeMode(EvadeReason why) override
|
||||
{
|
||||
summons.DespawnAll();
|
||||
ScriptedAI::EnterEvadeMode(why);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
DoCast(me, SPELL_VISCIDUS_SUICIDE);
|
||||
summons.DespawnAll();
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
if (!UpdateVictim() || !CheckInRoom())
|
||||
return;
|
||||
|
||||
if (_phase == PHASE_GLOB && summons.empty())
|
||||
{
|
||||
DoResetThreat();
|
||||
me->NearTeleportTo(ViscidusCoord.GetPositionX(),
|
||||
ViscidusCoord.GetPositionY(),
|
||||
ViscidusCoord.GetPositionZ(),
|
||||
ViscidusCoord.GetOrientation());
|
||||
|
||||
_hitcounter = 0;
|
||||
_phase = PHASE_FROST;
|
||||
InitSpells();
|
||||
me->SetVisible(true);
|
||||
}
|
||||
|
||||
events.Update(diff);
|
||||
_scheduler.Update(diff);
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_POISONBOLT_VOLLEY:
|
||||
DoCast(me, SPELL_POISONBOLT_VOLLEY);
|
||||
DoCastSelf(SPELL_POISONBOLT_VOLLEY);
|
||||
events.ScheduleEvent(EVENT_POISONBOLT_VOLLEY, 10s, 15s);
|
||||
break;
|
||||
case EVENT_POISON_SHOCK:
|
||||
DoCast(me, SPELL_POISON_SHOCK);
|
||||
DoCastSelf(SPELL_POISON_SHOCK);
|
||||
events.ScheduleEvent(EVENT_POISON_SHOCK, 7s, 12s);
|
||||
break;
|
||||
case EVENT_TOXIN:
|
||||
DoCastRandomTarget(SPELL_SUMMON_TOXIN_SLIME);
|
||||
events.ScheduleEvent(EVENT_TOXIN, 15s, 20s);
|
||||
break;
|
||||
case EVENT_RESET_PHASE:
|
||||
_hitcounter = 0;
|
||||
me->RemoveAura(SPELL_VISCIDUS_FREEZE);
|
||||
_phase = PHASE_FROST;
|
||||
break;
|
||||
default:
|
||||
@@ -231,54 +289,118 @@ struct boss_viscidus : public BossAI
|
||||
}
|
||||
}
|
||||
|
||||
if (_phase != PHASE_GLOB)
|
||||
if (_phase != PHASE_GLOB && me->GetReactState() == REACT_AGGRESSIVE)
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
uint8 _hitcounter;
|
||||
Phases _phase;
|
||||
uint8 _phase;
|
||||
TaskScheduler _scheduler;
|
||||
};
|
||||
|
||||
struct boss_glob_of_viscidus : public ScriptedAI
|
||||
{
|
||||
boss_glob_of_viscidus(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
boss_glob_of_viscidus(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
InstanceScript* instance = me->GetInstanceScript();
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
|
||||
if (Creature* viscidus = me->GetMap()->GetCreature(instance->GetGuidData(DATA_VISCIDUS)))
|
||||
{
|
||||
if (BossAI* viscidusAI = dynamic_cast<BossAI*>(viscidus->GetAI()))
|
||||
viscidusAI->SummonedCreatureDespawn(me);
|
||||
|
||||
if (viscidus->IsAlive() && viscidus->GetHealthPct() < 5.0f)
|
||||
void InitializeAI() override
|
||||
{
|
||||
me->SetInCombatWithZone();
|
||||
_scheduler.CancelAll();
|
||||
_scheduler.Schedule(2400ms, [this](TaskContext context)
|
||||
{
|
||||
viscidus->SetVisible(true);
|
||||
Unit::Kill(viscidus->GetVictim(), viscidus);
|
||||
}
|
||||
else
|
||||
{
|
||||
viscidus->SetHealth(viscidus->GetHealth() - viscidus->GetMaxHealth() / 20);
|
||||
viscidus->CastSpell(viscidus, SPELL_VISCIDUS_SHRINKS);
|
||||
}
|
||||
}
|
||||
me->GetMotionMaster()->MovePoint(ROOM_CENTER, roomCenter);
|
||||
float topSpeed = me->GetSpeedRate(MOVE_RUN) + 0.2142855f * 4;
|
||||
context.Schedule(1s, [this, topSpeed](TaskContext context)
|
||||
{
|
||||
float newSpeed = me->GetSpeedRate(MOVE_RUN) + 0.2142855f; // sniffed
|
||||
me->SetSpeed(MOVE_RUN, newSpeed < topSpeed ? newSpeed : topSpeed);
|
||||
context.Repeat();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
void MovementInform(uint32 /*type*/, uint32 id) override
|
||||
{
|
||||
if (id == ROOM_CENTER)
|
||||
{
|
||||
DoCast(me, SPELL_REJOIN_VISCIDUS);
|
||||
if (TempSummon* summon = me->ToTempSummon())
|
||||
summon->UnSummon();
|
||||
DoCastSelf(SPELL_REJOIN_VISCIDUS);
|
||||
Unit::Kill(me, me);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
_scheduler.Update(diff);
|
||||
}
|
||||
|
||||
protected:
|
||||
TaskScheduler _scheduler;
|
||||
};
|
||||
|
||||
struct npc_toxic_slime : public ScriptedAI
|
||||
{
|
||||
npc_toxic_slime(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
|
||||
void InitializeAI() override
|
||||
{
|
||||
SetCombatMovement(false);
|
||||
DoCastSelf(SPELL_TOXIN);
|
||||
|
||||
InstanceScript* instance = me->GetInstanceScript();
|
||||
|
||||
if (Creature* viscidus = instance->GetCreature(DATA_VISCIDUS))
|
||||
if (viscidus->AI())
|
||||
viscidus->AI()->JustSummoned(me);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_explode_trigger : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_explode_trigger);
|
||||
|
||||
void HandleOnHit()
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
|
||||
uint8 globsToSpawn = std::floor(caster->GetHealthPct() / 5.f);
|
||||
for (uint8 i = 0; i < globsToSpawn; i++)
|
||||
caster->CastSpell((Unit*)nullptr, spawnGlobSpells[i], true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnHit += SpellHitFn(spell_explode_trigger::HandleOnHit);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_summon_toxin_slime : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_summon_toxin_slime);
|
||||
|
||||
void HandleOnHit()
|
||||
{
|
||||
if (Unit* target = GetHitUnit())
|
||||
target->CastSpell(target, SPELL_SUMMON_TOXIN_SLIME_2, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnHit += SpellHitFn(spell_summon_toxin_slime::HandleOnHit);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_viscidus()
|
||||
{
|
||||
RegisterTempleOfAhnQirajCreatureAI(boss_viscidus);
|
||||
RegisterTempleOfAhnQirajCreatureAI(boss_glob_of_viscidus);
|
||||
RegisterTempleOfAhnQirajCreatureAI(npc_toxic_slime);
|
||||
RegisterSpellScript(spell_explode_trigger);
|
||||
RegisterSpellScript(spell_summon_toxin_slime);
|
||||
}
|
||||
|
||||
@@ -28,7 +28,8 @@ ObjectData const creatureData[] =
|
||||
{ NPC_OURO_SPAWNER, DATA_OURO_SPAWNER },
|
||||
{ NPC_MASTERS_EYE, DATA_MASTERS_EYE },
|
||||
{ NPC_VEKLOR, DATA_VEKLOR },
|
||||
{ NPC_VEKNILASH, DATA_VEKNILASH }
|
||||
{ NPC_VEKNILASH, DATA_VEKNILASH },
|
||||
{ NPC_VISCIDUS, DATA_VISCIDUS }
|
||||
};
|
||||
|
||||
DoorData const doorData[] =
|
||||
@@ -62,7 +63,6 @@ public:
|
||||
ObjectGuid VemGUID;
|
||||
ObjectGuid KriGUID;
|
||||
ObjectGuid YaujGUID;
|
||||
ObjectGuid ViscidusGUID;
|
||||
ObjectGuid CThunGUID;
|
||||
GuidVector CThunGraspGUIDs;
|
||||
|
||||
@@ -91,9 +91,6 @@ public:
|
||||
case NPC_YAUJ:
|
||||
YaujGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_VISCIDUS:
|
||||
ViscidusGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_OURO_SPAWNER:
|
||||
if (GetBossState(DATA_OURO) != DONE)
|
||||
creature->Respawn();
|
||||
@@ -168,8 +165,6 @@ public:
|
||||
return KriGUID;
|
||||
case DATA_YAUJ:
|
||||
return YaujGUID;
|
||||
case DATA_VISCIDUS:
|
||||
return ViscidusGUID;
|
||||
}
|
||||
return ObjectGuid::Empty;
|
||||
}
|
||||
|
||||
@@ -640,6 +640,27 @@ public:
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool AreAllWingsCleared() const
|
||||
{
|
||||
return (GetBossState(BOSS_MAEXXNA) == DONE) && (GetBossState(BOSS_LOATHEB) == DONE) && (GetBossState(BOSS_THADDIUS) == DONE) && (GetBossState(BOSS_HORSEMAN) == DONE);
|
||||
}
|
||||
|
||||
bool CheckRequiredBosses(uint32 bossId, Player const* /* player */) const override
|
||||
{
|
||||
switch (bossId)
|
||||
{
|
||||
case BOSS_SAPPHIRON:
|
||||
if (!AreAllWingsCleared())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SetBossState(uint32 bossId, EncounterState state) override
|
||||
{
|
||||
// pull all the trash if not killed
|
||||
@@ -1221,8 +1242,33 @@ public:
|
||||
};
|
||||
};
|
||||
|
||||
const Position sapphironEntryTP = { 3498.300049f, -5349.490234f, 144.968002f, 1.3698910f };
|
||||
|
||||
class at_naxxramas_hub_portal : public AreaTriggerScript
|
||||
{
|
||||
public:
|
||||
at_naxxramas_hub_portal() : AreaTriggerScript("at_naxxramas_hub_portal") { }
|
||||
|
||||
bool OnTrigger(Player* player, AreaTrigger const* /*trigger*/) override
|
||||
{
|
||||
if (player->IsAlive() && !player->IsInCombat())
|
||||
{
|
||||
if (InstanceScript *instance = player->GetInstanceScript())
|
||||
{
|
||||
if (instance->CheckRequiredBosses(BOSS_SAPPHIRON))
|
||||
{
|
||||
player->TeleportTo(533, sapphironEntryTP.m_positionX, sapphironEntryTP.m_positionY, sapphironEntryTP.m_positionZ, sapphironEntryTP.m_orientation);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_instance_naxxramas()
|
||||
{
|
||||
new instance_naxxramas();
|
||||
new boss_naxxramas_misc();
|
||||
new at_naxxramas_hub_portal();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user