function Gather( event )
local caster = event.caster
local target = event.target
local ability = event.ability
local target_class = target:GetClassname()
if not caster.lumber_gathered then
caster.lumber_gathered = 0
end
caster.manual_order = false
if target_class == "ent_dota_tree" then
caster:MoveToTargetToAttack(target)
if Debug_Peasant then
print("Moving to ", target_class)
end
caster.target_tree = target
end
caster:RemoveModifierByName("get_lumber")
ability:ApplyDataDrivenModifier(caster, caster, "get_lumber", {})
-- fake toggle
if ability:GetToggleState() == false then
ability:ToggleAbility()
end
-- Hide Return
--local return_ability = caster:FindAbilityByName("return_resources")
--return_ability:SetHidden(true)
--ability:SetHidden(false)
--caster:SwapAbilities("gather_lumber", "return_resources" , true, false)
end
function ToggleOffGather( event )
local caster = event.caster
local gather_ability = caster:FindAbilityByName("gather_lumber")
caster.target_tree.worker = nil
if gather_ability:GetToggleState() == true then
gather_ability:ToggleAbility()
if Debug_Peasant then
print("Toggled Off Gather")
end
end
end
function ToggleOffReturn( event )
local caster = event.caster
local return_ability = caster:FindAbilityByName("return_resources")
if return_ability:GetToggleState() == true then
return_ability:ToggleAbility()
if Debug_Peasant then
print("Toggled Off Return")
end
end
caster.skip_order = false
end
function CheckTreePos( event )
local caster = event.caster
local target = caster.target_tree
local ability = event.ability
local target_class = target:GetClassname()
if target_class == "ent_dota_tree" then
caster:MoveToTargetToAttack(target)
--print("Moving to "..target_class)
end
local distance = (target:GetAbsOrigin() - caster:GetAbsOrigin()):Length()
local collision = distance < 150
if not collision then
--print("Moving to tree, distance: ",distance)
elseif not caster:HasModifier("chop_wood") then
caster:RemoveModifierByName("get_lumber")
ability:ApplyDataDrivenModifier(caster, caster, "chop_wood", {})
if Debug_Peasant then
print("Reached tree")
end
end
end
function GetLumber( event )
local player = event.caster:GetPlayerOwner()
local pID = player:GetPlayerID()
--local hero = player:GetAssignedHero()
-- --local hero = PlayerResource:GetSelectedHeroEntity(pID)
local caster = event.caster
local ability = event.ability
local max_lumber_carried = 20
local return_ability = caster:FindAbilityByName("return_resources")
local target = caster.target_tree
local target_class = target:GetClassname()
-- if target_class == "ent_dota_tree" then
-- target:CutDown(event.caster:GetTeam())
-- caster:Stop()
-- end
-- if hero:HasModifier("die_chance") then
-- caster:Stop()
-- caster:RemoveModifierByName("get_lumber")
-- caster:RemoveModifierByName("chop_wood")
-- caster:RemoveModifierByName("modif_return_resources")
-- end
if not hero:HasItemInInventory("item_axe_tree") then
caster.lumber_gathered = caster.lumber_gathered + math.random (2, 4)
elseif hero:HasItemInInventory("item_axe_tree") then
caster.lumber_gathered = caster.lumber_gathered + math.random (4, 6)
end
if Debug_Peasant then
print("Gathered "..caster.lumber_gathered)
end
if not caster:HasModifier("modif_return_resources") then
return_ability:ApplyDataDrivenModifier( caster, caster, "modif_return_resources", nil)
end
caster:SetModifierStackCount("modif_return_resources", caster, caster.lumber_gathered)
if caster.lumber_gathered < max_lumber_carried then
if return_ability:GetToggleState() == false or return_ability:IsHidden() then
if Debug_Peasant then
print("Gather OFF, Return ON")
end
if return_ability:GetToggleState() == false then
return_ability:ToggleAbility()
end
--ability:SetHidden(true)
caster:SwapAbilities("gather_lumber", "return_resources", false, true)
end
else
local player = caster:GetPlayerOwner():GetPlayerID()
caster:RemoveModifierByName("chop_wood")
caster:CastAbilityNoTarget(return_ability, player)
return_ability:ToggleAbility()
end
end
function ReturnResources( event )
local caster = event.caster
local ability = event.ability
if caster.lumber_gathered and caster.lumber_gathered > 0 then
local building = FindClosestResourceDeposit( caster )
if building == nil then return end
if Debug_Peasant then
print("Returning "..caster.lumber_gathered.." Lumber back to "..building:GetUnitName())
end
Timers:CreateTimer(0.03, function()
if ability:GetToggleState() == false then
ability:ToggleAbility()
if Debug_Peasant then
print("Return Ability Toggled On")
end
end
end)
local dist = (caster:GetAbsOrigin()-building:GetAbsOrigin()):Length() - 300
local fixed_position = (building:GetAbsOrigin() - caster:GetAbsOrigin()):Normalized() * dist
ExecuteOrderFromTable({ UnitIndex = caster:GetEntityIndex(), OrderType = DOTA_UNIT_ORDER_MOVE_TO_TARGET, TargetIndex = building:GetEntityIndex(), Position = fixed_position, Queue = false})
caster.skip_order = true
caster.target_building = building
end
end
function ReleaseTree( event )
local caster = event.caster
print("atykk")
if caster.target_tree.worker ~= nil then
print("aytjkkyyk")
caster.target_tree.worker = nil
end
end