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:
188
CrossroadsVillagerQuestV2.lua
Normal file
188
CrossroadsVillagerQuestV2.lua
Normal file
@@ -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
|
||||||
@@ -1,13 +1,54 @@
|
|||||||
local GAME_EVENT_ID = 17 -- Set the game event ID
|
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)
|
local function DespawnAndRespawnNpcs(event, gameEventId)
|
||||||
if gameEventId == GAME_EVENT_ID then
|
if gameEventId == GAME_EVENT_ID then
|
||||||
local players = GetPlayersInWorld() -- Get all players in the world
|
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 _, player in ipairs(players) do
|
||||||
for _, npcId in ipairs(npcIds) do
|
for _, npcId in ipairs(npcIds) do
|
||||||
local npcs = player:GetCreaturesInRange(1000, npcId) -- Get creatures within a radius of 1000 units from the player
|
local npcs = player:GetCreaturesInRange(1000, npcId) -- Get creatures within a radius of 1000 units from the player
|
||||||
for _, npc in ipairs(npcs) do
|
for _, npc in ipairs(npcs) do
|
||||||
|
if event == 34 then -- Game Event Start
|
||||||
|
YellRandomMessage(npc)
|
||||||
|
end
|
||||||
npc:DespawnOrUnsummon()
|
npc:DespawnOrUnsummon()
|
||||||
npc:Respawn()
|
npc:Respawn()
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user