山河社稷图
parent
972b6dde78
commit
a8e76d24db
|
|
@ -1,19 +1,19 @@
|
|||
local HardStage = {
|
||||
__count = 38,
|
||||
__indexs = {1.83},
|
||||
__values = {-420,10,31,13,2,5,3,31,12,19,2,20,2,25,4,16,13,21,30,1,8,6,78,67,1.83,112,110,89,85,29567,-5000.4,1001,1.73,3962,-5000.61,70000,1.73},
|
||||
__exVals = {49,nil,'x_xiaoyaoyou_ditu_longzi','x_xiaoyaoyou_ditu_huangzi','x_xiaoyaoyou_ditu_luzi','x_xiaoyaoyou_ditu_hezi','x_xiaoyaoyou_ditu_shengzi','x_xiaoyaoyou_ditu_buzi','x_xiaoyaoyou_ditu_dizi','x_xiaoyaoyou_ditu_xuezi','x_xiaoyaoyou_ditu_jingzi','x_xiaoyaoyou_ditu_xianzi','地图名称1','地图名称2','地图名称3','地图名称4','地图名称5','地图名称6','地图名称7','地图名称8','地图名称9','地图名称10','地图名称11','地图名称12','地图名称13','地图名称14','地图名称15','地图名称16','地图名称17','地图名称18','地图名称19','地图名称2-1','地图名称2-2','地图名称2-3','地图名称2-4','地图名称2-5','地图名称2-6','地图名称2-7','地图名称2-8','地图名称2-9','地图名称2-10','地图名称2-11','地图名称2-12','地图名称2-13','地图名称2-14','地图名称2-15','地图名称2-16','地图名称2-17','地图名称2-18','地图名称2-19'},
|
||||
__count = 57,
|
||||
__indexs = {1.91,82,1.81,2.1},
|
||||
__values = {-366,2,48,22,2,24,23,20,5,29,19,11,1,36,48,8,40,28,1.02,6,-2.3,3,1,-4.4,16,32,1,-2.7,1.2,2,30,15,37,2,1.2,-2.3,1.2,-2.2,42,1,43,1.2,3,40,8,48,37.2,48,23,2,8,1,9,61,1.2,95,1.3,97,1.3,207,1.3,87,43905,-2.3,8,10,20,122950,24000,8000,5000,1.73,563,4400,10000,16000,1000,3000,6000,-4000.2,2000,1000,4000,3000,8000,3000,5000,2000,13000,9000,16000,10000,20000,-10000.2,6000,14000,-30000.2,14000,6000,70000,4000,36000,40000,60000,50000,110000,140000,29030010,100,1,99,3.1,6.1,100,9100,14.1,14.31},
|
||||
__exVals = {68,nil,'x_xiaoyaoyou_ditu_longzi','x_xiaoyaoyou_ditu_huangzi','x_xiaoyaoyou_ditu_luzi','x_xiaoyaoyou_ditu_hezi','x_xiaoyaoyou_ditu_shengzi','x_xiaoyaoyou_ditu_buzi','x_xiaoyaoyou_ditu_dizi','x_xiaoyaoyou_ditu_xuezi','x_xiaoyaoyou_ditu_xianzi','x_xiaoyaoyou_ditu_jingzi','地图名称1','地图名称2','地图名称3','地图名称4','地图名称5','地图名称6','地图名称7','地图名称8','地图名称9','地图名称10','地图名称11','地图名称12','地图名称13','地图名称14','地图名称15','地图名称16','地图名称17','地图名称18','地图名称19','地图名称2-1','地图名称2-2','地图名称2-3','地图名称2-4','地图名称2-5','地图名称2-6','地图名称2-7','地图名称2-8','地图名称2-9','地图名称2-10','地图名称2-11','地图名称2-12','地图名称2-13','地图名称2-14','地图名称2-15','地图名称2-16','地图名称2-17','地图名称2-18','地图名称2-19','地图名称3-1','地图名称3-2','地图名称3-3','地图名称3-4','地图名称3-5','地图名称3-6','地图名称3-7','地图名称3-8','地图名称3-9','地图名称3-10','地图名称3-11','地图名称3-12','地图名称3-13','地图名称3-14','地图名称3-15','地图名称3-16','地图名称3-17','地图名称3-18','地图名称3-19'},
|
||||
__fields = {
|
||||
'Id',
|
||||
'Chapter',
|
||||
'Section',
|
||||
'Picture ',
|
||||
'Picture',
|
||||
'Name',
|
||||
'LevelPointPosition',
|
||||
'Repeat ',
|
||||
'Repeat',
|
||||
'NextLevel',
|
||||
'LevelLimit',
|
||||
'Star ',
|
||||
'Star',
|
||||
'MonsterGroup',
|
||||
'HardStageBuff',
|
||||
'RecommendFightAbility',
|
||||
|
|
@ -32,9 +32,9 @@ __defaults = {
|
|||
nil,
|
||||
nil,
|
||||
nil,
|
||||
25,
|
||||
nil,
|
||||
18,
|
||||
nil,
|
||||
18,
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
|
|
@ -43,23 +43,23 @@ __defaults = {
|
|||
nil
|
||||
},
|
||||
__refs = {
|
||||
{26,.81,1,.81},
|
||||
{26,1.81,-18,1.81},
|
||||
{166,1.9,-9,2.1,2.1,1.7},
|
||||
{176,1.73},
|
||||
{{{1},{66,-1,-1,-1,-3,-37,-3,-6,2,-5,-7,6,8,1,47,14.31,-8,5.1,5.4}},{{2},{13,-4,-2,-1,-1,-2,-2,1,6,4,5,4,1,-7,-2,14.31,-3,5.1,5.4}}},
|
||||
{26,-1,1,2.1,4.1,8.1,2.1,0,19.81},
|
||||
{25,1.73},
|
||||
{50,.3,2,2.1,4.1,.2,-34,.81},
|
||||
{19,.81,1,2.1,.81},
|
||||
{19,1.81,-18,2.1,1.81},
|
||||
{237,1.7,2,-1,-8,4.1,4.1,1.8,10.6},
|
||||
{247,1.65},
|
||||
{{{1},{84,-3,-6,-13,-19,-27,5.2,1,-3,-4,3,6,2,72,14.4,41,19.1,19.81}},{{2},{86,-1,-2,2.1,-4,-5,-8,-4,-10,-11,-21,10.2,-3,-2,-3,-3,-1,84,19.1,19.81}}},
|
||||
{19,-1,1,2.1,4.1,8.1,2.1,0,19.1,19.81},
|
||||
{18,1,0,2,0,2,4.1,8.1,0,2,14,0,1,0,1,4.1,8.7,2,0,1,3,7.6,15.8,6.3},
|
||||
{39,.7,1,2.1,.6,1,.5,2,.5,6.4,2.1,1,.2},
|
||||
nil,
|
||||
{72,1.73},
|
||||
{26,1.01,-10,2.1,2.1,1.4},
|
||||
{69,-2,3,2.1,-2,41,-40,2.1,41,10.5,4.3,1,9.8,8.1,2.1},
|
||||
{{{1},{127,1.73}}},
|
||||
{26,1,-1,2,-2,4.1,8.1,4.2,0,19.81},
|
||||
{28,-3,3,2.1,4.1,8.1,2.1,0,19.81},
|
||||
{{{1},{26,.91},{-2.9,3,-2.8}},{{2},{27,.91},{-2.9,3,-2.8}},{{3},{28,.91},{-2.9,3,-2.8}}},
|
||||
{{{1},{129,-2.9,-18,-2.9},{-2.9,3,-2.8}},{{2},{131,-2.9,-18,-2.9},{-2.9,3,-2.8}},{{3},{133,-2.9,-18,-2.9},{-2.9,3,-2.8}}}
|
||||
{194,-176,177,1.2,-179,180,1.2,-182,183,1.2,-185,186,1.2,-188,189,1,-190,191,1.2,-193,194,1.2,-196,197,1.2,-199,200,1.2,-202,203,1,-204,205,1.2,-207,208,1.2,-210,211,1.2,-213,214,1.2,-216,217},
|
||||
{106,-1,-1,-1},
|
||||
{157,-139,142,-45,46,-143,144,-46,47,-145,146,-47,49,-148,149,-11,12,-150,151,1,-152,154,-14,15,-155,156,-15,16,-157,158,15.2,-159,161,-8,10,-163,164,1,-165,165,-5,7,-167,168,-6,8,-170,171,-5,6,-172,173,-4,5,-174,175},
|
||||
{{{1},{118,1.73,-18,1.81}}},
|
||||
{19,1,-1,2,-2,4.1,8.1,4.2,0,19.1,19.81},
|
||||
{21,-3,3,2.1,4.1,8.1,2.1,0,19.1,19.81},
|
||||
{{{1},{50,.2,16,1,-17,17,-1,0,5.2,40,-24,1,-1,26,-24,-1,-1,.2,30,-4,-26,27,-1,3.2,-27,26},{-2.9,3,-2.8,2.1}},{{2},{67,-1,0,12,.2,32,-33,34,-14,-30,26,2,-17,16,-15,33,-34,0,15,8,-1,-12,5,-14,-1,17,-16,35,-36},{-2.9,3,-2.8,2.1}},{{3},{108,-29,30,1,-14,14,-33,24,-23,15,19,-5,-20,25,-14,-7,-2,4,0,6,-6,-28,48,-18,-29,29,-17,24,-10,4},{-2.9,3,-2.8,2.1}}},
|
||||
{{{1},{120,-2.9,-18,2.1,-2.9},{-2.9,3,-2.8,2.1}},{{2},{122,-2.9,-18,2.1,-2.9},{-2.9,3,-2.8,2.1}},{{3},{124,-2.9,-18,2.1,-2.9},{-2.9,3,-2.8,2.1}}}
|
||||
},
|
||||
__refPoss = {
|
||||
nil,
|
||||
|
|
@ -72,7 +72,7 @@ __refPoss = {
|
|||
nil,
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
{31,4,7,8},
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
local HardStageCondition = {
|
||||
__count = 11,
|
||||
__indexs = {1.11},
|
||||
__values = {0,1.11,49989,950003},
|
||||
__exVals = {11,'通过关卡','2回合内通过关卡','上阵N个神将通过关卡','5回合内造成50000伤害','使用指定佛系神将5个','存活5个人','不上阵输出神将通过关卡','不上阵佛系神将通过关卡','佩戴普贤菩萨魂印通过关卡','不使用灵兽通过关卡','全部上阵输出职业神将通过关卡'},
|
||||
__count = 61,
|
||||
__indexs = {100,101,1.8,92,1.4,207,1.3,7,2.1,4.3,56,1.5,95,1.3,97,2.1,99,101,1.3,43902,-2.7,10,20},
|
||||
__values = {0,1.11,59989,-20000.7,100000,200000,500003},
|
||||
__exVals = {61,'通过关卡','2回合内通过关卡','3回合内通过关卡','4回合内通过关卡','5回合内通过关卡','6回合内通过关卡','7回合内通过关卡','8回合内通过关卡','9回合内通过关卡','10回合内通过关卡','上阵1个神将通过关卡','上阵2个神将通过关卡','上阵3个神将通过关卡','上阵4个神将通过关卡','上阵5个神将通过关卡','上阵人系神将2个','上阵人系神将3个','上阵人系神将4个','上阵人系神将5个','上阵佛系神将2个','上阵佛系神将3个','上阵佛系神将4个','上阵佛系神将5个','上阵妖系神将2个','上阵妖系神将3个','上阵妖系神将4个','上阵妖系神将5个','上阵道系神将2个','上阵道系神将3个','上阵道系神将4个','上阵道系神将5个','存活1个人','存活2个人','存活3个人','存活4个人','存活5个人','存活6个人','不上阵输出神将通过关卡','不上阵辅助神将通过关卡','不上阵坦克神将通过关卡','不上阵奶神将通过关卡','不上阵人系神将通过关卡','不上阵佛系神将通过关卡','不上阵妖系神将通过关卡','不上阵道系神将通过关卡','佩戴普贤菩萨魂印通过关卡','不使用灵兽通过关卡','全部上阵输出职业神将通过关卡','全部上阵辅助职业神将通过关卡','全部上阵坦克职业神将通过关卡','全部上阵奶妈职业神将通过关卡','5回合内造成6万伤害','5回合内造成8万伤害','5回合内造成10万伤害','5回合内造成12万伤害','5回合内造成14万伤害','5回合内造成16万伤害','5回合内造成18万伤害','5回合内造成20万伤害','5回合内造成30万伤害','5回合内造成50万伤害'},
|
||||
__fields = {
|
||||
'Id',
|
||||
'ConditionType',
|
||||
|
|
@ -15,9 +15,9 @@ __defaults = {
|
|||
nil
|
||||
},
|
||||
__refs = {
|
||||
{2,1.01},
|
||||
{{{1},{2,1.2,2,-3,3,-4,1,11,-13,1}},{{2},{13,-7},{4,1}}},
|
||||
{15,1.01}
|
||||
{2,1,.8,1,.4,2,.51,1,.5,1,.3,2.1,1.3,.3,-7,.9},
|
||||
{{{1},{2,1.9,-9,1.4,-4,.3,1,2.1,4.3,-3,1.5,-5,1.3,-3,1.3,18,-22,1.5,.9}},{{2},{3,1.3,-3,2.1,4.3,7,1.9},{16,1.51,21,1.9}}},
|
||||
{24,1.06}
|
||||
},
|
||||
__refPoss = {
|
||||
nil,
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -202,6 +202,21 @@ function BuffManager:GetBuff(target, checkFunc)
|
|||
end
|
||||
return blist
|
||||
end
|
||||
--根据条件获取所有的buff
|
||||
function BuffManager:GetAllBuffByFunc(checkFunc)
|
||||
local blist = {}
|
||||
for i=1, self.buffDic.size do
|
||||
local list = self.buffDic.vList[i]
|
||||
for j=1, list.size do
|
||||
local buff = list.buffer[j]
|
||||
if not checkFunc or checkFunc(buff)then
|
||||
table.insert(blist, buff)
|
||||
end
|
||||
end
|
||||
end
|
||||
return blist
|
||||
end
|
||||
|
||||
|
||||
function BuffManager:HasBuff(target, type, checkFunc)
|
||||
if self.buffDic.kvList[type] then
|
||||
|
|
|
|||
|
|
@ -6871,5 +6871,182 @@ local passivityList = {
|
|||
[315] = function(role, args,id,judge)
|
||||
role.ctrl_noheal=true
|
||||
end,
|
||||
--同一回合受同一目标(站位)直接伤害每次降低[a]%
|
||||
--a[float]
|
||||
[316] = function(role, args,id,judge)
|
||||
local f1 = args[1]
|
||||
local curRound=1
|
||||
local attackRecord={}
|
||||
local curDamage = 0
|
||||
local function onRoundChange(round)
|
||||
if round==curRound+1 then
|
||||
attackRecord={}
|
||||
end
|
||||
curRound=round
|
||||
end
|
||||
BattleLogic.Event:AddEvent(BattleEventName.BattleRoundChange, onRoundChange,nil,nil,role)
|
||||
|
||||
|
||||
local function onFinalBeDamage(damagingFunc, atkRole, damage, skill, dotType, bCrit, damageType,isDirect)
|
||||
-- 非直接伤害不免除
|
||||
if not skill and not isDirect then
|
||||
return
|
||||
end
|
||||
if atkRole.camp==role.camp then
|
||||
return
|
||||
end
|
||||
--攻击次数
|
||||
local time=0
|
||||
for key, value in pairs(attackRecord) do
|
||||
if value[1]==atkRole.position then
|
||||
time=value[2]
|
||||
value[2]=time+1
|
||||
end
|
||||
end
|
||||
if time==0 then
|
||||
table.insert(attackRecord,{atkRole.position,1})
|
||||
return
|
||||
end
|
||||
curDamage=floor(damage*f1*time)
|
||||
if damagingFunc then damagingFunc(curDamage) end
|
||||
|
||||
end
|
||||
role.Event:AddEvent(BattleEventName.FinalBeDamageEnd, onFinalBeDamage,nil,nil,role)
|
||||
end,
|
||||
--每次行动击杀敌方单位(不按人头算)驱散随机一个有异常的队友随机一个异常
|
||||
[317] = function(role, args,id,judge)
|
||||
local onRoleHit = function(target, damage, bCrit, finalDmg, damageType, skill)
|
||||
if skill and not skill.isTriggerJudge and judge==1 then
|
||||
return
|
||||
end
|
||||
if target.camp==role.camp then
|
||||
return
|
||||
end
|
||||
--如果是技能并且这个被动已经被触发过 return
|
||||
if skill and BattleUtil.ChecklistIsContainValue(skill.triggerPassivityId,id) then
|
||||
return
|
||||
end
|
||||
if not skill and judge==1 then
|
||||
return
|
||||
end
|
||||
if target:IsDead() and not BattleUtil.CheckIsNoDead(target) and not role:IsDead() then
|
||||
if skill then
|
||||
table.insert(skill.triggerPassivityId,id)
|
||||
end
|
||||
local list=BattleLogic.BuffMgr:GetAllBuffByFunc(function(buff) return buff.target.camp==role.camp and (buff.type==BuffName.Control or buff.type==BuffName.DOT or buff.type==BuffName.Exile ) end)
|
||||
local len=BattleUtil.LengthOfTable(list)
|
||||
if list and len>0 then
|
||||
local index=Random.RangeInt(1,len)
|
||||
BattleLogic.BuffMgr:ClearBuff(list[index].target, function (buff)
|
||||
return buff==list[index]
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
role.Event:AddEvent(BattleEventName.RoleHit, onRoleHit,nil,nil,role)
|
||||
end,
|
||||
-- 技能施加控制状态失败,回复自身[a]点怒气()
|
||||
-- a[int]
|
||||
[318] = function(role, args)
|
||||
local f1 = args[1]
|
||||
local ctrlNum=0
|
||||
local isCtrl=false
|
||||
-- 死亡数量
|
||||
local onRoleAddBuffMiss = function(buff)
|
||||
if buff then
|
||||
if buff.type==BuffName.Control and buff.caster==role then
|
||||
isCtrl=true
|
||||
ctrlNum=ctrlNum+1
|
||||
end
|
||||
end
|
||||
end
|
||||
BattleLogic.Event:AddEvent(BattleEventName.RoleAddBuffFail, onRoleAddBuffMiss,nil,nil,role)
|
||||
local onSkillCastEnd= function(skill)
|
||||
local maxNum=#skill:GetDirectTargets()
|
||||
if isCtrl and ctrlNum>=maxNum then
|
||||
BattleUtil.CalRage(role, role,f1, CountTypeName.Add)
|
||||
end
|
||||
isCtrl=false
|
||||
ctrlNum=0
|
||||
end
|
||||
role.Event:AddEvent(BattleEventName.SkillCastEnd,onSkillCastEnd,nil,nil,role)
|
||||
end,
|
||||
--死亡时,按剩余怒气乘[a]平均分给存活队友,每人至少[b]点,按站位优先
|
||||
--a[int],b[int]
|
||||
[319] = function(role, args,id,judge)
|
||||
local v1 = args[1]
|
||||
local v2 = args[2]
|
||||
|
||||
local OnDead = function(atkRole,skill)
|
||||
local arr=RoleManager.Query(function(v) return v.camp==role.camp and v~=role end)
|
||||
local len=#arr
|
||||
local rage1=role.Rage*v1
|
||||
if rage1<len*v2 then
|
||||
rage1=len*v2
|
||||
end
|
||||
local num1=floor(rage1/len)
|
||||
local num2=rage1%len
|
||||
for i = 1, len do
|
||||
if i<=num2 then
|
||||
BattleUtil.CalRage(role, arr[i],num1+1, CountTypeName.Add)
|
||||
else
|
||||
BattleUtil.CalRage(role,arr[i],num1, CountTypeName.Add)
|
||||
end
|
||||
end
|
||||
end
|
||||
role.Event:AddEvent(BattleEventName.RoleDead, OnDead,nil,nil,role)
|
||||
end,
|
||||
--普攻额外回复怒气增加[a]点
|
||||
--a[int]
|
||||
[320] = function(role, args,id,judge)
|
||||
local v1 = args[1]
|
||||
|
||||
local OnRageGrow = function(rage,growFunc)
|
||||
if growFunc then
|
||||
growFunc(rage+v1)
|
||||
end
|
||||
end
|
||||
role.Event:AddEvent(BattleEventName.RoleRageGrow, OnRageGrow,nil,nil,role)
|
||||
end,
|
||||
--[a]%概率受到的直接伤害变成[b],每回合最多触发[c]次
|
||||
--a[float],b[int],c[int]
|
||||
[321] = function(role, args,id,judge)
|
||||
local p1 = args[1]
|
||||
local damage1=args[2]
|
||||
local v1 =args[3]
|
||||
local curRound=1
|
||||
local time=0
|
||||
local curDamage = 0
|
||||
local function onRoundChange(round)
|
||||
if round==curRound+1 then
|
||||
time=0
|
||||
end
|
||||
curRound=round
|
||||
end
|
||||
BattleLogic.Event:AddEvent(BattleEventName.BattleRoundChange, onRoundChange,nil,nil,role)
|
||||
|
||||
|
||||
local function onFinalBeDamage(damagingFunc, atkRole, damage, skill, dotType, bCrit, damageType,isDirect)
|
||||
-- 非直接伤害不免除
|
||||
if not skill and not isDirect then
|
||||
return
|
||||
end
|
||||
if atkRole.camp==role.camp then
|
||||
return
|
||||
end
|
||||
if time>=v1 then
|
||||
return
|
||||
end
|
||||
BattleUtil.RandomAction(p1, function ()
|
||||
curDamage=floor(damage-damage1)
|
||||
if damagingFunc then damagingFunc(curDamage) end
|
||||
time=time+1
|
||||
end)
|
||||
|
||||
|
||||
end
|
||||
role.Event:AddEvent(BattleEventName.FinalBeDamageEnd, onFinalBeDamage,nil,nil,role)
|
||||
end,
|
||||
|
||||
}
|
||||
return passivityList
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ local this = BattleLogManager
|
|||
local isEditor = AppConst and AppConst.Platform == "EDITOR"
|
||||
local isMobile = AppConst and (AppConst.Platform == "ANDROID" or AppConst.Platform == "IOS")
|
||||
|
||||
local isDebug = true
|
||||
local isDebug = false
|
||||
function LogBattle(str)
|
||||
if isDebug then
|
||||
if isEditor then
|
||||
|
|
|
|||
|
|
@ -52,7 +52,10 @@ function Control:OnEnd()
|
|||
self.target.lockTarget = nil
|
||||
self.target.ctrl_slient = false
|
||||
elseif self.ctrlType == 4 then --禁疗
|
||||
self.target.ctrl_noheal = false
|
||||
local isHave=self.target:CheckHavePassive(315)
|
||||
if not isHave then
|
||||
self.target.ctrl_noheal = false
|
||||
end
|
||||
elseif self.ctrlType == 5 then --致盲
|
||||
self.target.ctrl_blind = false
|
||||
elseif self.ctrlType == 7 then --麻痹
|
||||
|
|
|
|||
|
|
@ -166,6 +166,7 @@ BattleEventName = {
|
|||
DisposeRoleCtrl_noheal = indexAdd(),--处理角色禁疗
|
||||
RoleBeExile = indexAdd(),--角色被放逐
|
||||
RoleExileEnd = indexAdd(),--角色放逐结束
|
||||
RoleAddBuffFail = indexAdd(),--角色添加buff失败
|
||||
}
|
||||
|
||||
BattleMaxFrame = 1000000
|
||||
|
|
|
|||
|
|
@ -960,11 +960,14 @@ function BattleUtil.RandomControl(rand, ctrl, caster, target, round)
|
|||
caster.Event:DispatchEvent(BattleEventName.PassiveRandomControl, _CallBack, ctrl, target)
|
||||
target.Event:DispatchEvent(BattleEventName.PassiveBeRandomControl, _CallBack, ctrl, target)
|
||||
rand = BattleUtil.CountChangeList(rand, cl)
|
||||
|
||||
return BattleUtil.RandomAction(rand, function()
|
||||
local buff = Buff.Create(caster, BuffName.Control, round, ctrl)
|
||||
local buff = Buff.Create(caster, BuffName.Control, round, ctrl)
|
||||
local isAdd=BattleUtil.RandomAction(rand, function()
|
||||
target:AddBuff(buff)
|
||||
end)
|
||||
if not isAdd then
|
||||
BattleLogic.Event:DispatchEvent(BattleEventName.RoleAddBuffFail,buff)
|
||||
end
|
||||
return isAdd
|
||||
end
|
||||
|
||||
--
|
||||
|
|
|
|||
|
|
@ -281,6 +281,7 @@ function RoleLogic:AddBuff(buff)
|
|||
for i=1, self.buffFilter.size do
|
||||
if self.buffFilter.buffer[i](buff,self) then
|
||||
BattleLogic.BuffMgr:PutBuff(buff)
|
||||
BattleLogic.Event:DispatchEvent(BattleEventName.RoleAddBuffFail,buff,self)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
package com.ljsd.jieling.handler.hardStage;
|
||||
|
||||
import com.ljsd.jieling.globals.BIReason;
|
||||
import com.ljsd.jieling.handler.BaseHandler;
|
||||
import com.ljsd.jieling.logic.dao.UserManager;
|
||||
import com.ljsd.jieling.logic.dao.root.User;
|
||||
import com.ljsd.jieling.logic.hardStage.HardStageLogic;
|
||||
import com.ljsd.jieling.network.session.ISession;
|
||||
import com.ljsd.jieling.util.ItemUtil;
|
||||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import config.SHardStageReward;
|
||||
import rpc.protocols.CommonProto;
|
||||
|
|
@ -27,16 +29,17 @@ public class GetHardStageChapterRewardHandler extends BaseHandler<PlayerInfoProt
|
|||
int chapter = proto.getChapterId();
|
||||
int rewardId = proto.getRewradId();
|
||||
List<SHardStageReward> rewardStageList = SHardStageReward.getChapterConfigMap().get(chapter);
|
||||
List<CommonProto.Drop.Builder> dropList = new ArrayList<>();
|
||||
CommonProto.Drop.Builder drop = CommonProto.Drop.newBuilder();
|
||||
List<Integer>dropList = new ArrayList<Integer>();
|
||||
for(SHardStageReward rewardStage : rewardStageList){
|
||||
if(rewardStage.getId() == rewardId){
|
||||
//领取章节奖励
|
||||
HardStageLogic.getChapterReward(user,rewardStage,dropList);
|
||||
}
|
||||
}
|
||||
ItemUtil.drop(user,dropList.stream().mapToInt(Integer::intValue).toArray(),drop,1,0, BIReason.HARD_STAGE_GET);
|
||||
PlayerInfoProto.GetHardStageChapterRewardResponse.Builder response = PlayerInfoProto.GetHardStageChapterRewardResponse.newBuilder();
|
||||
for(CommonProto.Drop.Builder drop : dropList){
|
||||
response.addDrop(drop);
|
||||
}
|
||||
response.setDrop(drop);
|
||||
MessageUtil.sendMessage(iSession, 1,MessageTypeProto.MessageType.HARD_STAGE_CHAPTER_REWARD_RESPONSE.getNumber(), response.build(), true);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,9 +6,13 @@ import com.ljsd.jieling.db.redis.RedisKey;
|
|||
import com.ljsd.jieling.db.redis.RedisUtil;
|
||||
import com.ljsd.jieling.exception.ErrorCode;
|
||||
import com.ljsd.jieling.exception.ErrorCodeException;
|
||||
import com.ljsd.jieling.globals.BIReason;
|
||||
import com.ljsd.jieling.globals.Global;
|
||||
import com.ljsd.jieling.handler.BaseHandler;
|
||||
import com.ljsd.jieling.handler.map.behavior.BehaviorUtil;
|
||||
import com.ljsd.jieling.logic.activity.event.GoldRefreshEvent;
|
||||
import com.ljsd.jieling.logic.activity.event.Poster;
|
||||
import com.ljsd.jieling.logic.activity.event.ShanHeSheJiTuStarEvent;
|
||||
import com.ljsd.jieling.logic.dao.TeamPosHeroInfo;
|
||||
import com.ljsd.jieling.logic.dao.UserManager;
|
||||
import com.ljsd.jieling.logic.dao.root.User;
|
||||
|
|
@ -23,6 +27,7 @@ import com.ljsd.jieling.util.FightDataUtil;
|
|||
import com.ljsd.jieling.util.MessageUtil;
|
||||
import com.ljsd.jieling.util.MonsterUtil;
|
||||
import config.SHardStage;
|
||||
import javafx.stage.Stage;
|
||||
import org.luaj.vm2.LuaValue;
|
||||
import org.luaj.vm2.lib.jse.JseMathLib;
|
||||
import rpc.protocols.*;
|
||||
|
|
@ -47,7 +52,8 @@ public class StartHardStageRequestHandler extends BaseHandler<PlayerInfoProto.Ha
|
|||
User user = UserManager.getUser(iSession.getUid());
|
||||
int nodeId = proto.getNodeId();
|
||||
int teamId = proto.getTeamId();
|
||||
List<CommonProto.Drop.Builder> dropList = new ArrayList<>();
|
||||
CommonProto.Drop.Builder drop = CommonProto.Drop.newBuilder();
|
||||
List<Integer> dropList = new ArrayList<Integer>();
|
||||
SHardStage nodeConfig = SHardStage.getConfigMap().get(nodeId);
|
||||
Map<Integer, HardStageChapter> chapterMap = user.getHardStageManager().getChapterMap(user);
|
||||
if (!chapterMap.containsKey(nodeConfig.getChapter()) || chapterMap.get(nodeConfig.getChapter()).getNode(nodeId) == null) {
|
||||
|
|
@ -64,6 +70,7 @@ public class StartHardStageRequestHandler extends BaseHandler<PlayerInfoProto.Ha
|
|||
Map<Integer, HardStageChapter> chapt = user.getHardStageManager().getChapterMap(user);
|
||||
HardStageNode node = chapt.get(nodeConfig.getChapter()).getNode(nodeConfig.getId());
|
||||
node.setHasPass(true);
|
||||
node.setState(1);
|
||||
dropList.addAll(HardStageLogic.getFirstRewards(user, nodeConfig));
|
||||
} else if (nodeConfig.getStageType() == 1 || nodeConfig.getStageType() == 3) {
|
||||
//战斗后发奖励
|
||||
|
|
@ -79,7 +86,7 @@ public class StartHardStageRequestHandler extends BaseHandler<PlayerInfoProto.Ha
|
|||
resultNum[0] = (int) fight[1][1];
|
||||
resultNum[1] = (int) fight[1][3];
|
||||
resultNum[2] = (int) fight[1][5];
|
||||
System.err.print("0:" + resultNum[0] + "1:" + resultNum[1] + "2:" + resultNum[2]);
|
||||
//System.err.print("0:" + resultNum[0] + " 1:" + resultNum[1] + " 2:" + resultNum[2]);
|
||||
int resultCode = (int) fight[0][0];
|
||||
if (resultCode == -1) {
|
||||
throw new ErrorCodeException(ErrorCode.FIGHT_EXCEPTION);
|
||||
|
|
@ -103,8 +110,8 @@ public class StartHardStageRequestHandler extends BaseHandler<PlayerInfoProto.Ha
|
|||
//String fightInfo = nodeId + "#" + seed + "#" + teamId;
|
||||
int force = HeroLogic.getInstance().calTeamTotalForce(user, teamId, false);
|
||||
// 首次通关记录
|
||||
ArenaRecord firstPassRecord = RedisUtil.getInstence().get(RedisKey.HARD_STAGE_FIST_PASS, String.valueOf(nodeId),ArenaRecord.class);
|
||||
if(firstPassRecord == null){
|
||||
ArenaRecord firstPassRecord = RedisUtil.getInstence().get(RedisKey.HARD_STAGE_FIST_PASS, String.valueOf(nodeId), ArenaRecord.class);
|
||||
if (firstPassRecord == null) {
|
||||
ArenaRecord arenaRecord = new ArenaRecord();
|
||||
arenaRecord.setCreateTime(TimeUtils.nowInt());
|
||||
arenaRecord.setAttackId(user.getId());
|
||||
|
|
@ -113,14 +120,12 @@ public class StartHardStageRequestHandler extends BaseHandler<PlayerInfoProto.Ha
|
|||
arenaRecord.setUserName(user.getPlayerInfoManager().getNickName());
|
||||
arenaRecord.setHeadFrame(user.getPlayerInfoManager().getHeadFrame());
|
||||
arenaRecord.setFightData(fightData.toByteArray());
|
||||
arenaRecord.getFightData().toString();
|
||||
arenaRecord.setAttackForce(force);
|
||||
|
||||
RedisUtil.getInstence().set(RedisKey.HARD_STAGE_FIST_PASS, String.valueOf(nodeId),arenaRecord);
|
||||
RedisUtil.getInstence().set(RedisKey.HARD_STAGE_FIST_PASS, String.valueOf(nodeId), arenaRecord);
|
||||
}
|
||||
// 最低战力通关记录记录
|
||||
ArenaRecord minForcePassRecord = RedisUtil.getInstence().get(RedisKey.HARD_STAGE_PASS_MIN_FORCE, String.valueOf(nodeId),ArenaRecord.class);
|
||||
if(minForcePassRecord == null || force < minForcePassRecord.getAttackForce()){
|
||||
ArenaRecord minForcePassRecord = RedisUtil.getInstence().get(RedisKey.HARD_STAGE_PASS_MIN_FORCE, String.valueOf(nodeId), ArenaRecord.class);
|
||||
if (minForcePassRecord == null || force < minForcePassRecord.getAttackForce()) {
|
||||
ArenaRecord arenaRecord = new ArenaRecord();
|
||||
arenaRecord.setCreateTime(TimeUtils.nowInt());
|
||||
arenaRecord.setAttackId(user.getId());
|
||||
|
|
@ -129,18 +134,23 @@ public class StartHardStageRequestHandler extends BaseHandler<PlayerInfoProto.Ha
|
|||
arenaRecord.setUserName(user.getPlayerInfoManager().getNickName());
|
||||
arenaRecord.setHeadFrame(user.getPlayerInfoManager().getHeadFrame());
|
||||
arenaRecord.setFightData(fightData.toByteArray());
|
||||
arenaRecord.getFightData().toString();
|
||||
arenaRecord.setAttackForce(force);
|
||||
|
||||
RedisUtil.getInstence().set(RedisKey.HARD_STAGE_PASS_MIN_FORCE, String.valueOf(nodeId),arenaRecord);
|
||||
RedisUtil.getInstence().set(RedisKey.HARD_STAGE_PASS_MIN_FORCE, String.valueOf(nodeId), arenaRecord);
|
||||
}
|
||||
// 首次通关记录
|
||||
//Map<String, ArenaRecord> first = RedisUtil.getInstence().getMapValues(RedisKey.HARD_STAGE_FIST_PASS, "", String.class, ArenaRecord.class);
|
||||
//String key = RedisKey.getKey(RedisKey.HARD_STAGE_BATTLE, String.valueOf(iSession.getUid()), false);
|
||||
//RedisUtil.getInstence().set(key, fightInfo, -1);
|
||||
}
|
||||
for (CommonProto.Drop.Builder drop : dropList) {
|
||||
fightStartResponse.addDrop(drop);
|
||||
//排行榜
|
||||
int hardStageId = SHardStage.getStageIdByChapterAndSection(user.getHardStageManager().getCurChapter(), user.getHardStageManager().getCurNode());
|
||||
Poster.getPoster().dispatchEvent(new ShanHeSheJiTuStarEvent(iSession.getUid(), 1, hardStageId));
|
||||
int starSum = HardStageLogic.getHardStageStarsSum(user);
|
||||
Poster.getPoster().dispatchEvent(new ShanHeSheJiTuStarEvent(iSession.getUid(), 2, starSum));
|
||||
ItemUtil.drop(user, dropList.stream().mapToInt(Integer::intValue).toArray(), drop, 1, 0, BIReason.HARD_STAGE_GET);
|
||||
fightStartResponse.setDrop(drop);
|
||||
Map<Integer, HardStageChapter> chapt = user.getHardStageManager().getChapterMap(user);
|
||||
if (chapt != null) {
|
||||
HardStageNode node = chapt.get(nodeConfig.getChapter()).getNode(nodeConfig.getId());
|
||||
if (node != null) {
|
||||
fightStartResponse.setStars(node.getState());
|
||||
}
|
||||
}
|
||||
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.HARD_STAGE_FIGHT_START_RESPONSE.getNumber(), fightStartResponse.build(), true);
|
||||
//更新消息
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import com.ljsd.jieling.logic.activity.UserLevelEventHandler;
|
|||
import com.ljsd.jieling.logic.activity.eventhandler.ActivityStateChangeHandler;
|
||||
import com.ljsd.jieling.logic.activity.eventhandler.BuyGoodsDirectHandler;
|
||||
import com.ljsd.jieling.logic.activity.eventhandler.GuildForceChangeEventHandler;
|
||||
import com.ljsd.jieling.logic.activity.eventhandler.ShanHeSheJiTuEventHandler;
|
||||
import com.ljsd.jieling.logic.arena.ArenaLogic;
|
||||
import com.ljsd.jieling.logic.championship.ChampionshipLogic;
|
||||
import com.ljsd.jieling.logic.dao.ServerConfig;
|
||||
|
|
@ -258,6 +259,7 @@ public class GlobalDataManaager implements IManager {
|
|||
new BuyGoodsDirectHandler();
|
||||
new ActivityStateChangeHandler();
|
||||
new GuildForceChangeEventHandler();
|
||||
new ShanHeSheJiTuEventHandler();
|
||||
ChampionshipLogic.minuteCheck(true);
|
||||
GuildFightLogic.minuteCheckForCarFight();
|
||||
} catch (Exception e) {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,12 @@ public class ShanHeSheJiTuStarEvent implements IEvent{
|
|||
private int type;//1:更新章节 2:更新星数
|
||||
private int num;
|
||||
|
||||
public ShanHeSheJiTuStarEvent(int uid, int type, int num) {
|
||||
this.uid = uid;
|
||||
this.type = type;
|
||||
this.num = num;
|
||||
}
|
||||
|
||||
public int getUid() {
|
||||
return uid;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
package com.ljsd.jieling.logic.activity.eventhandler;
|
||||
|
||||
import com.ljsd.jieling.db.redis.RedisKey;
|
||||
import com.ljsd.jieling.logic.activity.IEventHandler;
|
||||
import com.ljsd.jieling.logic.activity.event.ShanHeSheJiTuStarEvent;
|
||||
import com.ljsd.jieling.logic.activity.event.IEvent;
|
||||
import com.ljsd.jieling.logic.activity.event.Poster;
|
||||
import com.ljsd.jieling.logic.rank.RankContext;
|
||||
import com.ljsd.jieling.logic.rank.RankEnum;
|
||||
import com.ljsd.jieling.logic.rank.rankImpl.AbstractRank;
|
||||
|
||||
public class ShanHeSheJiTuEventHandler implements IEventHandler {
|
||||
|
||||
|
|
@ -15,15 +17,22 @@ public class ShanHeSheJiTuEventHandler implements IEventHandler {
|
|||
|
||||
@Override
|
||||
public void onEvent(IEvent event) throws Exception {
|
||||
if(!(event instanceof ShanHeSheJiTuStarEvent))
|
||||
return;
|
||||
ShanHeSheJiTuStarEvent shanHeSheJiTuStarEvent = (ShanHeSheJiTuStarEvent)event;
|
||||
if(shanHeSheJiTuStarEvent.getType() ==1){
|
||||
//更新章节 例如:1-1 1*1000+1 1-2 1*1000+2 2-9 2*1000+9
|
||||
RankContext.getRankEnum(RankEnum.SHAN_HE_SHE_JI_CHAPTER_RANK.getType()).addRank(shanHeSheJiTuStarEvent.getUid(),"",shanHeSheJiTuStarEvent.getNum());
|
||||
}else if(shanHeSheJiTuStarEvent.getType() ==2){
|
||||
if (!(event instanceof ShanHeSheJiTuStarEvent))
|
||||
return;
|
||||
ShanHeSheJiTuStarEvent shanHeSheJiTuStarEvent = (ShanHeSheJiTuStarEvent) event;
|
||||
if (shanHeSheJiTuStarEvent.getType() == 1) {
|
||||
AbstractRank abstractRank = RankContext.getRankEnum(RankEnum.SHAN_HE_SHE_JI_CHAPTER_RANK.getType());
|
||||
double oldValue = abstractRank.getScoreById(shanHeSheJiTuStarEvent.getUid(), RedisKey.SHAN_HE_SHE_JI_CHAPTER_RANK);
|
||||
if (oldValue < shanHeSheJiTuStarEvent.getNum()) {
|
||||
abstractRank.addRank(shanHeSheJiTuStarEvent.getUid(), "", shanHeSheJiTuStarEvent.getNum());
|
||||
}
|
||||
} else if (shanHeSheJiTuStarEvent.getType() == 2) {
|
||||
//更新星数
|
||||
RankContext.getRankEnum(RankEnum.SHAN_HE_SHE_JI_STAR_RANK.getType()).addRank(shanHeSheJiTuStarEvent.getUid(),"",shanHeSheJiTuStarEvent.getNum());
|
||||
AbstractRank abstractRank = RankContext.getRankEnum(RankEnum.SHAN_HE_SHE_JI_STAR_RANK.getType());
|
||||
double oldValue = abstractRank.getScoreById(shanHeSheJiTuStarEvent.getUid(), RedisKey.SHAN_HE_SHE_JI_STAR_RANK);
|
||||
if (oldValue < shanHeSheJiTuStarEvent.getNum()) {
|
||||
abstractRank.addRank(shanHeSheJiTuStarEvent.getUid(), "", shanHeSheJiTuStarEvent.getNum());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,10 +67,17 @@ public class HardStageManager extends MongoBase {
|
|||
chapter.setChapterId(chapterId);
|
||||
chapter.init(this.getRootId(), getMongoKey() + ".chapterMap." + chapter.getChapterId());
|
||||
List<SHardStageReward> reward = SHardStageReward.getChapterConfigMap().get(chapterId);
|
||||
for (SHardStageReward config : reward) {
|
||||
chapter.getRewardMap().put(config.getStarReward(), Boolean.FALSE);
|
||||
chapter.updateRewardMap();
|
||||
if(reward != null){
|
||||
reward.stream().forEach(n->{
|
||||
chapter.getRewardMap().put(n.getId(), Boolean.FALSE);
|
||||
chapter.updateRewardMap();
|
||||
});
|
||||
}
|
||||
|
||||
/* for (SHardStageReward config : reward) {
|
||||
chapter.getRewardMap().put(config.getId(), Boolean.FALSE);
|
||||
chapter.updateRewardMap();
|
||||
}*/
|
||||
setCurChapter(chapterId);
|
||||
return chapter;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ public class HardStageChapter extends MongoBase {
|
|||
|
||||
public void addStars(int stars) {
|
||||
this.stars += stars;
|
||||
updateString("stars", this.stars);
|
||||
//updateString("stars", this.stars);
|
||||
}
|
||||
|
||||
public Map<Integer, Boolean> getRewardMap() {
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import rpc.protocols.PlayerInfoProto;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class HardStageLogic {
|
||||
|
||||
|
|
@ -36,6 +37,7 @@ public class HardStageLogic {
|
|||
public static CommonProto.HardStageInfo.Builder getInfo(User user) throws Exception {
|
||||
Map<Integer, HardStageChapter> map = user.getHardStageManager().getChapterMap(user);
|
||||
CommonProto.HardStageInfo.Builder builder = CommonProto.HardStageInfo.newBuilder();
|
||||
|
||||
for (Map.Entry<Integer, HardStageChapter> entry : map.entrySet()) {
|
||||
CommonProto.HardStageChapter.Builder chapterBuilder = CommonProto.HardStageChapter.newBuilder();
|
||||
for (HardStageNode node : entry.getValue().getNodeList()) {
|
||||
|
|
@ -52,6 +54,7 @@ public class HardStageLogic {
|
|||
CommonProto.HardStageChapterReward.Builder rewardBuilder = CommonProto.HardStageChapterReward.newBuilder();
|
||||
rewardBuilder.setId(entry1.getKey());
|
||||
rewardBuilder.setState(entry1.getValue() ? 1 : 0);
|
||||
chapterBuilder.addReward(rewardBuilder);
|
||||
}
|
||||
builder.addChapter(chapterBuilder);
|
||||
}
|
||||
|
|
@ -68,16 +71,16 @@ public class HardStageLogic {
|
|||
/**
|
||||
* 领取章节奖励
|
||||
*/
|
||||
public static void getChapterReward(User user, SHardStageReward rewardStage, List<CommonProto.Drop.Builder> list) throws Exception {
|
||||
public static void getChapterReward(User user, SHardStageReward rewardStage, List<Integer> list) throws Exception {
|
||||
HardStageChapter chapter = user.getHardStageManager().getChapterMap(user).get(rewardStage.getChapter());
|
||||
if (chapter.getStars() < rewardStage.getStar()) {
|
||||
LOGGER.error("章节星星数量不足");
|
||||
return;
|
||||
}
|
||||
if (!chapter.getRewardMap().get(rewardStage.getStarReward())) {
|
||||
chapter.getRewardMap().put(rewardStage.getStarReward(), true);
|
||||
if (!chapter.getRewardMap().get(rewardStage.getId())) {
|
||||
chapter.getRewardMap().put(rewardStage.getId(), true);
|
||||
chapter.updateRewardMap();
|
||||
list.add(getReward(user, rewardStage.getStarReward()));
|
||||
list.add(rewardStage.getStarReward());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -91,31 +94,38 @@ public class HardStageLogic {
|
|||
/**
|
||||
* 判断奖励
|
||||
*/
|
||||
public static int passReward(User user, HardStageNode node, int[] num, List<CommonProto.Drop.Builder> dropList) throws Exception {
|
||||
public static int passReward(User user, HardStageNode node, int[] num, List<Integer> dropList) throws Exception {
|
||||
int addStar = 0;
|
||||
SHardStage config = SHardStage.getConfigMap().get(node.getId());
|
||||
if (num[0] == 1) {//第一星
|
||||
int rewardId = config.getReward1()[0];
|
||||
if (addDropAndStar(node, dropList, rewardId, user)) {
|
||||
node.setState(node.getState() + 4);
|
||||
addStar += 4;
|
||||
}
|
||||
}
|
||||
if (num[1] == 1) {//第二星
|
||||
int rewardId = config.getReward1()[1];
|
||||
if (addDropAndStar(node, dropList, rewardId, user)) {
|
||||
node.setState(node.getState() + 2);
|
||||
addStar += 2;
|
||||
}
|
||||
}
|
||||
if (num[2] == 1) {//第三星
|
||||
int rewardId = config.getReward1()[2];
|
||||
if (addDropAndStar(node, dropList, rewardId, user)) {
|
||||
node.setState(node.getState() + 1);
|
||||
addStar++;
|
||||
}
|
||||
}
|
||||
int currentStar = node.getState();
|
||||
|
||||
//当前战斗的星星状态
|
||||
String currenState = Arrays.toString(num);
|
||||
//已存在的星星状态
|
||||
StringBuffer existState = reformatBinary(currentStar);
|
||||
|
||||
for (int i = 2; i >= 0; i--) {
|
||||
if (currenState.charAt(i) == '1' && existState.charAt(i) == '0') {
|
||||
double increase = Math.pow(2, (2 - i));
|
||||
if (increase > 0) {
|
||||
int rewardId = 0;
|
||||
if (i == 2) {
|
||||
//第三星
|
||||
rewardId = config.getReward1()[2];
|
||||
} else if (i == 1) {
|
||||
//第二星
|
||||
rewardId = config.getReward1()[1];
|
||||
} else if (i == 0) {
|
||||
//第一星
|
||||
rewardId = config.getReward1()[0];
|
||||
}
|
||||
if (addDropAndStar(node, dropList, rewardId, user)) {
|
||||
node.setState(currentStar + (int) increase);
|
||||
addStar += increase;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return addStar;
|
||||
}
|
||||
|
||||
|
|
@ -173,9 +183,9 @@ public class HardStageLogic {
|
|||
/**
|
||||
* 通过节点
|
||||
*/
|
||||
public static void passNode(ISession iSession, SHardStage nodeConfig, int[] resultNum, List<CommonProto.Drop.Builder> dropList) throws Exception {
|
||||
public static void passNode(ISession iSession, SHardStage nodeConfig, int[] resultNum, List<Integer> dropList) throws Exception {
|
||||
User user = UserManager.getUser(iSession.getUid());
|
||||
if(user == null){
|
||||
if (user == null) {
|
||||
return;
|
||||
}
|
||||
Map<Integer, HardStageChapter> chapterMap = user.getHardStageManager().getChapterMap(user);
|
||||
|
|
@ -183,6 +193,7 @@ public class HardStageLogic {
|
|||
if (node.getType() == 1) {//大节点
|
||||
int star = passReward(user, node, resultNum, dropList);//星级通关奖励
|
||||
chapterMap.get(nodeConfig.getChapter()).addStars(star);
|
||||
user.getHardStageManager().updateString("chapterMap." + nodeConfig.getChapter(), chapterMap.get(nodeConfig.getChapter()));
|
||||
if (!node.isHasPass()) {
|
||||
node.setHasPass(true);
|
||||
dropList.addAll(getFirstRewards(user, nodeConfig));//关卡通过奖励
|
||||
|
|
@ -193,9 +204,13 @@ public class HardStageLogic {
|
|||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
if (node.isHasPass()) {
|
||||
return;
|
||||
} else if (node.getType() == 3) {
|
||||
if (!node.isHasPass()) {
|
||||
node.setHasPass(true);
|
||||
node.setState(1);
|
||||
dropList.addAll(getFirstRewards(user, nodeConfig));//关卡通过奖励
|
||||
user.getHardStageManager().updateString("chapterMap." + nodeConfig.getChapter(), chapterMap.get(nodeConfig.getChapter()));
|
||||
//return;
|
||||
}
|
||||
//node.setHasPass(true);
|
||||
//dropList.addAll(getFirstRewards(user,nodeConfig));
|
||||
|
|
@ -211,10 +226,10 @@ public class HardStageLogic {
|
|||
/**
|
||||
* 首通奖励
|
||||
*/
|
||||
public static List<CommonProto.Drop.Builder> getFirstRewards(User user, SHardStage nodeConfig) throws Exception {
|
||||
List<CommonProto.Drop.Builder> dropList = new ArrayList<>();
|
||||
for (int rewardId : nodeConfig.getPassReward()) {
|
||||
dropList.add(getReward(user, rewardId));
|
||||
public static List<Integer> getFirstRewards(User user, SHardStage nodeConfig) throws Exception {
|
||||
List<Integer> dropList = new ArrayList<Integer>();
|
||||
for (int rewardGroupId : nodeConfig.getPassReward()) {
|
||||
dropList.add(rewardGroupId);
|
||||
}
|
||||
return dropList;
|
||||
}
|
||||
|
|
@ -223,17 +238,15 @@ public class HardStageLogic {
|
|||
* 获取奖励
|
||||
*/
|
||||
public static CommonProto.Drop.Builder getReward(User user, int rewardId) throws Exception {
|
||||
SRewardGroup rewardGroup = SRewardGroup.getsRewardItemMap().get(rewardId);
|
||||
//ItemMap itemObj = new ItemMap();
|
||||
int[] dropList = rewardGroup.getRewardItem();
|
||||
CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropList, 1, 0, BIReason.HARD_STAGE_GET);
|
||||
CommonProto.Drop.Builder drop = ItemUtil.drop(user, new int[]{rewardId}, 1, 0, BIReason.HARD_STAGE_GET);
|
||||
return drop;
|
||||
}
|
||||
|
||||
private static boolean addDropAndStar(HardStageNode node, List<CommonProto.Drop.Builder> dropList, int rewardId, User user) throws Exception {
|
||||
if (node.getRewardMap().get(rewardId)) {
|
||||
dropList.add(getReward(user, rewardId));
|
||||
node.getRewardMap().put(rewardId, true);
|
||||
private static boolean addDropAndStar(HardStageNode node, List<Integer> dropList, int rewardGroupId, User user) throws Exception {
|
||||
if (!node.getRewardMap().get(rewardGroupId)) {
|
||||
dropList.add(rewardGroupId);
|
||||
node.getRewardMap().put(rewardGroupId, true);
|
||||
node.updateRewardMap();
|
||||
return true;
|
||||
}
|
||||
|
|
@ -264,4 +277,31 @@ public class HardStageLogic {
|
|||
}
|
||||
sendHardStageIndication(user);
|
||||
}
|
||||
|
||||
/**
|
||||
* int 转 3位二进制字符串
|
||||
*/
|
||||
public static StringBuffer reformatBinary(int num) {
|
||||
String a1 = Integer.toBinaryString(num);
|
||||
StringBuffer sb = new StringBuffer(a1);
|
||||
int size = 3 - sb.length();
|
||||
if (size > 0) {
|
||||
for (int i = 0; i < size; i++) {
|
||||
sb.insert(0, 0);
|
||||
}
|
||||
}
|
||||
return sb;
|
||||
}
|
||||
|
||||
/**
|
||||
* 山河社稷图星星总数
|
||||
*/
|
||||
public static int getHardStageStarsSum(User user) throws Exception {
|
||||
Map<Integer, HardStageChapter> map = user.getHardStageManager().getChapterMap(user);
|
||||
if (map.values() != null) {
|
||||
int starSum = map.values().stream().mapToInt(n -> n.getStars()).sum();
|
||||
return starSum;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,8 +41,8 @@ public enum RankEnum {
|
|||
|
||||
GUILD_SHEJI_SCORE_RANK(27,RedisKey.GUILD_SHEJI_SCORE_RANK,GuildSheJiScoreRank::new,false),//param1:公会社稷贡献 param2:无 param3:无
|
||||
WARLD_DIS_ARENA_RANK(28,RedisKey.WARLD_DIS_ARENA_RANK,ArenaRank::new,true),//世界服排行
|
||||
SHAN_HE_SHE_JI_CHAPTER_RANK(29,RedisKey.SHAN_HE_SHE_JI_CHAPTER_RANK,ShanHeSheJiTuChapterRank::new,false),
|
||||
SHAN_HE_SHE_JI_STAR_RANK(30,RedisKey.SHAN_HE_SHE_JI_STAR_RANK,ShanHeSheJiTuStarRank::new,false),
|
||||
SHAN_HE_SHE_JI_CHAPTER_RANK(29,RedisKey.SHAN_HE_SHE_JI_CHAPTER_RANK,ShanHeSheJiTuChapterRank::new,false),//山河社稷章节排行榜
|
||||
SHAN_HE_SHE_JI_STAR_RANK(30,RedisKey.SHAN_HE_SHE_JI_STAR_RANK,ShanHeSheJiTuStarRank::new,false),//山河社稷星星排行榜
|
||||
|
||||
;
|
||||
|
||||
|
|
|
|||
|
|
@ -43,12 +43,15 @@ public class SHardStage implements BaseConfig {
|
|||
|
||||
private static Map<Integer, SHardStage> configMap;
|
||||
private static Map<Integer, List<SHardStage>> preConfigMap;
|
||||
private static Map<Integer, Map<Integer,SHardStage>> chapterNodeMapConfig;//<章节id,<节点id,数据>>
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void init() throws Exception {
|
||||
Map<Integer, SHardStage> tempConfig = STableManager.getConfig(SHardStage.class);
|
||||
Map<Integer, List<SHardStage>> tempPreConfigMap = new HashMap<>();
|
||||
Map<Integer, Map<Integer,SHardStage>> chapterNodeMap = new HashMap<Integer, Map<Integer,SHardStage>>();
|
||||
for (SHardStage stage : tempConfig.values()) {
|
||||
if (stage.getNextLevel() > 0) {
|
||||
if (tempPreConfigMap.containsKey(stage.getNextLevel())) {
|
||||
|
|
@ -59,10 +62,15 @@ public class SHardStage implements BaseConfig {
|
|||
tempPreConfigMap.put(stage.getNextLevel(), list);
|
||||
}
|
||||
}
|
||||
|
||||
Map<Integer,SHardStage> chapterMap = chapterNodeMap.computeIfAbsent(stage.getChapter(),k-> new HashMap<Integer,SHardStage>());
|
||||
chapterMap.computeIfAbsent(stage.getSection(),k ->stage);
|
||||
|
||||
}
|
||||
if (null == configMap) {
|
||||
configMap = tempConfig;
|
||||
preConfigMap = tempPreConfigMap;
|
||||
chapterNodeMapConfig = chapterNodeMap;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -139,4 +147,13 @@ public class SHardStage implements BaseConfig {
|
|||
public static List<SHardStage> getPreList(int id) {
|
||||
return preConfigMap.get(id);
|
||||
}
|
||||
|
||||
public static int getStageIdByChapterAndSection(int chapter,int section){
|
||||
if(chapterNodeMapConfig.containsKey(chapter)){
|
||||
if(chapterNodeMapConfig.get(chapter).containsKey(section)){
|
||||
return chapterNodeMapConfig.get(chapter).get(section).getId();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue