Skip to content
Snippets Groups Projects
Combat.lua 36.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • dg's avatar
    dg committed
    
    function _M:clearCombo()
    	if self:hasEffect(self.EFF_COMBO) then
    		self:removeEffect(self.EFF_COMBO)
    	end
    end
    
    -- Check to see if the target is already being grappled; many talents have extra effects on grappled targets
    function _M:isGrappled(source)
    	local p = self:hasEffect(self.EFF_GRAPPLED)
    
    	if p and p.src == source then
    
    dg's avatar
    dg committed
    		return true
    	else
    		return false
    	end
    end
    
    -- Breaks active grapples; called by a few talents that involve a lot of movement
    function _M:breakGrapples()
    	if self:hasEffect(self.EFF_GRAPPLING) then
    		-- deactivating GRAPPLING will clear the target's Grappled effect as well
    		self:removeEffect(self.EFF_GRAPPLING)
    	end
    end
    
    -- grapple size check; compares attackers size and targets size
    function _M:grappleSizeCheck(target)
    	size = target.size_category - self.size_category
    	if size > 1 then
    		game.logSeen(target, "%s fails because %s is too big!", self.name:capitalize(), target.name:capitalize())
    		return true
    	else
    		return false
    	end
    end
    
    -- Starts the grapple
    function _M:startGrapple(target)
    	-- pulls boosted grapple effect from the clinch talent if known
    	if self:knowTalent(self.T_CLINCH) then
    		local t = self:getTalentFromId(self.T_CLINCH)
    		power = t.getPower(self, t)
    		duration = t.getDuration(self, t)
    		hitbonus = self:getTalentLevel(t)/2
    	else
    		power = 5
    		duration = 4
    		hitbonus = 0
    	end
    	-- Breaks the grapple before reapplying
    	if self:hasEffect(self.EFF_GRAPPLING) then
    		-- deactivating GRAPPLING will clear the targets Grappled effect and various holds
    		self:removeEffect(self.EFF_GRAPPLING, true)
    		target:setEffect(target.EFF_GRAPPLED, duration, {src=self, power=power}, true)
    		self:setEffect(self.EFF_GRAPPLING, duration, {src=target}, true)
    		return true
    	elseif target:checkHit(self:combatAttackStr(), target:combatPhysicalResist(), 0, 95, 5 - hitbonus) and target:canBe("pin") then
    		target:setEffect(target.EFF_GRAPPLED, duration, {src=self, power=power})
    		self:setEffect(self.EFF_GRAPPLING, duration, {src=target}, true)
    		return true
    	else
    		game.logSeen(target, "%s resists the grapple!", target.name:capitalize())
    		return false
    	end
    end