mirror of
https://github.com/araxiaonline/RandomScriptsforAzerothCore.git
synced 2026-06-13 02:22:19 -04:00
Add files via upload
This commit is contained in:
@@ -1,38 +1,116 @@
|
|||||||
--Needs lots and lots of work. Register health check to event 9.
|
--Needs lots and lots of work.
|
||||||
--Add true false statements to check if he's reached below 50.
|
|
||||||
--Don't remove events unnecessarily
|
|
||||||
|
|
||||||
local AbominableGreench = {};
|
local NPC_ABOMINABLE_GREENCH = 13602 -- Replace this with the correct entry ID for Abominable Greench
|
||||||
|
|
||||||
function AbominableGreench.OnDie(event, creature)
|
local PHASE_ONE = 1
|
||||||
creature:SendUnitYell("Argh... I'll be back!", 0)
|
local PHASE_TWO = 2
|
||||||
|
local PHASE_THREE = 3
|
||||||
|
local PHASE_FOUR = 4
|
||||||
|
|
||||||
|
PHASE_DIALOGUE = {
|
||||||
|
[PHASE_ONE] = "",
|
||||||
|
[PHASE_TWO] = "You've been naughty! Time for a frosty surprise!",
|
||||||
|
[PHASE_THREE] = "Frostbite's nipping at your noses!",
|
||||||
|
[PHASE_FOUR] = "I'm the Grinch who stole Winter Veil! Taste my icy wrath!",
|
||||||
|
}
|
||||||
|
|
||||||
|
SPAWN_DIALOGUE = "The Abominable Greench has come to ruin your Winter Veil! Bwahaha!"
|
||||||
|
DEATH_DIALOGUE = "Winter...veil...will...return..."
|
||||||
|
AGGRO_DIALOGUE = "You're a mean one, aren't you? Time to crush your holiday spirit!"
|
||||||
|
|
||||||
|
local SPELL_FROSTBOLT = 10179
|
||||||
|
local SPELL_CONE_OF_COLD = 20828
|
||||||
|
local SPELL_FROST_NOVA = 27088
|
||||||
|
local SPELL_BLIZZARD = 19099
|
||||||
|
local SPELL_ICE_ARMOR = 12544
|
||||||
|
local SPELL_ICY_VEINS = 12472
|
||||||
|
local SPELL_SUMMON_WINTER_WISP = 39319 -- Replace with a custom spell that summons Winter Wisp adds
|
||||||
|
|
||||||
|
local phaseAbilities = {
|
||||||
|
[PHASE_ONE] = {
|
||||||
|
{spell = SPELL_FROSTBOLT, minInterval = 3000, maxInterval = 6000},
|
||||||
|
{spell = SPELL_CONE_OF_COLD, minInterval = 10000, maxInterval = 15000},
|
||||||
|
},
|
||||||
|
[PHASE_TWO] = {
|
||||||
|
{spell = SPELL_FROST_NOVA, minInterval = 12000, maxInterval = 18000},
|
||||||
|
{spell = SPELL_BLIZZARD, minInterval = 20000, maxInterval = 25000},
|
||||||
|
},
|
||||||
|
[PHASE_THREE] = {
|
||||||
|
{spell = SPELL_ICY_VEINS, minInterval = 60000, maxInterval = 90000},
|
||||||
|
{spell = SPELL_SUMMON_WINTER_WISP, minInterval = 30000, maxInterval = 45000},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
local function GetPhaseByHealth(healthPct)
|
||||||
|
if healthPct > 75 then
|
||||||
|
return PHASE_ONE
|
||||||
|
elseif healthPct > 50 then
|
||||||
|
return PHASE_TWO
|
||||||
|
elseif healthPct > 25 then
|
||||||
|
return PHASE_THREE
|
||||||
|
else
|
||||||
|
return PHASE_FOUR
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function AbominableGreench.Enrage(event, delay, calls, creature)
|
|
||||||
if (creature:GetHealthPct() <= 50) then
|
local function CastSpellWithCooldown(eventId, delay, repeats, creature, spell, minInterval, maxInterval, triggered)
|
||||||
creature:RemoveEvents()
|
if creature:IsInCombat() then
|
||||||
creature:CastSpell(creature, 61369, true)
|
creature:CastSpell(creature:GetVictim(), spell, triggered)
|
||||||
creature:RegisterEvent(AbominableGreench.FrostAttack, 4000, 0)
|
local interval = math.random(minInterval, maxInterval)
|
||||||
end
|
creature:RegisterEvent(CastSpellWithCooldown, interval, 1, creature, spell, minInterval, maxInterval, triggered)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function AbominableGreench.FrostAttack(event, delay, calls, creature)
|
|
||||||
local TARGET = creature:GetAITarget(1, true, 0, 45)
|
local function ApplyPhaseAbilities(creature, phase)
|
||||||
creature:CastSpell(TARGET, 35263, true)
|
creature:RemoveEvents()
|
||||||
|
for _, ability in ipairs(phaseAbilities[phase]) do
|
||||||
|
local triggered = ability.spell == SPELL_CONE_OF_COLD
|
||||||
|
CastSpellWithCooldown(creature, ability.spell, ability.minInterval, ability.maxInterval, triggered)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function AbominableGreench.OnEnterCombat(event, creature, target)
|
local function Greench_OnEnterCombat(event, creature, target)
|
||||||
local TARGET = creature:GetAITarget(1, true, 0, 45)
|
creature:CastSpell(creature, SPELL_ICE_ARMOR, true)
|
||||||
creature:CastSpell(TARGET, 33547, true)
|
local currentPhase = GetPhaseByHealth(creature:GetHealthPct())
|
||||||
creature:SendUnitYell("You can try to stop me, but it's just a waste of time. I'm the king of Winter Veil crime!", 0)
|
|
||||||
creature:RegisterEvent(AbominableGreench.Enrage, 1000, 0)
|
creature:SendUnitYell(AGGRO_DIALOGUE, 0)
|
||||||
|
ApplyPhaseAbilities(creature, currentPhase)
|
||||||
end
|
end
|
||||||
|
|
||||||
function AbominableGreench.OnLeaveCombat(event, creature)
|
local function Greench_OnLeaveCombat(event, creature)
|
||||||
creature:SendUnitYell("What's the matter? Don't you like my holiday spirit?", 0)
|
creature:RemoveEvents()
|
||||||
creature:RemoveEvents()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
RegisterCreatureEvent(13602, 1, AbominableGreench.OnEnterCombat)
|
local function Greench_OnDamageTaken(event, creature, attacker, damage)
|
||||||
RegisterCreatureEvent(13602, 2, AbominableGreench.OnLeaveCombat)
|
local healthPct = creature:GetHealthPct()
|
||||||
RegisterCreatureEvent(13602, 4, AbominableGreench.OnDie)
|
local newPhase = GetPhaseByHealth(healthPct)
|
||||||
|
|
||||||
|
if newPhase ~= creature:GetData("currentPhase") then
|
||||||
|
creature:RemoveEvents()
|
||||||
|
creature:SetData("currentPhase", newPhase)
|
||||||
|
if PHASE_DIALOGUE[newPhase] then
|
||||||
|
creature:SendUnitYell(PHASE_DIALOGUE[newPhase], 0)
|
||||||
|
end
|
||||||
|
ApplyPhaseAbilities(creature, newPhase)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function Greench_OnDied(event, creature, killer)
|
||||||
|
creature:RemoveEvents()
|
||||||
|
creature:SendUnitYell(DEATH_DIALOGUE, 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function Greench_OnSpawn(event, creature)
|
||||||
|
creature:SetData("currentPhase", PHASE_ONE)
|
||||||
|
creature:SendUnitYell(SPAWN_DIALOGUE, 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
RegisterCreatureEvent(NPC_ABOMINABLE_GREENCH, 1, Greench_OnEnterCombat)
|
||||||
|
RegisterCreatureEvent(NPC_ABOMINABLE_GREENCH, 2, Greench_OnLeaveCombat)
|
||||||
|
RegisterCreatureEvent(NPC_ABOMINABLE_GREENCH, 4, Greench_OnDied)
|
||||||
|
RegisterCreatureEvent(NPC_ABOMINABLE_GREENCH, 9, Greench_OnDamageTaken)
|
||||||
|
RegisterCreatureEvent(NPC_ABOMINABLE_GREENCH, 5, Greench_OnSpawn)
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
local ItemEntry = 65000 -- Hearthstone. You can change this item ID to whatever.
|
local ItemEntry = 65000 -- Dinklestone. You can change this item ID to whatever as long as it has a spell. Please see items to remove if you're not using my server,
|
||||||
|
|
||||||
local T = {
|
local T = {
|
||||||
[1] = { "|TInterface\\icons\\achievement_pvp_h_h:37:37:-23|t|cff610B0BHorde Cities|r", 1,
|
[1] = {"|TInterface\\icons\\achievement_pvp_h_h:37:37:-23|t|cff610B0BHorde Cities|r", 1,
|
||||||
{"|TInterface\\icons\\achievement_zone_durotar:37:37:-23|t|cff610B0BOrgrimmar|r", 1, 1503, -4415.5, 22, 0},
|
{"|TInterface\\icons\\achievement_zone_durotar:37:37:-23|t|cff610B0BOrgrimmar|r", 1, 1503, -4415.5, 22, 0},
|
||||||
{"|TInterface\\icons\\achievement_zone_tirisfalglades_01:37:37:-23|t|cff610B0BUndercity|r", 0, 1831, 238.5, 61.6, 0},
|
{"|TInterface\\icons\\achievement_zone_tirisfalglades_01:37:37:-23|t|cff610B0BUndercity|r", 0, 1831, 238.5, 61.6, 0},
|
||||||
{"|TInterface\\icons\\achievement_zone_mulgore_01:37:37:-23|t|cff610B0BThunderbluff|r", 1, -1278, 122, 132, 0},
|
{"|TInterface\\icons\\achievement_zone_mulgore_01:37:37:-23|t|cff610B0BThunderbluff|r", 1, -1278, 122, 132, 0},
|
||||||
@@ -17,7 +17,7 @@ local T = {
|
|||||||
{"|TInterface\\icons\\achievement_reputation_wyrmresttemple:37:37:-23|t|cff642EFEShattrath|r", 530, -1838.16, 5301.79, -12.428, 0},
|
{"|TInterface\\icons\\achievement_reputation_wyrmresttemple:37:37:-23|t|cff642EFEShattrath|r", 530, -1838.16, 5301.79, -12.428, 0},
|
||||||
{"|TInterface\\icons\\achievement_reputation_kirintor:37:37:-23|t|cff642EFEDalaran|r", 571, 5804.15, 624.771, 647.767, 0},
|
{"|TInterface\\icons\\achievement_reputation_kirintor:37:37:-23|t|cff642EFEDalaran|r", 571, 5804.15, 624.771, 647.767, 0},
|
||||||
},
|
},
|
||||||
[3] = { "|TInterface\\icons\\achievement_bg_winwsg:37:37:-23|t|cffC41F3BPvP Locations|r", 2,
|
[3] = {"|TInterface\\icons\\achievement_bg_winwsg:37:37:-23|t|cffC41F3BPvP Locations|r", 2,
|
||||||
{"Gurubashi Arena", 0, -13229, 226, 33, 1},
|
{"Gurubashi Arena", 0, -13229, 226, 33, 1},
|
||||||
{"Dire Maul Arena", 1, -3669, 1094, 160, 3},
|
{"Dire Maul Arena", 1, -3669, 1094, 160, 3},
|
||||||
{"Nagrand Arena", 530, -1983, 6562, 12, 2},
|
{"Nagrand Arena", 530, -1983, 6562, 12, 2},
|
||||||
@@ -60,6 +60,38 @@ local T = {
|
|||||||
{"Icecrown Citadel", 571, 5873.82, 2110.98, 636.011, 3.5523},
|
{"Icecrown Citadel", 571, 5873.82, 2110.98, 636.011, 3.5523},
|
||||||
{"Ruby Sanctum", 571, 3600.5, 197.34, -113.76, 5.29905},
|
{"Ruby Sanctum", 571, 3600.5, 197.34, -113.76, 5.29905},
|
||||||
},
|
},
|
||||||
|
[7] = { "|TInterface\\icons\\inv_misc_head_human_01:37:37:-23|t|cffFFFFFFMorphs|r", 2,
|
||||||
|
{"Demorph", 0},
|
||||||
|
{"Sally", 2043},
|
||||||
|
{"New Thrall", 4527},
|
||||||
|
{"Old Thrall", 27656},
|
||||||
|
{"Cairne", 4307},
|
||||||
|
{"Velen", 17822},
|
||||||
|
{"Sylvanas", 28213},
|
||||||
|
{"Vol'jin", 10357},
|
||||||
|
{"Anduin", 11655},
|
||||||
|
{"Magni", 3597},
|
||||||
|
{"Tyrande", 7274},
|
||||||
|
{"Jaina", 2970},
|
||||||
|
{"Varian", 28127},
|
||||||
|
{"Bolvar", 5566},
|
||||||
|
{"Old Tirion", 9477},
|
||||||
|
{"New Tirion", 31011},
|
||||||
|
{"Vereesa", 28222},
|
||||||
|
{"Rhonin", 16024},
|
||||||
|
{"Putress", 27611},
|
||||||
|
{"Alexstrasza", 28227},
|
||||||
|
{"Chromie", 24877},
|
||||||
|
{"Arthas", 24949},
|
||||||
|
{"Lich King", 22234},
|
||||||
|
{"Saurfang", 14732},
|
||||||
|
{"Onyxia", 8570},
|
||||||
|
{"Nefarian", 9472},
|
||||||
|
{"Dark Ranger", 30073},
|
||||||
|
{"Millhouse", 19942},
|
||||||
|
{"Alleria - Dinkle Server Only", 70019}, -- remove me if not using my server
|
||||||
|
{"Turalyon - Dinkle Server Only", 400018}, -- remove me if not using my server
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
local function OnGossipHello(event, player, item)
|
local function OnGossipHello(event, player, item)
|
||||||
@@ -79,7 +111,7 @@ local function OnGossipSelect(event, player, item, sender, intid, code)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if (intid == 0) then
|
if intid == 0 then
|
||||||
-- Show teleport menu
|
-- Show teleport menu
|
||||||
for i, v in ipairs(T[sender]) do
|
for i, v in ipairs(T[sender]) do
|
||||||
if (i > 2) then
|
if (i > 2) then
|
||||||
@@ -89,6 +121,19 @@ local function OnGossipSelect(event, player, item, sender, intid, code)
|
|||||||
player:GossipMenuAddItem(0, "Back", 0, 0)
|
player:GossipMenuAddItem(0, "Back", 0, 0)
|
||||||
player:GossipSendMenu(1, item)
|
player:GossipSendMenu(1, item)
|
||||||
return
|
return
|
||||||
|
elseif sender == 7 then
|
||||||
|
-- Morph the player
|
||||||
|
local morphName, morphID = table.unpack(T[sender][intid])
|
||||||
|
if morphID == 0 then
|
||||||
|
-- Demorph
|
||||||
|
player:SetDisplayId(player:GetNativeDisplayId())
|
||||||
|
else
|
||||||
|
-- Morph
|
||||||
|
player:SetDisplayId(morphID)
|
||||||
|
player:CastSpell(player, 51908, true) -- Cast the morph spell
|
||||||
|
end
|
||||||
|
player:GossipComplete()
|
||||||
|
return
|
||||||
else
|
else
|
||||||
-- teleport
|
-- teleport
|
||||||
local name, map, x, y, z, o = table.unpack(T[sender][intid])
|
local name, map, x, y, z, o = table.unpack(T[sender][intid])
|
||||||
@@ -98,5 +143,6 @@ local function OnGossipSelect(event, player, item, sender, intid, code)
|
|||||||
player:GossipComplete()
|
player:GossipComplete()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
RegisterItemGossipEvent(ItemEntry, 1, OnGossipHello)
|
RegisterItemGossipEvent(ItemEntry, 1, OnGossipHello)
|
||||||
RegisterItemGossipEvent(ItemEntry, 2, OnGossipSelect)
|
RegisterItemGossipEvent(ItemEntry, 2, OnGossipSelect)
|
||||||
@@ -1,51 +1,91 @@
|
|||||||
function OnGossipHello(event, player, item)
|
function OnGossipHello(event, player, item)
|
||||||
if player:GetLevel() < 15 then
|
player:GossipMenuAddItem(0, "|TInterface\\icons\\achievement_boss_lichking:37:37:-23|t|cff007d45Manage Scourge Events|r", 150, 0)
|
||||||
player:SendBroadcastMessage("You need to be level 15 or higher to use this item.")
|
player:GossipMenuAddItem(0, "|TInterface\\icons\\inv_misc_book_11:37:37:-23|t|cff007d45General Information|r", 200, 0)
|
||||||
return
|
player:GossipSendMenu(1, item)
|
||||||
end
|
|
||||||
player:GossipMenuAddItem(0, "|TInterface\\icons\\achievement_boss_lichking:37:37:-23|t|cff007d45Scourge Event|r", 150, 0)
|
|
||||||
player:GossipSendMenu(1, item)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local function OnGossipSelect(event, player, item, sender, intid, code)
|
local function OnGossipSelect(event, player, item, sender, intid, code)
|
||||||
if (sender == 150) then
|
player:GossipClearMenu()
|
||||||
-- Show Scourge Event menu
|
|
||||||
player:GossipMenuAddItem(0, "|TInterface\\icons\\spell_misc_emotionhappy:37:37:-23|t|cff007d45Start Event for Bonus Lich Runes|r", 100, 0)
|
|
||||||
player:GossipMenuAddItem(0, "|TInterface\\icons\\spell_misc_emotionsad:37:37:-23|t|cffC41F3BStop Event but Suffer|r", 101, 0)
|
|
||||||
player:GossipMenuAddItem(0, "Back", 0, 0)
|
|
||||||
player:GossipSendMenu(1, item)
|
|
||||||
return
|
|
||||||
elseif (sender == 100) then
|
|
||||||
-- Start the event
|
|
||||||
if IsGameEventActive(17) then
|
|
||||||
player:SendBroadcastMessage("The Scourge event is already active.")
|
|
||||||
else
|
|
||||||
player:AddItem(43949, 2)
|
|
||||||
StartGameEvent(17, true)
|
|
||||||
player:PlayDirectSound(14797)
|
|
||||||
end
|
|
||||||
player:GossipComplete()
|
|
||||||
elseif (sender == 101) then
|
|
||||||
-- Stop the event
|
|
||||||
if not IsGameEventActive(17) then
|
|
||||||
player:SendBroadcastMessage("The Scourge event is not currently active.")
|
|
||||||
else
|
|
||||||
StopGameEvent(17, true)
|
|
||||||
player:CastSpell(player, 15007, true)
|
|
||||||
player:RemoveItem(43949, 2)
|
|
||||||
player:SetLevel(player:GetLevel())
|
|
||||||
player:SendBroadcastMessage("2 Lich Runes have been removed, you've been given Resurrection Sickness and have lost your current level's experience progress. So sad :(")
|
|
||||||
player:PlayDirectSound(14776)
|
|
||||||
end
|
|
||||||
player:GossipComplete()
|
|
||||||
elseif (sender == 0) then
|
|
||||||
-- return to main menu
|
|
||||||
OnGossipHello(event, player, item)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
player:GossipComplete()
|
if (sender == 150) then
|
||||||
|
-- Show Scourge Event menu
|
||||||
|
player:GossipMenuAddItem(0, "|TInterface\\icons\\spell_misc_emotionhappy:37:37:-23|t|cff007d45Start Event for Bonus Lich Runes|r", 1, 100)
|
||||||
|
player:GossipMenuAddItem(0, "|TInterface\\icons\\spell_misc_emotionsad:37:37:-23|t|cffC41F3BStop Event but Suffer|r", 1, 101)
|
||||||
|
player:GossipMenuAddItem(0, "Back", 0, 0)
|
||||||
|
player:GossipSendMenu(1, item)
|
||||||
|
elseif (sender == 200) then
|
||||||
|
-- Show Information menu
|
||||||
|
player:GossipMenuAddItem(0, "1. Tell me more about Scourge Invasions", 2, 201)
|
||||||
|
player:GossipMenuAddItem(0, "2. How can I participate in Scourge Invasions?", 2, 202)
|
||||||
|
player:GossipMenuAddItem(0, "3. What are the rewards for Scourge Invasions?", 2, 203)
|
||||||
|
player:GossipMenuAddItem(0, "4. How often do you plan on updating?", 2, 204)
|
||||||
|
player:GossipMenuAddItem(0, "5. I found something that's broken. What do I do?", 2, 205)
|
||||||
|
player:GossipMenuAddItem(0, "6. It looks like Khyle is coming out with a new HD pack, do you plan on making your repack compatible with it again?", 2, 206)
|
||||||
|
player:GossipMenuAddItem(0, "7. How do I access flying for free?", 2, 207)
|
||||||
|
player:GossipMenuAddItem(0, "8. What content will your next big update contain?", 2, 208)
|
||||||
|
player:GossipMenuAddItem(0, "9. I'm seeing a lot of red messages in the World Server Window, do I need to worry?", 2, 209)
|
||||||
|
player:GossipMenuAddItem(0, "10. Will NPC Bots ever get functionality in BGs? And why aren't there any wandering bots in Outland or Northrend?", 2, 210)
|
||||||
|
player:GossipMenuAddItem(0, "11. Do I have to worry about my class getting nerfed or significantly altered?", 2, 210)
|
||||||
|
player:GossipMenuAddItem(0, "12. Is there anything I can help with?", 2, 212)
|
||||||
|
player:GossipMenuAddItem(0, "Back", 0, 0)
|
||||||
|
player:GossipSendMenu(1, item)
|
||||||
|
elseif (sender == 1 and (intid == 100 or intid == 101)) then
|
||||||
|
-- Start or Stop the event based on intid
|
||||||
|
if intid == 100 then
|
||||||
|
-- Start the event
|
||||||
|
if IsGameEventActive(17) then
|
||||||
|
player:GossipMenuAddItem(0, "The Scourge event is already active.", 100, 0)
|
||||||
|
player:GossipMenuAddItem(0, "Back", 150, 0)
|
||||||
|
player:GossipSendMenu(1, item)
|
||||||
|
else
|
||||||
|
player:AddItem(43949, 2)
|
||||||
|
StartGameEvent(17, true)
|
||||||
|
player:PlayDirectSound(14797)
|
||||||
|
player:GossipComplete()
|
||||||
|
end
|
||||||
|
elseif intid == 101 then
|
||||||
|
-- Stop the event
|
||||||
|
if not IsGameEventActive(17) then
|
||||||
|
player:GossipMenuAddItem(0, "The Scourge event is not currently active.", 101, 0)
|
||||||
|
player:GossipMenuAddItem(0, "Back", 150, 0)
|
||||||
|
player:GossipSendMenu(1, item)
|
||||||
|
else
|
||||||
|
StopGameEvent(17, true)
|
||||||
|
player:CastSpell(player, 15007, true)
|
||||||
|
player:RemoveItem(43949, 2)
|
||||||
|
player:SetLevel(player:GetLevel())
|
||||||
|
player:SendBroadcastMessage("2 Lich Runes have been removed, you've been given Resurrection Sickness and have lost your current level's experience progress. So sad :(")
|
||||||
|
player:PlayDirectSound(14776)
|
||||||
|
player:GossipComplete()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif (sender == 2 and intid >= 201 and intid <= 212) then
|
||||||
|
local responseText = {
|
||||||
|
[201] = "Scourge invasions are a thematic element to this server as the goal is to create a more cohesive tie between the original three expansions. Obviously this only one aspect of creating that tie. \n\nOriginal elements from vanilla scourge invasions are being restored and some are already available, primarily for lower levels, but new additions and rewards have been made to make the invasion more threatening and meaningful. As time goes on, more events will be added and more of the original content will be restored and modified. \n\nAt present, the conceptualization of Scourge Events is in its early infancy. During the event, excepting in Outland and players below level 15, players will also be attacked randomly by various undead. These events occur every 7 hours and last 2 hours. \n\nScourge Dungeon bosses have been restored for these events, and you'll even find a few new raid bosses as well (one for right now, more later). The latter will not require the scourge invasion to be active to kill, and any additional non-blizz bosses will also not need the Scourge Event to be active.",
|
||||||
|
[202] = "At present, Scourge Invasions have been created for Orgrimmar, Stormwind, Westfall, Lakeshire and Crossroads. The largest events are those in capital cities, where you can pick up unique buffs for the duration of the event. Each area has unique challenges, quests, and rewards. If you have ideas for ways to improve Scourge Events or features you'd like to see added, message Dinkledork on Discord. He always needs more creative ideas.",
|
||||||
|
[203] = "Rewards can be found from primary quest givers in both major capital cities, Stormwind and Orgrimmar, namely Archbishop Benedictus in the Cathedral of Light, and Grand Apothecary Putress near Thrall's room. They will offer you both familiar and unique rewards in exchange for a currency tied to the event, Lich Runes.",
|
||||||
|
[204] = "I plan on releasing new content no less than once a month. I may be faster but at present am only a one-man development team. If anyone with some art skills would like to help, I'd love to speak with you as I'm primarily just decent at coding. Again you can message Dinkledork on Discord.",
|
||||||
|
[205] = "The benefit of being a lua junkie is that I don't have to recompile and redistribute everything again. This means I can address issues typically pretty quickly and with as little interruption as possible on the fly. \n\nIf you found an error or issue with gameplay, you can post in the repack-talk section of my discord. Same if you're experiencing any issues with your client. I'm always more than happy to help and odds are if you're experiencing an issue, others are as well, so I'd like to keep all issues tracked in that particular Discord channel. \n\nIf you happen to be experiencing visual or sound bugs and are using Khyle's V6 HD pack, please delete Patch-K.",
|
||||||
|
[206] = "Yes! I love Khyle's work and will do everything possible to make my server compatible with it. \n\nThat said, I have had issues with one of his patches in the past, Patch-K, where it emits a strange noise on certain objects. If you are using V6 of his HD pack currently and are experiencing crashes or strange sounds, you need to remove that from your Client's Data folder. I've done my best to reimplement HD textures without it. \n\nSometimes fixing issues related to Khyle's hd pack is extremely challenging as the content on said patches is not open to the public. But of course I will always do my best.",
|
||||||
|
[207] = "I've left instructions on how to do so under the help section of Discord. I even added pretty pictures :)",
|
||||||
|
[208] = "1. I'm hoping to have updates for BWL in place, such as new bosses, modified existing bosses, and new rewards. \n\n2. I plan on adding rewards for reaching level 60 in Hardcore Mode. \n\n3. New Class spells and power-ups. \n\n4. A route to additional winged flight Ranks implemented. \n\n5. New Race-Class Combos, such as Blood Elf Warriors. \n\n6.Hillsbrad Scourge event as well as some outdoor Horde vs. Alliance content. \n\n7.At least getting started on Bizmo's Brawler's Guild and the Emerald Dream.\n\n8. Additional Scourge-Themed dungeon bosses. \n\n9. More unique mounts and items. \n\n10. Updating Professions to be more vanilla/tbc like. \n\n11. Giving hybrid classes more options for tier sets in Tiers 1-3. \n\n12. Taking a look at old tier sets and readjusting the set bonuses to be closer in line with what they were originally. (Sorry Paladins, you won't be able to spam Lay on Hands). \n\n13. Hoping to get started with filling out Stormwind's empty new areas with npcs. \n\n14. Additional Scourge Event rewars. \n\nPlease keep in mind that I do have a day job, am married, and a 9-month old child so I may not reach everything on that list by the next update, but you can bet I'll make it to everything on that list eventually.",
|
||||||
|
[209] = "Nah. That's pretty much an info log and it's mostly for wandering NPC Bot actions. If you've played the Cmangos SPP servers, you'll know this to be the case. \n\nYou'll also notice the server yelling at you for other things on occasion, but again these aren't things that will hinder the game in any way. The only things you need to worry about are 'Assertion Failed' messages. If you can, screenshot those and send them to me.",
|
||||||
|
[210] = "I don't know man, I don't develop the bots in any way shape or form. Trickerer is the one who does that, and he's probably gotten those questions a number of times. I would say yes, eventually? \n\nThere has been some indication that wandering bots may not make it to Outland or Northrend but we'll see. Setting up waypoints for that crap is extremely time intensive. I'd be happy if we just get BG functionality soon. Either way, Trickerer has done an amazing job with the system and I'm very grateful for it.",
|
||||||
|
[211] = "Not really no. If I feel like a change I made is breaking the game, then yes I'll have to take a look at it. But generally speaking I'll just make things more difficult if gameplay gets too easy due to class additions. \n\nWhile this is a singleplayer server and balance may be less of a concern, I'd rather the game be fun and enjoyable than just a complete faceroll. I'm a big fan of limitations. I believe the limitations in systems are what make those systems great. These limitations create heroic moments for the player, something that has been lost since the Classic era. \n\nThat said, I try to make all my crap configurable so you can play the way you want. I favor players playing the way they want so long as it doesn't adversely affect others in the community, and if I can make a config option out of it as a result, I will. Good examples of this are the unlimited ammo scripts and DK shield/dual wielding 2H weapons scripts, or the flying for free scripts. \n\nAs far as 'significantly altered' goes, I like to keep class gameplay the same overall rather than entirely reinventing the wheel. That said, if I can come up with a new viable spec, like Smite Priests, then I will so long as it doesn't kill another type of viable spec.",
|
||||||
|
[212] = "More than anything, I like good ideas. If you have a good idea and want to see that implemented, please let me know. My best implementations come from you guys 100%. \n\nIf you have any good lua scripts, I'd also love those too. I like lua over C++ simply for ease of portability and on the fly changes, as well as easily being able to turn things on and off. \n\nI guess one last thing I'll mention is that I will be starting a Patreon soon. If you have ideas for perks or would like to support me, I would love to give you something back in return. I do have a family to support so any support is awesome and greatly appreciated. I'll keep you posted on that one.",
|
||||||
|
}
|
||||||
|
player:GossipMenuAddItem(0, responseText[intid], intid, 0)
|
||||||
|
player:GossipMenuAddItem(0, "Back", 200, 0)
|
||||||
|
player:GossipSendMenu(1, item)
|
||||||
|
elseif (intid == 0) then
|
||||||
|
-- return to main menu
|
||||||
|
OnGossipHello(event, player, item)
|
||||||
|
else
|
||||||
|
player:GossipComplete()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
RegisterItemGossipEvent(65001, 1, OnGossipHello)
|
RegisterItemGossipEvent(65001, 1, OnGossipHello)
|
||||||
RegisterItemGossipEvent(65001, 2, OnGossipSelect)
|
RegisterItemGossipEvent(65001, 2, OnGossipSelect)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
35
MiscTools/GhoulDust.lua
Normal file
35
MiscTools/GhoulDust.lua
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
local ITEM_ID = 60090 -- The item ID to check for
|
||||||
|
local SPELL_ID = 46619 -- The spell ID to cast
|
||||||
|
local CAST_CHANCE = 30 -- The chance percentage to cast the spell
|
||||||
|
local DELAY = 1000 -- Delay in milliseconds (1000 ms = 1 second)
|
||||||
|
|
||||||
|
local function HasEquippedItem(player, itemID)
|
||||||
|
for slot = 1, 18 do
|
||||||
|
local item = player:GetEquippedItemBySlot(slot)
|
||||||
|
if item and item:GetEntry() == itemID then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local function CastDelayedSpell(playerGUID)
|
||||||
|
local player = GetPlayerByGUID(playerGUID)
|
||||||
|
if player then
|
||||||
|
player:CastSpell(player, SPELL_ID, true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function OnPlayerDeath(event, killer, killed)
|
||||||
|
-- Check if the killed player has the item equipped
|
||||||
|
if HasEquippedItem(killed, ITEM_ID) then
|
||||||
|
-- Roll for the chance to cast the spell
|
||||||
|
if math.random(1, 100) <= CAST_CHANCE then
|
||||||
|
local killedGUID = killed:GetGUID()
|
||||||
|
-- Schedule the delayed spell cast
|
||||||
|
CreateLuaEvent(function() CastDelayedSpell(killedGUID) end, DELAY, 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
RegisterPlayerEvent(8, OnPlayerDeath) -- Register the event handler for player death
|
||||||
72
MiscTools/IndividualProgression.lua
Normal file
72
MiscTools/IndividualProgression.lua
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
-- by Dinkledork
|
||||||
|
-- .npc add 50000 somewhere in game
|
||||||
|
|
||||||
|
local npcId = 50000
|
||||||
|
local mainMenu = "|TInterface\\icons\\inv_helmet_74:40|t |cff00008bSet Individual Progression |r"
|
||||||
|
local options = {
|
||||||
|
"|TInterface\\icons\\achievement_boss_ragnaros:40|t |cff8b0000Tier 1 - Molten Core (Level 60)|r",
|
||||||
|
"|TInterface\\icons\\achievement_boss_onyxia:40|t |cff8b0000Tier 2 - Onyxia (Level 60)|r",
|
||||||
|
"|TInterface\\icons\\achievement_boss_nefarion:40|t |cff8b0000Tier 3 - Blackwing Lair (Level 60)|r",
|
||||||
|
"|TInterface\\icons\\achievement_zone_silithus_01:40|t |cff8b0000Tier 4 - Pre-AQ (Level 60)|r",
|
||||||
|
"|TInterface\\icons\\achievement_boss_cthun:40|t |cff8b0000Tier 5 - Anh'qiraj (Level 60)|r",
|
||||||
|
"|TInterface\\icons\\achievement_boss_kelthuzad_01:40|t |cff8b0000Tier 6 - Naxxramas (Level 60)|r",
|
||||||
|
"|TInterface\\icons\\achievement_boss_princemalchezaar_02:40|t |cff006400Tier 7 - Karazhan, Gruul's Lair, Magtheridon's Lair (Level 70)|r",
|
||||||
|
"|TInterface\\icons\\achievement_character_bloodelf_male:40|t |cff006400Tier 8 - Serpentshrine Cavern, Tempest Keep (Level 70)|r",
|
||||||
|
"|TInterface\\icons\\achievement_boss_illidan:40|t |cff006400Tier 9 - Hyjal Summit and Black Temple (Level 70)|r",
|
||||||
|
"|TInterface\\icons\\achievement_boss_zuljin:40|t |cff006400Tier 10 - Zul'Aman (Level 70)|r",
|
||||||
|
"|TInterface\\icons\\achievement_boss_kiljaedan:40|t |cff006400Tier 11 - Sunwell Plateau (Level 70)|r",
|
||||||
|
"|TInterface\\icons\\achievement_boss_kelthuzad_01:40|t |cff00008bTier 12 - Naxxramas WotLK, Eye of Eternity, Obsidian Sanctum (Level 80)|r",
|
||||||
|
"|TInterface\\icons\\achievement_boss_algalon_01:40|t |cff00008bTier 13 - Ulduar (Level 80)|r",
|
||||||
|
"|TInterface\\icons\\achievement_reputation_argentcrusader:40|t |cff00008bTier 14 - Trial of the Crusader|r",
|
||||||
|
"|TInterface\\icons\\achievement_boss_lichking:40|t |cff00008bTier 15 - Icecrown Citadel (Level 80)|r",
|
||||||
|
"|TInterface\\icons\\spell_shadow_twilight:40|t |cff00008bTier 16 - Ruby Sanctum (Level 80)"
|
||||||
|
}
|
||||||
|
|
||||||
|
function OnGossipHello(event, player, object)
|
||||||
|
player:GossipMenuAddItem(0, mainMenu, 0, 1)
|
||||||
|
player:GossipSendMenu(1, object)
|
||||||
|
object:SetEquipmentSlots(32262, 33755, 0)
|
||||||
|
object:SendUnitSay("Speaking with me will allow you to artificially set what stage of the game you'd like to be in, thereby bypassing any normal progression.", 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
local PlayerTierKey = 1000
|
||||||
|
|
||||||
|
function OnGossipSelect(event, player, object, sender, intid, code)
|
||||||
|
if intid == 1 then
|
||||||
|
for i, option in ipairs(options) do
|
||||||
|
player:GossipMenuAddItem(0, option, 0, i + 1)
|
||||||
|
end
|
||||||
|
player:GossipMenuAddItem(0, "|TInterface\\icons\\achievement_guildperk_massresurrection:40|t Back", 0, 100)
|
||||||
|
player:GossipSendMenu(1, object)
|
||||||
|
elseif intid == 100 then
|
||||||
|
player:GossipMenuAddItem(0, mainMenu, 0, 1)
|
||||||
|
player:GossipSendMenu(1, object)
|
||||||
|
else
|
||||||
|
local tier = intid - 2
|
||||||
|
if tier >= 0 then
|
||||||
|
player:SetUInt32Value(PlayerTierKey, tier)
|
||||||
|
player:GossipComplete()
|
||||||
|
player:SendBroadcastMessage("Your individual progression will be set to " .. options[intid - 1] .. " upon logout.")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
RegisterCreatureGossipEvent(npcId, 1, OnGossipHello)
|
||||||
|
RegisterCreatureGossipEvent(npcId, 2, OnGossipSelect)
|
||||||
|
|
||||||
|
function OnPlayerLogout(event, player)
|
||||||
|
local tier = player:GetUInt32Value(PlayerTierKey)
|
||||||
|
if tier >= 0 then
|
||||||
|
local guid = player:GetGUIDLow()
|
||||||
|
CharDBExecute("UPDATE character_settings SET data = " .. tier .. " WHERE guid = " .. guid)
|
||||||
|
player:SetUInt32Value(PlayerTierKey, 0) -- Reset the value to 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
RegisterPlayerEvent(4, OnPlayerLogout)
|
||||||
|
|
||||||
|
function OnCreatureSpawn(event, creature)
|
||||||
|
creature:SetEquipmentSlots(32262, 33755, 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
RegisterCreatureEvent(npcId, 5, OnCreatureSpawn)
|
||||||
Reference in New Issue
Block a user