山河社稷图

back_recharge
xuexinpeng 2021-05-14 15:36:50 +08:00
parent 972b6dde78
commit a8e76d24db
20 changed files with 423 additions and 129 deletions

View File

@ -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,

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 --麻痹

View File

@ -166,6 +166,7 @@ BattleEventName = {
DisposeRoleCtrl_noheal = indexAdd(),--处理角色禁疗
RoleBeExile = indexAdd(),--角色被放逐
RoleExileEnd = indexAdd(),--角色放逐结束
RoleAddBuffFail = indexAdd(),--角色添加buff失败
}
BattleMaxFrame = 1000000

View File

@ -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
--

View File

@ -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

View File

@ -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);
}
}

View File

@ -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);
//更新消息

View File

@ -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) {

View File

@ -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;
}

View File

@ -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());
}
}
}
}

View File

@ -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;
}

View File

@ -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() {

View File

@ -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;
}
}

View File

@ -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),//山河社稷星星排行榜
;

View File

@ -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;
}
}