1512 lines
60 KiB
Lua
1512 lines
60 KiB
Lua
--[[ Generated with https://github.com/TypeScriptToLua/TypeScriptToLua ]]
|
|
local ____exports = {}
|
|
local ____modifier_pet_buff_npc_squirrel_event = require("abilities.modifiers.pets.modifier_pet_buff_npc_squirrel_event")
|
|
local modifier_pet_buff_npc_squirrel_event = ____modifier_pet_buff_npc_squirrel_event.modifier_pet_buff_npc_squirrel_event
|
|
local ____modifier_pet_buff_npc_pig_event = require("abilities.modifiers.pets.modifier_pet_buff_npc_pig_event")
|
|
local modifier_pet_buff_npc_pig_event = ____modifier_pet_buff_npc_pig_event.modifier_pet_buff_npc_pig_event
|
|
local ____modifier_pet_buff_npc_wolf_event = require("abilities.modifiers.pets.modifier_pet_buff_npc_wolf_event")
|
|
local modifier_pet_buff_npc_wolf_event = ____modifier_pet_buff_npc_wolf_event.modifier_pet_buff_npc_wolf_event
|
|
local ____clean_harbor_flag_markers = require("quests.clean_harbor_flag_markers")
|
|
local hideCleanHarborFlagPlacementMarkers = ____clean_harbor_flag_markers.hideCleanHarborFlagPlacementMarkers
|
|
local showCleanHarborFlagPlacementMarkers = ____clean_harbor_flag_markers.showCleanHarborFlagPlacementMarkers
|
|
local ____QuestSystem = require("quests.QuestSystem")
|
|
local QuestSystem = ____QuestSystem.QuestSystem
|
|
local ____QuestSystem = require("quests.QuestSystem")
|
|
local QuestState = ____QuestSystem.QuestState
|
|
local ____recipes = require("cooking.recipes")
|
|
local openRecipe = ____recipes.openRecipe
|
|
local ____entity_radius = require("utils.entity_radius")
|
|
local findNearestByClassname = ____entity_radius.findNearestByClassname
|
|
--- Общая утилита для квестов «принеси X предметов»
|
|
local function handleQuestItemTurnIn(self, hero, options)
|
|
local questSystem = QuestSystem:getInstance()
|
|
local shouldRemoveFromHero = options.removeFromHero ~= false
|
|
do
|
|
local slot = 0
|
|
while slot < 9 do
|
|
do
|
|
local item = hero:GetItemInSlot(slot)
|
|
if not item or item:IsNull() or item:GetAbilityName() ~= options.itemName then
|
|
goto __continue3
|
|
end
|
|
if options.useCharges then
|
|
local itemcount = item:GetCurrentCharges()
|
|
if itemcount < options.requiredCount then
|
|
questSystem:setQuestProgress(options.questId, options.objectiveKey, itemcount)
|
|
else
|
|
questSystem:setQuestProgress(options.questId, options.objectiveKey, options.requiredCount)
|
|
if shouldRemoveFromHero then
|
|
if itemcount > options.requiredCount then
|
|
item:SetCurrentCharges(itemcount - options.requiredCount)
|
|
else
|
|
item:RemoveSelf()
|
|
end
|
|
end
|
|
if options.timerHandle then
|
|
Timers:RemoveTimer(options.timerHandle)
|
|
end
|
|
end
|
|
else
|
|
questSystem:setQuestProgress(options.questId, options.objectiveKey, options.requiredCount)
|
|
if shouldRemoveFromHero then
|
|
item:RemoveSelf()
|
|
end
|
|
if options.timerHandle then
|
|
Timers:RemoveTimer(options.timerHandle)
|
|
end
|
|
end
|
|
break
|
|
end
|
|
::__continue3::
|
|
slot = slot + 1
|
|
end
|
|
end
|
|
end
|
|
local OLDMEN_MILK_BASE_REQUIRED = 5
|
|
local oldmenMilkTurnInCount = 0
|
|
--- Общая утилита: квестодатель бросает наградной предмет ближайшему герою
|
|
local function launchQuestRewardToNearestHero(self, questGiverName, itemName, searchRadius, launchHeight, launchDistance, launchDuration, targetRandomRadius)
|
|
if searchRadius == nil then
|
|
searchRadius = 700
|
|
end
|
|
if launchHeight == nil then
|
|
launchHeight = 150
|
|
end
|
|
if launchDistance == nil then
|
|
launchDistance = 200
|
|
end
|
|
if launchDuration == nil then
|
|
launchDuration = 0.7
|
|
end
|
|
if targetRandomRadius == nil then
|
|
targetRandomRadius = 0
|
|
end
|
|
local questGiver = Entities:FindByName(nil, questGiverName)
|
|
if not questGiver then
|
|
return
|
|
end
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
searchRadius,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_CLOSEST,
|
|
false
|
|
)
|
|
if #nearbyHeroes == 0 then
|
|
return
|
|
end
|
|
local hero = nearbyHeroes[1]
|
|
local rewardItem = CreateItem(itemName, nil, nil)
|
|
if not rewardItem then
|
|
return
|
|
end
|
|
local drop = CreateItemOnPositionForLaunch(
|
|
questGiver:GetAbsOrigin(),
|
|
rewardItem
|
|
)
|
|
if not drop then
|
|
return
|
|
end
|
|
local targetPosition = targetRandomRadius > 0 and hero:GetAbsOrigin() + RandomVector(targetRandomRadius) or hero:GetAbsOrigin()
|
|
rewardItem:LaunchLootInitialHeight(
|
|
false,
|
|
launchHeight,
|
|
launchDistance,
|
|
launchDuration,
|
|
targetPosition
|
|
)
|
|
questGiver:FaceTowards(hero:GetAbsOrigin())
|
|
end
|
|
local function dropQuestItemToHero(self, questGiver, hero, itemName)
|
|
local rewardItem = CreateItem(itemName, nil, nil)
|
|
if not rewardItem or rewardItem:IsNull() then
|
|
return
|
|
end
|
|
rewardItem:SetCurrentCharges(0)
|
|
local drop = CreateItemOnPositionForLaunch(
|
|
questGiver:GetAbsOrigin(),
|
|
rewardItem
|
|
)
|
|
if not drop then
|
|
UTIL_Remove(rewardItem)
|
|
return
|
|
end
|
|
rewardItem:LaunchLootInitialHeight(
|
|
false,
|
|
150,
|
|
200,
|
|
0.7,
|
|
hero:GetAbsOrigin()
|
|
)
|
|
questGiver:FaceTowards(hero:GetAbsOrigin())
|
|
end
|
|
--- Кладёт предмет квеста под ноги NPC, если некому кинуть герою.
|
|
local function dropQuestItemAtNpcFeet(self, questGiver, itemName)
|
|
local rewardItem = CreateItem(itemName, nil, nil)
|
|
if not rewardItem or rewardItem:IsNull() then
|
|
return
|
|
end
|
|
rewardItem:SetCurrentCharges(0)
|
|
local origin = questGiver:GetAbsOrigin()
|
|
local drop = CreateItemOnPositionForLaunch(origin, rewardItem)
|
|
if not drop then
|
|
UTIL_Remove(rewardItem)
|
|
return
|
|
end
|
|
rewardItem:LaunchLootInitialHeight(
|
|
false,
|
|
0,
|
|
80,
|
|
0.4,
|
|
origin
|
|
)
|
|
end
|
|
local function giveShovelToNearestHeroNearKunkka(self)
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_kunkka")
|
|
if not questGiver or questGiver:IsNull() then
|
|
print("[KunkkaQuest] npc_quest_giver_kunkka не найден — лопату не выдали")
|
|
return
|
|
end
|
|
local heroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
1400,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_CLOSEST,
|
|
false
|
|
)
|
|
for ____, unit in ipairs(heroes) do
|
|
do
|
|
local hero = unit
|
|
if not hero or hero:IsNull() or hero:FindItemInInventory("item_shovel") then
|
|
goto __continue28
|
|
end
|
|
dropQuestItemToHero(nil, questGiver, hero, "item_shovel")
|
|
return
|
|
end
|
|
::__continue28::
|
|
end
|
|
dropQuestItemAtNpcFeet(nil, questGiver, "item_shovel")
|
|
end
|
|
____exports.QuestEventHandlers = {
|
|
kunkka_quest_give_claw = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_give_claw_message_1", 0, 0)
|
|
local timer
|
|
timer = Timers:CreateTimer(function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_kunkka")
|
|
if questGiver ~= nil then
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
700,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_ANY_ORDER,
|
|
false
|
|
)
|
|
if #nearbyHeroes > 0 then
|
|
handleQuestItemTurnIn(nil, nearbyHeroes[1], {
|
|
itemName = "item_wolf_claw",
|
|
questId = "kunkka_quest_give_claw",
|
|
objectiveKey = "custom_objective",
|
|
requiredCount = 10,
|
|
timerHandle = timer,
|
|
useCharges = true
|
|
})
|
|
end
|
|
end
|
|
return 3
|
|
end)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_give_claw_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
local timertext1
|
|
timertext1 = Timers:CreateTimer(
|
|
4,
|
|
function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_give_claw_message_complete_2", 0, 0)
|
|
Timers:RemoveTimer(timertext1)
|
|
end
|
|
)
|
|
local timertext2
|
|
timertext2 = Timers:CreateTimer(
|
|
7,
|
|
function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_give_claw_message_complete_3", 0, 0)
|
|
launchQuestRewardToNearestHero(
|
|
nil,
|
|
"npc_quest_giver_kunkka",
|
|
"item_wolf_hat",
|
|
1400,
|
|
0,
|
|
150,
|
|
0.5,
|
|
RandomFloat(50, 100)
|
|
)
|
|
Timers:RemoveTimer(timertext2)
|
|
end
|
|
)
|
|
local timertext3
|
|
timertext3 = Timers:CreateTimer(
|
|
10,
|
|
function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_give_claw_message_complete_4", 0, 0)
|
|
Timers:RemoveTimer(timertext3)
|
|
end
|
|
)
|
|
end,
|
|
onFail = function()
|
|
end
|
|
},
|
|
kunkka_quest_clean_harbor = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_clean_harbor_message_1", 0, 0)
|
|
showCleanHarborFlagPlacementMarkers(nil)
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_kunkka")
|
|
if questGiver ~= nil then
|
|
local item = CreateItem("item_clean_harbor", nil, nil)
|
|
if item then
|
|
local drop = CreateItemOnPositionForLaunch(
|
|
questGiver:GetAbsOrigin(),
|
|
item
|
|
)
|
|
local dropRadius = RandomFloat(50, 100)
|
|
local heroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
1400,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_CLOSEST,
|
|
false
|
|
)
|
|
if #heroes > 0 then
|
|
item:LaunchLootInitialHeight(
|
|
false,
|
|
0,
|
|
150,
|
|
0.5,
|
|
heroes[1]:GetAbsOrigin() + RandomVector(dropRadius)
|
|
)
|
|
end
|
|
end
|
|
end
|
|
end,
|
|
onComplete = function()
|
|
hideCleanHarborFlagPlacementMarkers(nil)
|
|
GameRules:SendCustomMessage("#kunkka_quest_clean_harbor_message_complete_1", 0, 0)
|
|
end,
|
|
onFail = function()
|
|
hideCleanHarborFlagPlacementMarkers(nil)
|
|
GameRules:SendCustomMessage("#kunkka_quest_clean_harbor_message_fail_1", 0, 0)
|
|
end
|
|
},
|
|
kunkka_quest_kill_lycan = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_kill_lycan_message_1", 0, 0)
|
|
local questSystem = QuestSystem:getInstance()
|
|
local lycanAlive = false
|
|
local entity = Entities:First()
|
|
while entity ~= nil do
|
|
if IsValidEntity(entity) then
|
|
local unit = entity
|
|
if unit.GetUnitName and unit:GetUnitName() == "npc_boss_lycan" then
|
|
if not unit:IsNull() and unit.IsAlive and unit:IsAlive() then
|
|
lycanAlive = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
entity = Entities:Next(entity)
|
|
end
|
|
if not lycanAlive then
|
|
questSystem:setQuestProgress("kunkka_quest_kill_lycan", "kill_lycan", 1)
|
|
end
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_kill_lycan_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
end
|
|
},
|
|
kunkka_quest_kill_satyr_demon = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_kill_satyr_demon_message_1", 0, 0)
|
|
local questSystem = QuestSystem:getInstance()
|
|
local satyrAlive = false
|
|
local entity = Entities:First()
|
|
while entity ~= nil do
|
|
if IsValidEntity(entity) then
|
|
local unit = entity
|
|
if unit.GetUnitName and unit:GetUnitName() == "npc_demon_dragon_satyr" then
|
|
if not unit:IsNull() and unit.IsAlive and unit:IsAlive() then
|
|
satyrAlive = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
entity = Entities:Next(entity)
|
|
end
|
|
if not satyrAlive then
|
|
questSystem:setQuestProgress("kunkka_quest_kill_satyr_demon", "kill_satyr_demon", 1)
|
|
end
|
|
end,
|
|
onComplete = function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_kill_satyr_demon_message_complete_1", 0, 0)
|
|
end,
|
|
onFail = function()
|
|
end
|
|
},
|
|
kunkka_quest_find_rom = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_find_rom_message_1", 0, 0)
|
|
local spawnPoints = Entities:FindAllByName("kunkka_rom_point")
|
|
if #spawnPoints > 0 then
|
|
local item = CreateItem("item_rom", nil, nil)
|
|
local physicalItem = CreateItemOnPositionForLaunch(
|
|
spawnPoints[1]:GetAbsOrigin(),
|
|
item
|
|
)
|
|
local dropRadius = RandomFloat(50, 100)
|
|
if item ~= nil then
|
|
item:LaunchLootInitialHeight(
|
|
false,
|
|
0,
|
|
150,
|
|
0.5,
|
|
spawnPoints[RandomInt(0, #spawnPoints - 1) + 1]:GetAbsOrigin() + RandomVector(dropRadius)
|
|
)
|
|
end
|
|
end
|
|
local timer
|
|
timer = Timers:CreateTimer(function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_kunkka")
|
|
if questGiver ~= nil then
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
700,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_ANY_ORDER,
|
|
false
|
|
)
|
|
if #nearbyHeroes > 0 then
|
|
handleQuestItemTurnIn(nil, nearbyHeroes[1], {
|
|
itemName = "item_rom",
|
|
questId = "kunkka_quest_find_rom",
|
|
objectiveKey = "custom_objective",
|
|
requiredCount = 1,
|
|
timerHandle = timer,
|
|
useCharges = false
|
|
})
|
|
end
|
|
end
|
|
return 3
|
|
end)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_find_rom_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
local timertext1
|
|
timertext1 = Timers:CreateTimer(
|
|
4,
|
|
function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_find_rom_message_complete_2", 0, 0)
|
|
Timers:RemoveTimer(timertext1)
|
|
end
|
|
)
|
|
local timertext2
|
|
timertext2 = Timers:CreateTimer(
|
|
7,
|
|
function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_find_rom_message_complete_3", 0, 0)
|
|
Timers:RemoveTimer(timertext2)
|
|
end
|
|
)
|
|
local timertext3
|
|
timertext3 = Timers:CreateTimer(
|
|
10,
|
|
function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_find_rom_message_complete_4", 0, 0)
|
|
Timers:RemoveTimer(timertext3)
|
|
end
|
|
)
|
|
launchQuestRewardToNearestHero(
|
|
nil,
|
|
"npc_quest_giver_kunkka",
|
|
"item_kunkka_sword",
|
|
1400,
|
|
0,
|
|
150,
|
|
0.5,
|
|
RandomFloat(50, 100)
|
|
)
|
|
end,
|
|
onFail = function()
|
|
end
|
|
},
|
|
kunkka_quest_2 = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_2_message_1", 0, 0)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_2_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
local timertext1
|
|
timertext1 = Timers:CreateTimer(
|
|
4,
|
|
function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_2_message_complete_2", 0, 0)
|
|
Timers:RemoveTimer(timertext1)
|
|
end
|
|
)
|
|
end
|
|
},
|
|
kunkka_quest_find_anchor = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_find_anchor_message_1", 0, 0)
|
|
giveShovelToNearestHeroNearKunkka(nil)
|
|
end,
|
|
onComplete = function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_find_anchor_message_complete_1", 0, 0)
|
|
end,
|
|
onFail = function()
|
|
GameRules:SendCustomMessage("#kunkka_quest_find_anchor_message_fail_1", 0, 0)
|
|
end
|
|
},
|
|
denny_quest_kill_sheeps = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#denny_quest_kill_sheeps_message_1", 0, 0)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#denny_quest_kill_sheeps_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
local timertext1
|
|
timertext1 = Timers:CreateTimer(
|
|
4,
|
|
function()
|
|
GameRules:SendCustomMessage("#denny_quest_kill_sheeps_message_complete_2", 0, 0)
|
|
Timers:RemoveTimer(timertext1)
|
|
end
|
|
)
|
|
end
|
|
},
|
|
denny_quest_kill_thieves = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#denny_quest_kill_thieves_message_1", 0, 0)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#denny_quest_kill_thieves_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
local timertext1
|
|
timertext1 = Timers:CreateTimer(
|
|
4,
|
|
function()
|
|
GameRules:SendCustomMessage("#denny_quest_kill_thieves_message_complete_2", 0, 0)
|
|
Timers:RemoveTimer(timertext1)
|
|
end
|
|
)
|
|
end,
|
|
onFail = function()
|
|
end
|
|
},
|
|
denny_quest_find_a_pet = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#denny_quest_find_pet_message_1", 0, 0)
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_denny")
|
|
local item = CreateItem("item_pet", nil, nil)
|
|
if not item then
|
|
return
|
|
end
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
14000,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_CLOSEST,
|
|
false
|
|
)
|
|
local physicalItem = CreateItemOnPositionForLaunch(
|
|
questGiver and questGiver:GetAbsOrigin(),
|
|
item
|
|
)
|
|
if #nearbyHeroes > 0 then
|
|
item:LaunchLootInitialHeight(
|
|
false,
|
|
100,
|
|
150,
|
|
1,
|
|
nearbyHeroes[1]:GetAbsOrigin()
|
|
)
|
|
end
|
|
local point = Entities:FindByName(nil, "pet_point"):GetAbsOrigin()
|
|
local particle1 = ParticleManager:CreateParticle("particles/units/heroes/hero_bounty_hunter/bounty_hunter_track_trail_circle.vpcf", PATTACH_WORLDORIGIN, nil)
|
|
ParticleManager:SetParticleControl(particle1, 0, point)
|
|
local particle2 = ParticleManager:CreateParticle("particles/units/heroes/hero_bounty_hunter/bounty_hunter_track_shield_mark.vpcf", PATTACH_WORLDORIGIN, nil)
|
|
ParticleManager:SetParticleControl(particle2, 0, point)
|
|
local timer
|
|
timer = Timers:CreateTimer(function()
|
|
local nearbypet = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
point,
|
|
nil,
|
|
150,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_BASIC,
|
|
DOTA_UNIT_TARGET_FLAG_OUT_OF_WORLD,
|
|
FIND_CLOSEST,
|
|
false
|
|
)
|
|
if #nearbypet > 0 then
|
|
do
|
|
local i = 0
|
|
while i < #nearbypet do
|
|
local unit = nearbypet[i + 1]
|
|
local unitName = unit:GetUnitName()
|
|
if unitName == "npc_squirrel_event" or unitName == "npc_pig_event" or unitName == "npc_wolf_event" then
|
|
UTIL_Remove(unit)
|
|
local modifier
|
|
if unitName == "npc_squirrel_event" then
|
|
modifier = modifier_pet_buff_npc_squirrel_event.name
|
|
elseif unitName == "npc_pig_event" then
|
|
modifier = modifier_pet_buff_npc_pig_event.name
|
|
else
|
|
modifier = modifier_pet_buff_npc_wolf_event.name
|
|
end
|
|
local heroes = HeroList:GetAllHeroes()
|
|
do
|
|
local j = 0
|
|
while j < #heroes do
|
|
heroes[j + 1]:AddNewModifier(
|
|
heroes[j + 1],
|
|
getModifierSourceAbility(nil, heroes[j + 1]),
|
|
modifier,
|
|
{}
|
|
)
|
|
j = j + 1
|
|
end
|
|
end
|
|
local face = point - 1
|
|
local spawnunit = CreateUnitByName(
|
|
unitName,
|
|
point,
|
|
true,
|
|
nil,
|
|
nil,
|
|
DOTA_TEAM_GOODGUYS
|
|
)
|
|
spawnunit:FaceTowards(face)
|
|
local questSystem = QuestSystem:getInstance()
|
|
questSystem:setQuestProgress("denny_quest_find_pet", "find_a_pet", 1)
|
|
ParticleManager:DestroyParticle(particle1, false)
|
|
ParticleManager:DestroyParticle(particle2, false)
|
|
Timers:RemoveTimer(timer)
|
|
end
|
|
i = i + 1
|
|
end
|
|
end
|
|
else
|
|
local questSystem = QuestSystem:getInstance()
|
|
local quest = questSystem.quests:get("denny_quest_find_pet")
|
|
local questState = quest and quest.state
|
|
if questState == QuestState.FAILED then
|
|
Timers:RemoveTimer(timer)
|
|
ParticleManager:DestroyParticle(particle1, false)
|
|
ParticleManager:DestroyParticle(particle2, false)
|
|
return nil
|
|
end
|
|
end
|
|
return 0.66
|
|
end)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#denny_quest_find_pet_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
local timertext1
|
|
timertext1 = Timers:CreateTimer(
|
|
3,
|
|
function()
|
|
GameRules:SendCustomMessage("#denny_quest_find_pet_message_complete_2", 0, 0)
|
|
Timers:RemoveTimer(timertext1)
|
|
end
|
|
)
|
|
local timertext2
|
|
timertext2 = Timers:CreateTimer(
|
|
5,
|
|
function()
|
|
GameRules:SendCustomMessage("#denny_quest_find_pet_message_complete_3", 0, 0)
|
|
Timers:RemoveTimer(timertext2)
|
|
end
|
|
)
|
|
end
|
|
},
|
|
denny_quest_1 = {
|
|
onAccept = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#Denny_quest_1_message_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
local timertext1
|
|
timertext1 = Timers:CreateTimer(
|
|
2,
|
|
function()
|
|
GameRules:SendCustomMessage("#Denny_quest_1_message_2", 0, 0)
|
|
Timers:RemoveTimer(timertext1)
|
|
end
|
|
)
|
|
local timertext2
|
|
timertext2 = Timers:CreateTimer(
|
|
4,
|
|
function()
|
|
GameRules:SendCustomMessage("#Denny_quest_1_message_3", 0, 0)
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_denny")
|
|
local point = Entities:FindByName(nil, "point_denny_fight"):GetAbsOrigin()
|
|
if not (questGiver and questGiver:IsInstance(CDOTA_BaseNPC)) then
|
|
return
|
|
end
|
|
questGiver:SetAttackCapability(DOTA_UNIT_CAP_MELEE_ATTACK)
|
|
questGiver:MoveToPositionAggressive(toVectorWS(nil, point))
|
|
Timers:RemoveTimer(timertext2)
|
|
end
|
|
)
|
|
local rofltimer
|
|
rofltimer = Timers:CreateTimer(
|
|
9,
|
|
function()
|
|
local questSystem = QuestSystem:getInstance()
|
|
local quest = questSystem.quests:get("denny_quest_kill_sheeps")
|
|
local questState = quest and quest.state
|
|
if questState == QuestState.FAILED or questState == QuestState.COMPLETED then
|
|
Timers:RemoveTimer(rofltimer)
|
|
return nil
|
|
end
|
|
local Randomtext = RandomInt(1, 5)
|
|
if Randomtext == 1 then
|
|
GameRules:SendCustomMessage("#Denny_quest_1_rofl_message_1", 0, 0)
|
|
elseif Randomtext == 2 then
|
|
GameRules:SendCustomMessage("#Denny_quest_1_rofl_message_2", 0, 0)
|
|
elseif Randomtext == 3 then
|
|
GameRules:SendCustomMessage("#Denny_quest_1_rofl_message_3", 0, 0)
|
|
elseif Randomtext == 4 then
|
|
GameRules:SendCustomMessage("#Denny_quest_1_rofl_message_4", 0, 0)
|
|
elseif Randomtext == 5 then
|
|
GameRules:SendCustomMessage("#Denny_quest_1_rofl_message_5", 0, 0)
|
|
end
|
|
return 5
|
|
end
|
|
)
|
|
local hasSword = false
|
|
local timer
|
|
timer = Timers:CreateTimer(
|
|
4,
|
|
function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_denny")
|
|
if not questGiver then
|
|
return
|
|
end
|
|
if not hasSword then
|
|
local itemEntity = findNearestByClassname(
|
|
"dota_item_drop",
|
|
questGiver:GetAbsOrigin(),
|
|
450
|
|
)
|
|
if itemEntity ~= nil then
|
|
local containedItem = itemEntity:GetContainedItem()
|
|
if containedItem and not containedItem:IsNull() and containedItem:GetAbilityName() == "item_kunkka_sword" then
|
|
local sword = "item_kunkka_sword"
|
|
itemEntity:RemoveSelf()
|
|
questGiver:AddItemByName(sword)
|
|
questGiver:PickupDroppedItem(containedItem)
|
|
end
|
|
end
|
|
end
|
|
do
|
|
local i = 0
|
|
while i < 9 do
|
|
local item = questGiver:GetItemInSlot(i)
|
|
if item and item:GetAbilityName() == "item_kunkka_sword" then
|
|
hasSword = true
|
|
break
|
|
end
|
|
i = i + 1
|
|
end
|
|
end
|
|
local questSystem = QuestSystem:getInstance()
|
|
local progress = questSystem:getQuestProgress("denny_quest_kill_sheeps", "training_farm")
|
|
if not hasSword and progress >= 9 then
|
|
questSystem:failQuest("denny_quest_kill_sheeps")
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_denny")
|
|
local point = Entities:FindByName(nil, "new_point_denny"):GetAbsOrigin()
|
|
if not (questGiver and questGiver:IsInstance(CDOTA_BaseNPC)) then
|
|
return
|
|
end
|
|
questGiver:MoveToPosition(toVectorWS(nil, point))
|
|
Timers:RemoveTimer(timer)
|
|
Timers:RemoveTimer(rofltimer)
|
|
questGiver:SetAttackCapability(DOTA_UNIT_CAP_NO_ATTACK)
|
|
return nil
|
|
end
|
|
return 0.25
|
|
end
|
|
)
|
|
end,
|
|
onFail = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
6,
|
|
function()
|
|
GameRules:SendCustomMessage("#Denny_quest_1_message_fail_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
local timertext1
|
|
timertext1 = Timers:CreateTimer(
|
|
9,
|
|
function()
|
|
GameRules:SendCustomMessage("#Denny_quest_1_message_fail_2", 0, 0)
|
|
Timers:RemoveTimer(timertext1)
|
|
end
|
|
)
|
|
local timertext2
|
|
timertext2 = Timers:CreateTimer(
|
|
11,
|
|
function()
|
|
GameRules:SendCustomMessage("#Denny_quest_1_message_fail_3", 0, 0)
|
|
Timers:RemoveTimer(timertext2)
|
|
end
|
|
)
|
|
end,
|
|
onComplete = function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_denny")
|
|
local point = Entities:FindByName(nil, "new_point_denny"):GetAbsOrigin()
|
|
if not (questGiver and questGiver:IsInstance(CDOTA_BaseNPC)) then
|
|
return
|
|
end
|
|
questGiver:SetAttackCapability(DOTA_UNIT_CAP_NO_ATTACK)
|
|
questGiver:MoveToPosition(toVectorWS(nil, point))
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#Denny_quest_1_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
local timer
|
|
timer = Timers:CreateTimer(
|
|
6,
|
|
function()
|
|
GameRules:SendCustomMessage("#Denny_quest_1_message_complete_2", 0, 0)
|
|
local timertext1
|
|
timertext1 = Timers:CreateTimer(
|
|
2.5,
|
|
function()
|
|
GameRules:SendCustomMessage("#Denny_quest_1_message_complete_3", 0, 0)
|
|
Timers:RemoveTimer(timertext1)
|
|
end
|
|
)
|
|
do
|
|
local i = 0
|
|
while i < 9 do
|
|
local item = questGiver:GetItemInSlot(i)
|
|
if item and item:GetAbilityName() == "item_kunkka_sword" then
|
|
item:RemoveSelf()
|
|
break
|
|
end
|
|
i = i + 1
|
|
end
|
|
end
|
|
launchQuestRewardToNearestHero(
|
|
nil,
|
|
"npc_quest_giver_denny",
|
|
"item_kunkka_sword",
|
|
1400,
|
|
0,
|
|
150,
|
|
0.5,
|
|
RandomFloat(50, 100)
|
|
)
|
|
Timers:RemoveTimer(timer)
|
|
end
|
|
)
|
|
return nil
|
|
end
|
|
},
|
|
firestar_quest_1 = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#firestar_quest_1_message_1", 0, 0)
|
|
local timer
|
|
timer = Timers:CreateTimer(function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_firestar")
|
|
if questGiver ~= nil then
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
700,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_ANY_ORDER,
|
|
false
|
|
)
|
|
if #nearbyHeroes > 0 then
|
|
handleQuestItemTurnIn(nil, nearbyHeroes[1], {
|
|
itemName = "item_meat",
|
|
questId = "firestar_quest_1",
|
|
objectiveKey = "custom_objective",
|
|
requiredCount = 10,
|
|
timerHandle = timer,
|
|
useCharges = true
|
|
})
|
|
end
|
|
end
|
|
return 3
|
|
end)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#firestar_quest_1_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
end
|
|
},
|
|
firestar_quest_gourmet = {
|
|
onAccept = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#firestar_quest_gourmet_message_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#firestar_quest_gourmet_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
end
|
|
},
|
|
firestar_quest_leader_horn = {
|
|
onAccept = function()
|
|
local timer
|
|
timer = Timers:CreateTimer(function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_firestar")
|
|
if questGiver ~= nil then
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
700,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_ANY_ORDER,
|
|
false
|
|
)
|
|
if #nearbyHeroes > 0 then
|
|
handleQuestItemTurnIn(nil, nearbyHeroes[1], {
|
|
itemName = "item_lycan_horn",
|
|
questId = "firestar_quest_leader_horn",
|
|
objectiveKey = "bring_leader_horn",
|
|
requiredCount = 1,
|
|
timerHandle = timer,
|
|
useCharges = false
|
|
})
|
|
end
|
|
end
|
|
return 3
|
|
end)
|
|
end,
|
|
onComplete = function()
|
|
GameRules:SendCustomMessage("#firestar_quest_leader_horn_message_complete_1", 0, 0)
|
|
end
|
|
},
|
|
firestar_quest_fishing = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#firestar_quest_fishing_message_1", 0, 0)
|
|
launchQuestRewardToNearestHero(
|
|
nil,
|
|
"npc_quest_giver_firestar",
|
|
"item_fishing_rod",
|
|
1400,
|
|
0,
|
|
150,
|
|
0.5,
|
|
RandomFloat(50, 100)
|
|
)
|
|
local timer
|
|
timer = Timers:CreateTimer(function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_firestar")
|
|
if questGiver ~= nil then
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
700,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_ANY_ORDER,
|
|
false
|
|
)
|
|
if #nearbyHeroes > 0 then
|
|
handleQuestItemTurnIn(nil, nearbyHeroes[1], {
|
|
itemName = "item_fish",
|
|
questId = "firestar_quest_fishing",
|
|
objectiveKey = "bring_fish",
|
|
requiredCount = 10,
|
|
timerHandle = timer,
|
|
useCharges = true
|
|
})
|
|
end
|
|
end
|
|
return 3
|
|
end)
|
|
end,
|
|
onComplete = function()
|
|
GameRules:SendCustomMessage("#firestar_quest_fishing_message_complete_1", 0, 0)
|
|
end
|
|
},
|
|
oldmen_quest_1 = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#oldmen_quest_1_message_1", 0, 0)
|
|
local requiredMilkCount = OLDMEN_MILK_BASE_REQUIRED * (oldmenMilkTurnInCount + 1)
|
|
QuestSystem:getInstance():setObjectiveRequired("oldmen_quest_1", "custom_objective", requiredMilkCount)
|
|
local timer
|
|
timer = Timers:CreateTimer(function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_oldmen")
|
|
if questGiver ~= nil then
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
700,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_ANY_ORDER,
|
|
false
|
|
)
|
|
if #nearbyHeroes > 0 then
|
|
handleQuestItemTurnIn(nil, nearbyHeroes[1], {
|
|
itemName = "item_milk",
|
|
questId = "oldmen_quest_1",
|
|
objectiveKey = "custom_objective",
|
|
requiredCount = requiredMilkCount,
|
|
timerHandle = timer,
|
|
useCharges = true
|
|
})
|
|
end
|
|
end
|
|
return 3
|
|
end)
|
|
end,
|
|
onComplete = function()
|
|
oldmenMilkTurnInCount = oldmenMilkTurnInCount + 1
|
|
local nextRequiredMilkCount = OLDMEN_MILK_BASE_REQUIRED * (oldmenMilkTurnInCount + 1)
|
|
QuestSystem:getInstance():setObjectiveRequired("oldmen_quest_1", "custom_objective", nextRequiredMilkCount, false)
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#oldmen_quest_1_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
local timertext1
|
|
timertext1 = Timers:CreateTimer(
|
|
3,
|
|
function()
|
|
GameRules:SendCustomMessage("#oldmen_quest_1_message_complete_2", 0, 0)
|
|
Timers:RemoveTimer(timertext1)
|
|
end
|
|
)
|
|
local timertext2
|
|
timertext2 = Timers:CreateTimer(
|
|
5,
|
|
function()
|
|
GameRules:SendCustomMessage("#oldmen_quest_1_message_complete_3", 0, 0)
|
|
Timers:RemoveTimer(timertext2)
|
|
end
|
|
)
|
|
launchQuestRewardToNearestHero(
|
|
nil,
|
|
"npc_quest_giver_oldmen",
|
|
"item_testo",
|
|
1400,
|
|
0,
|
|
150,
|
|
0.5,
|
|
RandomFloat(50, 100)
|
|
)
|
|
local questSystem = QuestSystem:getInstance()
|
|
questSystem:resetQuest("oldmen_quest_1")
|
|
end
|
|
},
|
|
oldmen_quest_cheesemaker = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#oldmen_quest_cheesemaker_message_1", 0, 0)
|
|
local timer
|
|
timer = Timers:CreateTimer(function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_oldmen")
|
|
if questGiver ~= nil then
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
700,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_ANY_ORDER,
|
|
false
|
|
)
|
|
if #nearbyHeroes > 0 then
|
|
handleQuestItemTurnIn(nil, nearbyHeroes[1], {
|
|
itemName = "item_cheese",
|
|
questId = "oldmen_quest_cheesemaker",
|
|
objectiveKey = "bring_cheese",
|
|
requiredCount = 3,
|
|
timerHandle = timer,
|
|
useCharges = true
|
|
})
|
|
end
|
|
end
|
|
return 3
|
|
end)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#oldmen_quest_cheesemaker_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
end
|
|
},
|
|
lina_quest_ent_heart = {
|
|
onAccept = function()
|
|
local timer
|
|
timer = Timers:CreateTimer(function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_lina")
|
|
if questGiver ~= nil then
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
700,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_ANY_ORDER,
|
|
false
|
|
)
|
|
if #nearbyHeroes > 0 then
|
|
handleQuestItemTurnIn(nil, nearbyHeroes[1], {
|
|
itemName = "item_ent_heart",
|
|
questId = "lina_quest_ent_heart",
|
|
objectiveKey = "custom_objective",
|
|
requiredCount = 20,
|
|
timerHandle = timer,
|
|
useCharges = true
|
|
})
|
|
end
|
|
end
|
|
return 3
|
|
end)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#lina_quest_ent_heart_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
launchQuestRewardToNearestHero(nil, "npc_quest_giver_lina", "item_firecore")
|
|
end,
|
|
onFail = function()
|
|
end
|
|
},
|
|
lina_quest_bottle = {
|
|
onAccept = function()
|
|
launchQuestRewardToNearestHero(nil, "npc_quest_giver_lina", "item_pollen_keeper")
|
|
GameRules:SendCustomMessage("#lina_quest_bottle_message_1", 0, 0)
|
|
local timer
|
|
timer = Timers:CreateTimer(function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_lina")
|
|
if questGiver ~= nil then
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
700,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_ANY_ORDER,
|
|
false
|
|
)
|
|
if #nearbyHeroes > 0 then
|
|
handleQuestItemTurnIn(nil, nearbyHeroes[1], {
|
|
itemName = "item_pollen_keeper",
|
|
questId = "lina_quest_bottle",
|
|
objectiveKey = "custom_objective",
|
|
requiredCount = 20,
|
|
timerHandle = timer,
|
|
useCharges = true,
|
|
removeFromHero = true
|
|
})
|
|
end
|
|
end
|
|
return 3
|
|
end)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#lina_quest_bottle_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
end,
|
|
onFail = function()
|
|
end
|
|
},
|
|
friend_quest_pizza_prep = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#friend_quest_pizza_prep_message_1", 0, 0)
|
|
local timer
|
|
timer = Timers:CreateTimer(function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_friend")
|
|
if questGiver ~= nil then
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
700,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_ANY_ORDER,
|
|
false
|
|
)
|
|
if #nearbyHeroes > 0 then
|
|
openRecipe(nil, "item_testo_pizza")
|
|
handleQuestItemTurnIn(nil, nearbyHeroes[1], {
|
|
itemName = "item_testo_pizza",
|
|
questId = "friend_quest_pizza_prep",
|
|
objectiveKey = "custom_objective",
|
|
requiredCount = 1,
|
|
timerHandle = timer,
|
|
useCharges = false,
|
|
removeFromHero = false
|
|
})
|
|
end
|
|
end
|
|
return 3
|
|
end)
|
|
end,
|
|
onComplete = function()
|
|
openRecipe(nil, "item_pizza")
|
|
openRecipe(nil, "item_mayonnaise")
|
|
GameRules:SendCustomMessage("#friend_quest_pizza_prep_message_complete_1", 0, 0)
|
|
launchQuestRewardToNearestHero(
|
|
nil,
|
|
"npc_quest_giver_friend",
|
|
"item_mayonnaise",
|
|
1400,
|
|
0,
|
|
150,
|
|
0.5
|
|
)
|
|
end,
|
|
onFail = function()
|
|
end
|
|
},
|
|
largo_quest_kill_frogs = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#largo_quest_kill_frogs_message_1", 0, 0)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#largo_quest_kill_frogs_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
end,
|
|
onFail = function()
|
|
end
|
|
},
|
|
largo_quest_spider_legs = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#largo_quest_spider_legs_message_1", 0, 0)
|
|
local timer
|
|
timer = Timers:CreateTimer(function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_largo")
|
|
if questGiver ~= nil then
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
700,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_ANY_ORDER,
|
|
false
|
|
)
|
|
if #nearbyHeroes > 0 then
|
|
handleQuestItemTurnIn(nil, nearbyHeroes[1], {
|
|
itemName = "item_spider_legs_custom",
|
|
questId = "largo_quest_spider_legs",
|
|
objectiveKey = "custom_objective",
|
|
requiredCount = 20,
|
|
timerHandle = timer,
|
|
useCharges = true
|
|
})
|
|
end
|
|
end
|
|
return 3
|
|
end)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#largo_quest_spider_legs_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
end,
|
|
onFail = function()
|
|
end
|
|
},
|
|
maiden_quest_eggs = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#maiden_quest_eggs_message_1", 0, 0)
|
|
local timer
|
|
timer = Timers:CreateTimer(function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_maiden")
|
|
if questGiver ~= nil then
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
700,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_ANY_ORDER,
|
|
false
|
|
)
|
|
if #nearbyHeroes > 0 then
|
|
handleQuestItemTurnIn(nil, nearbyHeroes[1], {
|
|
itemName = "item_egg",
|
|
questId = "maiden_quest_eggs",
|
|
objectiveKey = "custom_objective",
|
|
requiredCount = 20,
|
|
timerHandle = timer,
|
|
useCharges = true
|
|
})
|
|
end
|
|
end
|
|
return 3
|
|
end)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#maiden_quest_eggs_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
end,
|
|
onFail = function()
|
|
end
|
|
},
|
|
doctor_quest_frog_paws = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#doctor_quest_frog_paws_message_1", 0, 0)
|
|
local timer
|
|
timer = Timers:CreateTimer(function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_doctor")
|
|
if questGiver ~= nil then
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
700,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_ANY_ORDER,
|
|
false
|
|
)
|
|
if #nearbyHeroes > 0 then
|
|
handleQuestItemTurnIn(nil, nearbyHeroes[1], {
|
|
itemName = "item_frog_paw",
|
|
questId = "doctor_quest_frog_paws",
|
|
objectiveKey = "custom_objective",
|
|
requiredCount = 20,
|
|
timerHandle = timer,
|
|
useCharges = true
|
|
})
|
|
end
|
|
end
|
|
return 3
|
|
end)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#doctor_quest_frog_paws_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
end,
|
|
onFail = function()
|
|
end
|
|
},
|
|
doctor_quest_poison = {
|
|
onAccept = function()
|
|
GameRules:SendCustomMessage("#doctor_quest_poison_message_1", 0, 0)
|
|
local timer
|
|
timer = Timers:CreateTimer(function()
|
|
local questGiver = Entities:FindByName(nil, "npc_quest_giver_doctor")
|
|
if questGiver ~= nil then
|
|
local nearbyHeroes = FindUnitsInRadius(
|
|
DOTA_TEAM_GOODGUYS,
|
|
questGiver:GetAbsOrigin(),
|
|
nil,
|
|
700,
|
|
DOTA_UNIT_TARGET_TEAM_FRIENDLY,
|
|
DOTA_UNIT_TARGET_HERO,
|
|
DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS,
|
|
FIND_ANY_ORDER,
|
|
false
|
|
)
|
|
if #nearbyHeroes > 0 then
|
|
handleQuestItemTurnIn(nil, nearbyHeroes[1], {
|
|
itemName = "item_poison",
|
|
questId = "doctor_quest_poison",
|
|
objectiveKey = "custom_objective",
|
|
requiredCount = 20,
|
|
timerHandle = timer,
|
|
useCharges = true
|
|
})
|
|
end
|
|
end
|
|
return 3
|
|
end)
|
|
end,
|
|
onComplete = function()
|
|
local timertext0
|
|
timertext0 = Timers:CreateTimer(
|
|
0.1,
|
|
function()
|
|
GameRules:SendCustomMessage("#doctor_quest_poison_message_complete_1", 0, 0)
|
|
Timers:RemoveTimer(timertext0)
|
|
end
|
|
)
|
|
end,
|
|
onFail = function()
|
|
end
|
|
}
|
|
}
|
|
--- Трэк BH для квестовых всплывающих эффектов
|
|
function ____exports.precacheQuestBountyHunterParticles(self, context)
|
|
PrecacheResource("particle", "particles/units/heroes/hero_bounty_hunter/bounty_hunter_track_trail_circle.vpcf", context)
|
|
PrecacheResource("particle", "particles/units/heroes/hero_bounty_hunter/bounty_hunter_track_shield_mark.vpcf", context)
|
|
PrecacheResource("particle", "particles/econ/items/kunkka/divine_anchor/hero_kunkka_dafx_skills/kunkka_spell_x_spot_mark_red_fxset.vpcf", context)
|
|
end
|
|
return ____exports
|