Răsfoiți Sursa

1.新增战斗筛选策略 2.新增技能cmd效果 3.优化部分战斗代码命名

gitxsm 1 an în urmă
părinte
comite
b5bda2575c

+ 2 - 2
script/module/combat/BeSkill.lua

@@ -557,8 +557,8 @@ function onHit(attacker,targets,skillID)
 					end
 				elseif beSkillArgs[1] == "skillID" then
 					local canUse = false
-					for _,v in ipairs(beSkillArgs[2]) do
-						if skillID == v then
+					for _, targetSkill in ipairs(beSkillArgs[2]) do
+						if skillID == targetSkill then
 							canUse = true
 							break
 						end

+ 6 - 0
script/module/combat/CombatBuff.lua

@@ -877,6 +877,12 @@ function delBuffer(obj, ind)
 	return bufferCnt
 end
 
+--通过buff的cmd删除一定数量的buff
+function DelBuffByCmd(obj, cmd, cnt)
+	delBufferByCmd(obj, cmd, cnt)
+end
+
+
 -- 战斗回合开始时添加buffer
 function beforeCombat()
 

+ 4 - 0
script/module/combat/CombatCalc.lua

@@ -882,6 +882,10 @@ function calcHp(attacker, defender, calcType, rate, isAddHp, flag)
         if hp > nMaxHp then
             hp = nMaxHp
         end
+    elseif calcType == 26 then
+        -- 当前攻击者攻击力百分比
+        local atk = CombatObj.getValue(attacker, RoleDefine.ATK)
+        hp = atk * rate
     end
 
     if not NO_EXCALC_LIST[calcType] then

+ 60 - 1
script/module/combat/Skill.lua

@@ -66,6 +66,7 @@ local function realUse(obj, skillID, fanjiTargets,otherArgs)
 		CombatCalc.initAttacker(obj)
 		--print("skill realuse:",obj.pos,skillID,skillConfig.targetMode[1],skillConfig.targetMode[2])
 		local targets = TargetMode.getTargets(obj, skillConfig.targetMode, fanjiTargets, nil, true,skillConfig.type == CombatDefine.SKILL_TYPE1,skillID, true)
+
 		local len = #targets
 		if len < 1 then return end
         for i=1, len do
@@ -92,7 +93,6 @@ local function realUse(obj, skillID, fanjiTargets,otherArgs)
 			end
 		end
 
-
 		if not fanjiTargets and skillConfig.otherArgs.addBuffBeforeCmd then
 			CombatBuff.onHit(obj,newTargets,skillConfig)
 		end
@@ -1236,6 +1236,8 @@ function CMD.dnexhurt(obj,skillConfig,skillTargets)
 	if r > args[4] then 
 		return
 	end
+
+
 	local calcType = args[1]
 	local rate = args[2]
 	local targets = TargetMode.getTargets(obj, args[3],skillTargets)
@@ -1245,6 +1247,7 @@ function CMD.dnexhurt(obj,skillConfig,skillTargets)
 	if args[5] then
 		limit = args[5] * CombatObj.getValue(obj,RoleDefine.ATK)
 	end
+
 	for _,target in ipairs(targets) do
 		hp = calcHp(obj,target,calcType,rate,limit)
 		if hp ~= 0 then
@@ -1257,4 +1260,60 @@ function CMD.dnexhurt(obj,skillConfig,skillTargets)
 		end
 	end
 	return ret
+end
+
+--拥有指定buff后的额外效果
+function CMD.targetBuffExtraEffect(obj,skillConfig,skillTargets)
+	local args = skillConfig.args
+	if not args then
+		return
+	end
+
+	local targetBuffCmd = args[1]
+	local targetBuffCnt = args[2]
+	if not targetBuffCmd or not targetBuffCnt then
+		return
+	end
+
+	local nowTargetBuffCnt = CombatBuff.getBuffCnt(obj, targetBuffCmd)
+	if nowTargetBuffCnt < targetBuffCnt then
+		return
+	end
+
+	local targetMode = args[3]
+	local targets = TargetMode.getTargets(obj, targetMode, skillTargets)
+
+
+	local hurt, limitVale
+	local calcType, rate = args[4], args[5]
+
+
+	local maxNum = args[6] or 1
+	local nowNum = math.floor(nowTargetBuffCnt / targetBuffCnt)
+	if nowNum < maxNum then
+		maxNum = nowNum
+	end
+
+	local limitAttrType = args[7]
+	local limitAttrRate = args[8]
+	if limitAttrType and limitAttrRate then
+		limitVale = limitAttrRate * CombatObj.getValue(obj, limitAttrType)
+	end
+
+	table.shuffle(targets)
+	for idx, target in ipairs(targets) do
+		if idx > maxNum then
+			break
+		end
+		hurt = calcHp(obj, target, calcType, rate, limitVale)
+		if hurt ~= 0 then
+			local d = CombatObj.updateHp(target,-hurt,nil,true, obj.pos,CombatObj.SKILL_HP_TYPE)
+			if d ~= 0 then
+				CombatImpl.setExtraHit(target,-hurt,CMD2ID["hurt"])
+				CombatObj.onHpCB(target,d, obj.pos)
+			end
+		end
+	end
+
+	CombatBuff.DelBuffByCmd(obj, targetBuffCmd, nowTargetBuffCnt)
 end

+ 37 - 0
script/module/combat/TargetMode.lua

@@ -1188,6 +1188,42 @@ end
 
 
 
+-- 选择技能目标一方中排除技能目标以外的所有目标,再进行随机出一定数量的目标
+--[[
+	@param2 = {
+		handlerID,
+		side    		需要填2
+		isSkillTarget  	判断时是否用到技能目标列表, 1-否, 非1则是, 默认为2
+		exclude        	1-选择技能目标, 2-技能目标以外的目标
+		objCnt			随机选择目标数量
+	}
+]]
+local function handler35(_,targetMode,skillTargets)
+	local skillTarget = skillTargets[1]
+	if not skillTarget or not skillTarget.side then
+		return
+	end
+	local targetSide = getTargetSide(skillTarget, targetMode)
+	local isSkillTarget = targetMode[3] or 2
+	local exclude = targetMode[4] or 2
+	local objCnt = targetMode[5] or 1
+	local targetObjList = getTargetList(targetSide,isSkillTarget,exclude,skillTargets)
+
+	--随机打乱顺序
+	table.shuffle(targetObjList)
+
+		-- 筛选最后的targets
+	for i = 1,#targetObjList do
+		targets[#targets+1] = targetObjList[i]
+		if #targets >= objCnt then
+			break
+		end
+	end
+end
+
+
+
+
 
 ------------------------------ 分界线 ------------------------------
 -- 目前是一样了,等策划配置好skill表后删掉 @mafei
@@ -1231,5 +1267,6 @@ handler[32] = handler32	--32 指定buff选择
 handler[33] = handler33	--32 指定buff选择
 handler[0] = handler0 -- 技能选取 和11相同
 handler[34] = handler34	--从技能目标中根据职业选择
+handler[35] = handler35	--从技能目标中根据职业选择
 
 --对象选择器end