Weexer Posted April 17, 2019 Share Posted April 17, 2019 (edited) Again.. I'm coming here to search for help with my messy code.. My goal is: Make maxwell's shadow lumbers not to cut any 1st or 2nd stage trees. I'm running game without any error after this code but it seems not working in-game. I was thinking many hours why it's not working and i'm guessing the problem is in BufferedAction (but i don't know how it works) Any help is REALLY appreciated Code: Spoiler local function FindEntityToWorkAction(inst, action, addtltags) local leader = GetLeader(inst) if leader ~= nil then --Keep existing target? --[[ if TUNING.PREFERABLE_TREE == 1 then if(data and data.object and data.object.prefab=="evergreen_short") then data.object.target:RemoveComponent("workable") end if(data and data.target and data.target.prefab=="evergreen_short") then data.object.target:RemoveComponent("workable") data.target:RemoveComponent("workable") end end ]]-- local target = inst.sg.statemem.target if target ~= nil and target:IsValid() and not (target:IsInLimbo() or target:HasTag("NOCLICK") or target:HasTag("event_trigger")) and target.components.workable ~= nil and target.components.workable:CanBeWorked() and target.components.workable:GetWorkAction() == action and not (target.components.burnable ~= nil and (target.components.burnable:IsBurning() or target.components.burnable:IsSmoldering())) and target.entity:IsVisible() and target:IsNear(leader, KEEP_WORKING_DIST) then if addtltags ~= nil then for i, v in ipairs(addtltags) do if target:HasTag(v) then return BufferedAction(inst, target, action) end end else return BufferedAction(inst, target, action) end end ---------- Find new target -> Here is code i actually found in archived topic and i can't make it work (topic wasn't solved unfortunately) ---------- target = FindEntity(leader, SEE_WORK_DIST, nil, { action.id.."_workable" }, { "fire", "smolder", "event_trigger", "INLIMBO", "NOCLICK" }, addtltags) if target ~=nil and (target.prefab == "mushtree_small_stump" or target.prefab == "mushtree_medium_stump" or target.prefab == "mushtree_tall_stump" or target.prefab == "marbleshrub_small" or target.prefab == "marbleshrub_medium" or target.prefab == "evergreen_normal" or target.prefab == "evergreen_short" or target.prefab == "evergreen_sparse_normal" or target.prefab == "evergreen_sparse_short" or target.prefab == "twiggy_normal" or target.prefab == "twiggy_short" or target.prefab == "twiggy_old" ) then return nil end return target ~= nil and BufferedAction(inst, target, action) or nil end end ---------- Here ends everything that is changed in whole file ---------- -- This function i copied just for clear view how it works with "FindEntityToWorkAction" function function ShadowWaxwellBrain:OnStart() local root = PriorityNode( { --#1 priority is dancing beside your leader. Obviously. WhileNode(function() return ShouldDanceParty(self.inst) end, "Dance Party", PriorityNode({ Leash(self.inst, GetLeaderPos, KEEP_DANCING_DIST, KEEP_DANCING_DIST), ActionNode(function() DanceParty(self.inst) end), }, .25)), WhileNode(function() return IsNearLeader(self.inst, KEEP_WORKING_DIST) end, "Leader In Range", PriorityNode({ --All shadows will avoid explosives RunAway(self.inst, { fn = ShouldAvoidExplosive, tags = { "explosive" }, notags = { "INLIMBO" } }, AVOID_EXPLOSIVE_DIST, AVOID_EXPLOSIVE_DIST), --Duelists will try to fight before fleeing IfNode(function() return self.inst.prefab == "shadowduelist" end, "Is Duelist", PriorityNode({ WhileNode(function() return self.inst.components.combat:GetCooldown() > .5 and ShouldKite(self.inst.components.combat.target, self.inst) end, "Dodge", RunAway(self.inst, { fn = ShouldKite, tags = { "_combat", "_health" }, notags = { "INLIMBO" } }, KITING_DIST, STOP_KITING_DIST)), ChaseAndAttack(self.inst), }, .25)), --All shadows will flee from danger at this point RunAway(self.inst, { fn = ShouldRunAway, oneoftags = { "monster", "hostile" }, notags = { "player", "INLIMBO" } }, RUN_AWAY_DIST, STOP_RUN_AWAY_DIST), --Workiers will try to work if not fleeing IfNode(function() return self.inst.prefab == "shadowlumber" end, "Keep Chopping", DoAction(self.inst, function() return FindEntityToWorkAction(self.inst, ACTIONS.CHOP) end)), IfNode(function() return self.inst.prefab == "shadowminer" end, "Keep Mining", DoAction(self.inst, function() return FindEntityToWorkAction(self.inst, ACTIONS.MINE) end)), IfNode(function() return self.inst.prefab == "shadowdigger" end, "Keep Digging", DoAction(self.inst, function() return FindEntityToWorkAction(self.inst, ACTIONS.DIG, DIG_TAGS) end)), }, .25)), Follow(self.inst, GetLeader, MIN_FOLLOW_DIST, TARGET_FOLLOW_DIST, MAX_FOLLOW_DIST), WhileNode(function() return GetLeader(self.inst) ~= nil end, "Has Leader", FaceEntity(self.inst, GetFaceTargetFn, KeepFaceTargetFn)), }, .25) self.bt = BT(self.inst, root) end return ShadowWaxwellBrain Edited April 19, 2019 by Weexer Link to comment https://forums.kleientertainment.com/forums/topic/105041-problem-with-shadowwaxwellbrainlua/ Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now