From fa7f44889ce689d64ba177408abf205e3063ff3a Mon Sep 17 00:00:00 2001 From: Dinkledork <118951051+Day36512@users.noreply.github.com> Date: Sun, 19 Mar 2023 04:55:39 -0600 Subject: [PATCH] Add files via upload --- CrossroadsVillagerQuestV2.lua | 188 +++++++++++++++++++++++++++ DespawnRespawnScourgeQuestGivers.lua | 43 +++++- 2 files changed, 230 insertions(+), 1 deletion(-) create mode 100644 CrossroadsVillagerQuestV2.lua diff --git a/CrossroadsVillagerQuestV2.lua b/CrossroadsVillagerQuestV2.lua new file mode 100644 index 0000000..96f0018 --- /dev/null +++ b/CrossroadsVillagerQuestV2.lua @@ -0,0 +1,188 @@ +local NPC_IDS = {400104} +local ITEM_ID = 60124 + +local mainHandItems = {6905, 10756, 11087} + +local destinations = { + {x = -482, y = -2710, z = 94.303, o = 4.2}, + {x = -353, y = -2681, z = 95.88, o = 0.0929}, + {x = -579, y = -2650, z = 95.633, o = 3.12}, + {x = -348, y = -2507, z = 95.563, o = 1.49}, +} + +local messages = { + "For the Horde!", + "No mercy for our enemies!", + "Let's show these Scourge dogs what it means to mess with the Horde!", +} + + +local function OnGossipHello(event, player, creature) + if player:HasItem(ITEM_ID) then + player:GossipClearMenu() + player:GossipMenuAddItem(8, "|TInterface\\icons\\inv_sword_39:40:40:-35|t|cff610B0BGive Weapon|r", 1, 0) + player:GossipMenuAddItem(9, "2-Handed Axe", 1, 1001) + player:GossipMenuAddItem(9, "2-Handed Mace", 1, 1002) + player:GossipMenuAddItem(9, "2-Handed Sword", 1, 1003) + + if creature:GetData("equipmentSet") then + player:GossipMenuAddItem(8, "|TInterface\\icons\\ability_hunter_markedfordeath:40:40:-35|t|cffC41F3BSend to Location|r", 2, 0) + player:GossipMenuAddItem(0, "Reinforce the East Entrance!", 2, 2001) + player:GossipMenuAddItem(0, "Reinforce the North Entrance!", 2, 2002) + player:GossipMenuAddItem(0, "Reinforce the South Entrance!", 2, 2003) + player:GossipMenuAddItem(0, "Reinforce the West Entrance!", 2, 2004) + player:GossipMenuAddItem(2, "|t|cff0101DFFollow me into battle!|r", 2, 2005) + end + + player:GossipSendMenu(1, creature) + else + player:SendBroadcastMessage("You need Horde Armaments!") + end +end + +--Define your abilities here +local function CastCleave(eventId, delay, calls, creature) + if creature:IsInCombat() then + creature:CastSpell(creature:GetVictim(), 845, true) + end +end + +local function CastHeroicStrike(eventId, delay, calls, creature) + if creature:IsInCombat() then + creature:CastSpell(creature:GetVictim(), 78, true) + end +end + +local function CastThunderClap(eventId, delay, calls, creature) + if creature:IsInCombat() then + creature:CastSpell(creature:GetVictim(), 8078, true) + end +end + +local function CastEnrage(eventId, delay, calls, creature) + if creature:IsInCombat() then + creature:CastSpell(creature:GetVictim(), 3547, true) + end +end + +local function CastRend(eventId, delay, calls, creature) + if creature:IsInCombat() then + creature:CastSpell(creature:GetVictim(), 8548, true) + end +end + +local function CastCharge(eventId, delay, calls, creature) + if creature:IsInCombat() then + creature:CastSpell(creature:GetVictim(), 24193, true) + end +end + + +local function RegisterAbilities(creature, weaponType) + if creature:GetData("abilitiesRegistered") then + return + end + creature:SetData("abilitiesRegistered", true) + + if weaponType == 1 then -- 2-Handed Axe Abilities + creature:RegisterEvent(CastCleave, math.random(8000, 12000), 0) + creature:RegisterEvent(CastHeroicStrike, math.random(5000, 9000), 0) + elseif weaponType == 2 then -- 2-Handed Mace Abilities + creature:RegisterEvent(CastThunderClap, math.random(9000, 14000), 0) + creature:RegisterEvent(CastEnrage, math.random(15000, 19000), 0) + elseif weaponType == 3 then -- 2-Handed Sword Abilities + creature:RegisterEvent(CastRend, math.random(11000, 15000), 0) + creature:RegisterEvent(CastCharge, 100, 1) + end +end + +local function CheckIfReachedDestination(eventId, delay, calls, creature) + local x, y, z = creature:GetHomePosition() + local currentPositionX, currentPositionY, currentPositionZ = creature:GetPosition() + if math.floor(currentPositionX) == math.floor(x) and math.floor(currentPositionY) == math.floor(y) and math.floor(currentPositionZ) == math.floor(z) then + creature:SetData("hasReachedDestination", true) + creature:EmoteState(375) + creature:RemoveEventById(eventId) + end +end + +local function OnEnterCombat(event, creature, target) + local weaponType = creature:GetData("weaponType") + if weaponType and not creature:GetData("abilitiesRegistered") then + RegisterAbilities(creature, weaponType) + end +end + + +local function OnLeaveCombat(event, creature) + creature:RemoveEvents() + -- creature:EmoteState(375) + creature:SetData("abilitiesRegistered", false) +end + + +local function DespawnCreature(eventId, delay, calls, creature) + creature:DespawnOrUnsummon() +end + +local function OnGossipSelect(event, player, creature, sender, intid, code) + if intid == 0 then + OnGossipHello(event, player, creature) + elseif intid >= 1001 and intid <= 1003 then + local index = intid - 1000 + local selectedMainHand = mainHandItems[index] + creature:SetEquipmentSlots(selectedMainHand, 0, 0) + creature:SetData("weaponType", index) + creature:SetData("equipmentSet", true) + creature:PerformEmote(66) + RegisterAbilities(creature, index) -- Add this line to register abilities + OnGossipHello(event, player, creature) + end + + if intid >= 2001 and intid <= 2004 then + local index = intid - 2000 + local destination = destinations[index] + local finalX = destination.x + math.random(-10, 10) + local finalY = destination.y + math.random(-10, 10) + local finalZ = destination.z + local finalO = destination.o + creature:MoveTo(0, finalX, finalY, finalZ, true) + local battlecryIndex = math.random(1, #messages) + creature:SendUnitYell(messages[battlecryIndex], 0) + creature:EmoteState(375) + creature:SetHomePosition(finalX, finalY, finalZ, finalO) + creature:SetNPCFlags(0) + player:RemoveItem(ITEM_ID, 1) + player:KilledMonsterCredit(creature:GetEntry()) + player:GossipComplete() + creature:RegisterEvent(DespawnCreature, 180000) + creature:SetData("hasReachedDestination", false) + creature:RegisterEvent(CheckIfReachedDestination, 1000, 0) +end + + if intid == 2005 then + local randomAngle = math.random() * 2 * math.pi + creature:MoveFollow(player, 5, randomAngle) + local battlecryIndex = math.random(1, #messages) + creature:SendUnitYell(messages[battlecryIndex], 0) + player:KilledMonsterCredit(400104) + creature:SetNPCFlags(0) + player:RemoveItem(ITEM_ID, 1) + player:GossipComplete() + creature:RegisterEvent(DespawnCreature, 180000) + end +end + +local function OnCreatureDied(event, creature, killer) + creature:SetEquipmentSlots(0, 0, 0) + creature:SetData("equipmentSet", false) + creature:RemoveEvents() +end + +for _, npcId in ipairs(NPC_IDS) do + RegisterCreatureGossipEvent(npcId, 1, OnGossipHello) + RegisterCreatureGossipEvent(npcId, 2, OnGossipSelect) + RegisterCreatureEvent(npcId, 1, OnEnterCombat) + RegisterCreatureEvent(npcId, 2, OnLeaveCombat) + RegisterCreatureEvent(npcId, 4, OnCreatureDied) +end diff --git a/DespawnRespawnScourgeQuestGivers.lua b/DespawnRespawnScourgeQuestGivers.lua index 9cdca8d..93a233e 100644 --- a/DespawnRespawnScourgeQuestGivers.lua +++ b/DespawnRespawnScourgeQuestGivers.lua @@ -1,13 +1,54 @@ local GAME_EVENT_ID = 17 -- Set the game event ID -local npcIds = {344, 12480, 1284, 400064, 234} -- Add your NPC entries here +local npcIds = {344, 12480, 1284, 400064, 234, 3429} -- Add your NPC entries here +local BROADCAST_MESSAGE = "The Scourge are attacking the people of Azeroth. Quickly adventurers, prepare yourselves!" +local SOUND_ID = 13363 +local excludedZones = {44} -- Replace these with the zone IDs where you don't want the sound to play + +local YELL_MESSAGES = { + "The Scourge have come!", + "Beware, the Scourge approaches!", + "Defend our home, the Scourge is upon us!", + "To arms, the Scourge is here!", + "All fighters ready the assault against the Scourge.", + "The Scourge invasion has begun!", + "The Lich Kings minions have come! Rally against the Scourge!", + "The Scourge dares to attack us!", + "Show the Scourge the might of the people of Azeroth!" +} + +local function YellRandomMessage(npc) + local messageIndex = math.random(1, #YELL_MESSAGES) + npc:SendUnitYell(YELL_MESSAGES[messageIndex], 0) +end + +local function valueExists(tbl, value) + for _, v in ipairs(tbl) do + if v == value then + return true + end + end + return false +end local function DespawnAndRespawnNpcs(event, gameEventId) if gameEventId == GAME_EVENT_ID then local players = GetPlayersInWorld() -- Get all players in the world + if event == 34 then -- Game Event Start + SendWorldMessage(BROADCAST_MESSAGE, 2) -- Broadcast the message with chat type 2 (SYSTEM) + for _, player in ipairs(players) do + local playerZoneId = player:GetZoneId() + if not valueExists(excludedZones, playerZoneId) then + player:PlayDirectSound(SOUND_ID) -- Play the sound for each player + end + end + end for _, player in ipairs(players) do for _, npcId in ipairs(npcIds) do local npcs = player:GetCreaturesInRange(1000, npcId) -- Get creatures within a radius of 1000 units from the player for _, npc in ipairs(npcs) do + if event == 34 then -- Game Event Start + YellRandomMessage(npc) + end npc:DespawnOrUnsummon() npc:Respawn() end