back_recharge
jiahuiwen 2019-04-16 19:31:22 +08:00
commit 1169dffab5
34 changed files with 460 additions and 868 deletions

View File

@ -1,7 +1,7 @@
Id OpenLevel RecommendForce RecommendHeroIds MinNum BaseRewardGroup RandomRewardGroup RecommendRewardGroup
int int int mut,int#int,1 int mut,int#int,1 mut,int#int,1 mut,int#int,2
1 102023 1000 2#1#2 5 101 111 4#121#6#122#8#123|4#124#6#125#8#126
2 104030 2000 2#1#2 5 102 112 4#121#6#122#8#123|4#124#6#125#8#126
3 109026 3000 2#1#2 5 103 113 4#121#6#122#8#123|4#124#6#125#8#126
4 102001 4000 2#1#2 5 104 114 4#121#6#122#8#123|4#124#6#125#8#126
5 102001 5000 2#1#2 5 105 115 4#121#6#122#8#123|4#124#6#125#8#126
Id OpenLevel MaxNum BaseRewardGroup RandomRewardGroup NumIncome LeaveBonus
int int int mut,int#int,1 mut,int#int,1 mut,float#float,2 int
1 10 5 101 111 1#0.2|2#0.4|3#0.6|4#0.8|5#1 8
2 20 5 102 112 1#0.2|2#0.4|3#0.6|4#0.8|5#1 8
3 30 5 103 113 1#0.2|2#0.4|3#0.6|4#0.8|5#1 8
4 40 5 104 114 1#0.2|2#0.4|3#0.6|4#0.8|5#1 8
5 50 5 105 115 1#0.2|2#0.4|3#0.6|4#0.8|5#1 8

View File

@ -1,7 +0,0 @@
Id Weight Pool
int int int
10001 100 1
10002 100 1
10003 100 1
10004 100 1
10005 100 2

View File

@ -1,7 +0,0 @@
Id ConsumeGemRatio BaseRewardRatio RandomRewardRatio PerMapMaxHour HourRewardRatio
int mut,int#int,1 mut,float#float,2 mut,float#float,2 int mut,float#float,1
1 0#0#50#0 0.7#0.4|0.8#0.6|0.9#0.8|1#1|1.1#1.1|1.2#1.2|1.3#1.3|1.4#1.4|1.5#1.5 0.7#0.4|0.8#0.6|0.9#0.8|1#1|1.1#1.1|1.2#1.2|1.3#1.3|1.4#1.4|1.5#1.5 8 0#0#1#0
2 0#0#55#0 0.7#0.4|0.8#0.6|0.9#0.8|1#1|1.1#1.1|1.2#1.2|1.3#1.3|1.4#1.4|1.5#1.5 0.7#0.4|0.8#0.6|0.9#0.8|1#1|1.1#1.1|1.2#1.2|1.3#1.3|1.4#1.4|1.5#1.5 8 0#0#1#0
3 0#0#60#0 0.7#0.4|0.8#0.6|0.9#0.8|1#1|1.1#1.1|1.2#1.2|1.3#1.3|1.4#1.4|1.5#1.5 0.7#0.4|0.8#0.6|0.9#0.8|1#1|1.1#1.1|1.2#1.2|1.3#1.3|1.4#1.4|1.5#1.5 8 0#0#1#0
4 0#0#70#0 0.7#0.4|0.8#0.6|0.9#0.8|1#1|1.1#1.1|1.2#1.2|1.3#1.3|1.4#1.4|1.5#1.5 0.7#0.4|0.8#0.6|0.9#0.8|1#1|1.1#1.1|1.2#1.2|1.3#1.3|1.4#1.4|1.5#1.5 8 0#0#1#0
5 0#0#80#0 0.7#0.4|0.8#0.6|0.9#0.8|1#1|1.1#1.1|1.2#1.2|1.3#1.3|1.4#1.4|1.5#1.5 0.7#0.4|0.8#0.6|0.9#0.8|1#1|1.1#1.1|1.2#1.2|1.3#1.3|1.4#1.4|1.5#1.5 8 0#0#1#0

View File

@ -1,3 +1,3 @@
Id BornItem SpeedFormula InitialEnergy EnergyRecoverSpeed ActionPowerRormula Speed HeroNumlimit EquipNumlimit WorldTalking BornPosition
int mut,int#int,2 mut,float#float,1 int mut,int#int,1 mut,int#int,1 mut,int#int,1 int int int mut,int#int,1
1 10008#1|10013#1|10023#1|1503#8 0#0#0.3164#0 100 60#1 0#0#1#0 70#100 999 9999 1 08#19
1 10008#1|10013#1|10023#1|1503#8|2#60 0#0#0.3164#0 100 60#1 0#0#1#0 70#100 999 9999 1 08#19

View File

@ -10,14 +10,14 @@ require("Modules.Battle.Logic.Misc.BattleObjectPool")
require("Modules.Battle.Logic.Base.BattleEvent")
require("Modules.Battle.Logic.Base.Random")
require("Modules.Battle.Logic.BattleLogic")
require("Modules.Battle.Logic.RoleLogic")
require("Modules.Battle.Logic.Base.RoleData")
require("Modules.Battle.Logic.Base.Buff")
require("Modules.Battle.Logic.Base.Skill")
require("Modules.Battle.Logic.Base.Passivity")
require("Modules.Battle.Logic.BattleLogic")
require("Modules.Battle.Logic.RoleLogic")
local BattleMain = {}
local BattleLogic = BattleLogic
local Random = Random
@ -123,7 +123,7 @@ function BattleMain.Execute(seed, fightData, optionData)
_fightData = fightData
_optionData = optionData
print(PrintTable(fightData))
--print(PrintTable(fightData))
--该开关用于输出战斗过程中的日志,用于验证前后端是否出现战斗不同步
BattleLogic.IsOpenBattleRecord = false

View File

@ -18,6 +18,10 @@ local putBuff = function(buff)
end
end
local buffListPool = BattleObjectPool.New(function ()
return BattleList.New()
end)
function Buff:New()
local o = {}
setmetatable(o, self)
@ -51,13 +55,24 @@ function BuffManager.New()
return instance
end
function BuffManager:Init(owner)
self.buffQueue:Clear()
function BuffManager:Init()
for i=1, self.buffQueue.size do
buffListPool:Put(self.buffQueue:Dequeue())
end
local list
for i = 1, self.buffList.size do
list = self.buffList.vList[i]
for j=1, list.size do
putBuff(list.buffer[j])
end
list:Clear()
buffListPool:Put(list)
end
self.buffList:Clear()
self.owner = owner
end
function BuffManager:AddBuff(buff)
function BuffManager:AddBuff(target, buff)
buff.target = target
self.buffQueue:Enqueue(buff)
if not buff.exCtrlTime then
buff.exCtrlTime = 0
@ -76,12 +91,13 @@ function BuffManager:AddBuff(buff)
buff.frameInterval = floor(buff.interval * BattleLogic.GameFrameRate)
end
function BuffManager:HasBuff(type, checkFunc)
local v
function BuffManager:HasBuff(target, type, checkFunc)
local v, buff
for i=1, self.buffList:Count() do
v = self.buffList.vList[i]
if v.size > 0 then
if v.buffer[1].type == type and (not checkFunc or (checkFunc and checkFunc(v.buffer[1]))) then
buff = v.buffer[1]
if buff.target == target and buff.type == type and (not checkFunc or (checkFunc and checkFunc(buff))) then
return true
end
end
@ -89,25 +105,23 @@ function BuffManager:HasBuff(type, checkFunc)
return false
end
function BuffManager:ClearBuff(func)
function BuffManager:ClearBuff(target, func)
local list, buff, idx
for i = 1, self.buffList.size do
local k = self.buffList.kList[i]
local v = self.buffList.vList[i]
if v.size > 0 then
local removeCount = 0
local idx = 1
while idx <= v.size do
if func(v.buffer[idx]) then
putBuff:Put(v.buffer[idx])
v:Remove(idx)
removeCount = removeCount + 1
list = self.buffList.vList[i]
if list.size > 0 then
idx = 1
while idx <= list.size do
buff = list.buffer[idx]
if buff.target == target and (not func or (func and func(buff))) then
buff:OnEnd()
buff.target.Event:DispatchEvent(BattleEventName.BuffEnd, buff)
putBuff(buff)
list:Remove(idx)
else
idx = idx + 1
end
end
if removeCount > 0 then
self.owner.Event:DispatchEvent(BattleEventName.BuffCountChange, k, v.size)
end
end
end
end
@ -122,42 +136,34 @@ end
function BuffManager:Update()
for i=1, self.buffQueue.size do
local buff = self.buffQueue:Dequeue()
if not buff.caster then
--logErrorTrace("buff's caster can't be nil!")
return
end
local buffList
if not self.buffList.kvList[buff.id] then
buffList = BattleList.New()
buffList = buffListPool:Get()
self.buffList:Add(buff.id, buffList)
else
buffList = self.buffList.kvList[buff.id]
end
if buff.cover and buffList.size > 0 then
if buffList.buffer[1]:OnCover(buff) then --判定该效果能否被覆盖
buffList.buffer[1]:OnEnd(self.owner)
self.owner.Event:DispatchEvent(BattleEventName.BuffEnd, buffList.buffer[1])
buffList.buffer[1]:OnEnd()
buff.target.Event:DispatchEvent(BattleEventName.BuffEnd, buffList.buffer[1])
buffList.buffer[1] = buff
buff.target = self.owner
buff:OnStart()
self.owner.Event:DispatchEvent(BattleEventName.BuffStart, buff)
self.owner.Event:DispatchEvent(BattleEventName.BuffCover, buff)
buff.target.Event:DispatchEvent(BattleEventName.BuffStart, buff)
buff.target.Event:DispatchEvent(BattleEventName.BuffCover, buff)
end
else
if buff.maxCount == 0 or buffList.size < buff.maxCount then --限制相同效果的数量为0则不限制
buffList:Add(buff)
buff.target = self.owner
buff:OnStart()
self.owner.Event:DispatchEvent(BattleEventName.BuffStart, buff)
self.owner.Event:DispatchEvent(BattleEventName.BuffCountChange, buff.id, buffList.size)
buff.target.Event:DispatchEvent(BattleEventName.BuffStart, buff)
end
end
end
local v
for i = 1, self.buffList.size do
local k = self.buffList.kList[i]
local v = self.buffList.vList[i]
v = self.buffList.vList[i]
if v.size > 0 then
local removeCount = 0
local idx = 1
local buff
while idx <= v.size do
@ -193,16 +199,12 @@ function BuffManager:Update()
if buff.disperse then
buff:OnEnd()
buff.target.Event:DispatchEvent(BattleEventName.BuffEnd, buff)
putBuff(v.buffer[idx])
putBuff(buff)
v:Remove(idx)
removeCount = removeCount + 1
else
idx = idx + 1
end
end
if removeCount > 0 then
self.owner.Event:DispatchEvent(BattleEventName.BuffCountChange, k, v.size)
end
end
end
end

View File

@ -1,4 +1,6 @@
local floor = math.floor
local min = math.min
local max = math.max
--local RoleDataName = RoleDataName
--local BattleLogic = BattleLogic
--local BattleUtil = BattleUtil
@ -119,7 +121,7 @@ local effectList = {
end
end,
--[b]%改变[c]下次重击技能CD[a]秒
--a[float],b[float]
--a[float],b[float],c[改变类型]
[8] = function(caster, target, args, interval)
local f1 = args[1]
local f2 = args[2] * (1 + caster:GetRoleData(RoleDataName.Hit) / (1 + target:GetRoleData(RoleDataName.Dodge)))
@ -131,13 +133,13 @@ local effectList = {
target.skill.sp = target.skill.spPass
else
if ct == 1 then --加算
target.skill.sp = target.skill.sp - floor(f1 * BattleLogic.GameFrameRate)
target.skill.sp = max(target.skill.sp - floor(f1 * BattleLogic.GameFrameRate), 0)
elseif ct == 2 then --乘加算(百分比属性加算)
target.skill.sp = floor(target.skill.sp * (1 - f1))
target.skill.sp = max(target.skill.sp - floor(target.skill.spPass * f1),0)
elseif ct == 3 then --减算
target.skill.sp = target.skill.sp + floor(f1 * BattleLogic.GameFrameRate)
target.skill.sp = min(target.skill.sp + floor(f1 * BattleLogic.GameFrameRate), target.skill.spPass)
elseif ct == 4 then --乘减算(百分比属性减算)
target.skill.sp = floor(target.skill.sp * (1 + f1))
target.skill.sp = min(target.skill.sp + floor(target.skill.spPass * f1), target.skill.spPass)
end
end
end
@ -198,8 +200,8 @@ local effectList = {
target:AddBuff(Buff.Create(caster, BuffName.DOT, f2, 1, 0, dt, f1))
end)
end,
--造成[c],每秒造成[d]的[e]的伤害,持续[f]秒
--c[持续伤害状态].d[float],e[伤害类型],f[int]
--造成[a],每秒造成[b]的[c]的伤害,持续[d]秒
--a[持续伤害状态].b[float],c[伤害类型],d[int]
[13] = function(caster, target, args, interval)
local d1 = args[1]
local f1 = args[2]
@ -223,7 +225,7 @@ local effectList = {
end
BattleLogic.WaitForTrigger(interval, function ()
local layer
if target.BuffMgr:HasBuff(BuffName.Brand, function (buff)
if BattleLogic.BuffMgr:HasBuff(target, BuffName.Brand, function (buff)
local b = buff.flag == rid
if b then
layer = buff.layer
@ -354,7 +356,7 @@ local effectList = {
BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, target, interval)
end
BattleLogic.WaitForTrigger(interval, function ()
if target.BuffMgr:HasBuff(BuffName.Control, function (buff) return i1 == 0 or buff.ctrlType == i1 end) then
if BattleLogic.BuffMgr:HasBuff(target, BuffName.Control, function (buff) return i1 == 0 or buff.ctrlType == i1 end) then
f1 = f1 + f2
end
BattleUtil.CalDamage(caster, target, dt, f1)
@ -371,7 +373,7 @@ local effectList = {
local f3 = args[6]
BattleLogic.WaitForTrigger(interval, function ()
BattleUtil.CalDamage(caster, target, dt, f1)
if target.BuffMgr:HasBuff(BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then
if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then
BattleUtil.RandomAction(f2, function ()
target:AddBuff(Buff.Create(caster, BuffName.Control, f3, ct))
end)
@ -386,7 +388,7 @@ local effectList = {
local dot = args[3]
local f2 = args[4]
BattleLogic.WaitForTrigger(interval, function ()
if target.BuffMgr:HasBuff(BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then
if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then
f1 = f1 + f2
end
BattleUtil.CalDamage(caster, target, dt, f1)
@ -404,7 +406,7 @@ local effectList = {
BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, target, interval)
end
BattleLogic.WaitForTrigger(interval, function ()
if target.BuffMgr:HasBuff(BuffName.HOT, function (buff) return true end) then
if BattleLogic.BuffMgr:HasBuff(target, BuffName.HOT, function (buff) return true end) then
f1 = f1 + f2
end
BattleUtil.CalDamage(caster, target, dt, f1)
@ -430,7 +432,7 @@ local effectList = {
BattleLogic.WaitForTrigger(interval, function ()
local func = function(damage)
if target.BuffMgr:HasBuff(BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then
if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then
damage = damage + floor(damage * f1)
end
return damage
@ -479,7 +481,7 @@ local effectList = {
BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, target, interval)
end
BattleLogic.WaitForTrigger(interval, function ()
if target.BuffMgr:HasBuff(BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then
if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then
f1 = f1 + f2
end
BattleUtil.CalDamage(caster, target, dt, f1)
@ -524,7 +526,7 @@ local effectList = {
BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, target, interval)
end
BattleLogic.WaitForTrigger(interval, function ()
if target.BuffMgr:HasBuff(BuffName.Control, function (buff) return ct == 0 or buff.ctrlType == ct end) then
if BattleLogic.BuffMgr:HasBuff(target, BuffName.Control, function (buff) return ct == 0 or buff.ctrlType == ct end) then
BattleUtil.CalDamage(caster, target, dt, f1, f2)
else
BattleUtil.CalDamage(caster, target, dt, f1)
@ -543,6 +545,18 @@ local effectList = {
end)
end)
end,
--[b]%改变[d]重击技能CD[a]秒 ,持续[c]秒 0代表清除所有
--a[float],b[float],c[改变类型]
[32] = function(caster, target, args, interval)
local f1 = args[1] * (1 + caster:GetRoleData(RoleDataName.Hit) / (1 + target:GetRoleData(RoleDataName.Dodge)))
local ib1 = args[2]
local f2 = args[3]
BattleLogic.WaitForTrigger(interval, function ()
BattleUtil.RandomAction(f1, function ()
target:AddBuff(Buff.Create(caster, BuffName.Immune, f2, ib1))
end)
end)
end,
}
return effectList

View File

@ -200,12 +200,6 @@ function Skill:ResetCD()
BattleLogic.SetAggro(self.owner, 0)
end
local function takeEffect(type, caster, target, args, interval)
effect[type](caster, target, args, interval)
if BattleLogic.IsOpenBattleRecord then
BattleLogic.RecordEffect(caster, target, type, args, interval)
end
end
function Skill:Cast()
for i=1, self.effectList.size do
local effectGroup = self.effectList.buffer[i]
@ -227,7 +221,10 @@ function Skill:Cast()
for j=1, #arr do
for k=1, #effectGroup[3] do
local v = effectGroup[3][k]
takeEffect(v[1], self.owner, arr[j], v[2], duration)
effect[v[1]](self.owner, arr[j], v[2], duration)
--if BattleLogic.IsOpenBattleRecord then
-- BattleLogic.RecordEffect(v[1], self.owner, arr[j], v[2], duration)
--end
end
end
elseif chooseId == 20000 then --敌方aoe
@ -235,14 +232,20 @@ function Skill:Cast()
for j=1, #arr do
for k=1, #effectGroup[3] do
local v = effectGroup[3][k]
takeEffect(v[1], self.owner, arr[j], v[2], duration)
effect[v[1]](self.owner, arr[j], v[2], duration)
--if BattleLogic.IsOpenBattleRecord then
-- BattleLogic.RecordEffect(v[1], self.owner, arr[j], v[2], duration)
--end
end
end
elseif nn == 1 or nn == 3 then
for j=1, #arr do
for k=1, #effectGroup[3] do
local v = effectGroup[3][k]
takeEffect(v[1], self.owner, arr[j], v[2], duration)
effect[v[1]](self.owner, arr[j], v[2], duration)
--if BattleLogic.IsOpenBattleRecord then
-- BattleLogic.RecordEffect(v[1], self.owner, arr[j], v[2], duration)
--end
end
end
else
@ -262,7 +265,10 @@ function Skill:Cast()
r = arr[i]
for k=1, #effectGroup[3] do
local v = effectGroup[3][k]
takeEffect(v[1], self.owner, r, v[2], cd)
effect[v[1]](self.owner, r, v[2], cd)
--if BattleLogic.IsOpenBattleRecord then
-- BattleLogic.RecordEffect(v[1], self.owner, r, v[2], cd)
--end
end
return
end
@ -275,7 +281,10 @@ function Skill:Cast()
self.choosedList:Add(r)
for k=1, #effectGroup[3] do
local v = effectGroup[3][k]
takeEffect(v[1], self.owner, r, v[2], cd)
effect[v[1]](self.owner, r, v[2], cd)
--if BattleLogic.IsOpenBattleRecord then
-- BattleLogic.RecordEffect(v[1], self.owner, r, v[2], cd)
--end
end
end)
end

View File

@ -21,6 +21,7 @@ local enemySkillUsable
BattleLogic.IsEnd = false
BattleLogic.Result = -1
BattleLogic.Event = BattleEvent.New()
BattleLogic.BuffMgr = BuffManager.New()
local playerTeamDummyRole = {camp = 0, Event = BattleLogic.Event, isTeam = true}
local enemyTeamDummyRole = {camp = 0, Event = BattleLogic.Event, isTeam = true}
@ -88,6 +89,7 @@ function BattleLogic.Init(data, optionData)
enemySkillUsable = true
BattleLogic.Event:ClearEvent()
BattleLogic.BuffMgr:Init()
BattleLogic.IsEnd = false
BattleLogic.Result = -1
end
@ -383,6 +385,8 @@ function BattleLogic.Update()
enemyMP = 0
end
BattleLogic.BuffMgr:Update()
bMyAllDead = true
bEnemyAllDead = true
for i=1, objList.size do

View File

@ -9,6 +9,14 @@ function DOT:SetData(...)
self.damagePro, --1 物理 2 魔法
self.damageFactor = ... --伤害系数
self.isDeBuff = true
--if self.damageType == 2 then
-- self.cover = true
-- self.layer = 1
--else
-- self.cover = false
-- self.layer = nil
--end
end
--初始化后调用一次
@ -31,6 +39,10 @@ end
--只有当cover字段为true时触发返回true则被新效果覆盖
function DOT:OnCover(newBuff)
--log("DOT:OnCover")
--if self.damageType == 2 then
-- newBuff.layer = self.layer + 1
-- newBuff.damageFactor =
--end
return true
end

View File

@ -82,8 +82,12 @@ function BattleUtil.ApplyDamage(atkRole, defRole, damage, bCrit)
if defRole:GetRoleData(RoleDataName.Hp) <= 0 then
defRole.isDead = true
BattleLogic.BuffMgr:ClearBuff(defRole)
defRole.Event:DispatchEvent(BattleEventName.RoleDead)
BattleLogic.Event:DispatchEvent(BattleEventName.BattleRoleDead, defRole)
if defRole.camp == 1 then
BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, BattleLogic.GetAggro(0), 0.3)
end
end
end
return finalDmg

View File

@ -17,7 +17,7 @@ function RoleLogic.New()
shield=BattleList.New(),
exCalDmgList=BattleList.New(),
buffFilter=BattleList.New(),
BuffMgr=BuffManager.New(),Event=BattleEvent:New(),passiveList=0,isDead=false,Auto=false,IsDebug=false,enable=false}
Event=BattleEvent:New(),passiveList=0,isDead=false,Auto=false,IsDebug=false,enable=false}
setmetatable(instance, RoleLogic)
return instance
end
@ -36,7 +36,6 @@ function RoleLogic:Init(uid, data)
self.exCalDmgList:Clear() --额外计算伤害列表
self.buffFilter:Clear() --buff屏蔽列表
self.BuffMgr:Init(self)
self.Event:ClearEvent()
self.passiveList = {}
@ -71,12 +70,15 @@ function RoleLogic:GetRoleData(property)
end
function RoleLogic:AddBuff(buff)
if self.isDead then
return
end
for i=1, self.buffFilter.size do
if self.buffFilter.buffer[i](buff) then
return
end
end
self.BuffMgr:AddBuff(buff)
BattleLogic.BuffMgr:AddBuff(self, buff)
end
function RoleLogic:Dispose()
@ -93,7 +95,6 @@ function RoleLogic:Dispose()
end
function RoleLogic:Update()
self.BuffMgr:Update()
if not self.enable then
return
end

View File

@ -74,8 +74,6 @@ public class GameApplication {
MongoUtil.getInstence().init(configurableApplicationContext);
CombatLogic.getInstance().checkAdventureFlush();
STableManager.initialize("com.ljsd.jieling.config");
//初始化邮件
MailingSystemManager.init(configurableApplicationContext);

View File

@ -3,49 +3,39 @@ package com.ljsd.jieling.config;
import com.ljsd.jieling.logic.STableManager;
import com.ljsd.jieling.logic.Table;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@Table(name ="AdventureConfig")
public class SAdventureConfig implements BaseConfig {
private static Map<Integer, SAdventureConfig> sAdventureConfigMap;
private int id;
private int openLevel;
private int recommendForce;
private int[] recommendHeroIds;
private int minNum;
private int maxNum;
private int[] baseRewardGroup;
private int[] randomRewardGroup;
private int[][] recommendRewardGroup;
private float[][] numIncome;
private int leaveBonus;
private static Map<Integer, SAdventureConfig> sAdventureConfigMap;
@Override
public void init() throws Exception {
sAdventureConfigMap = STableManager.getConfig(SAdventureConfig.class);
sAdventureConfigMap = STableManager.getConfig(SAdventureConfig.class);
}
public static SAdventureConfig getsAdventureConfigByPosition(int position) {
return sAdventureConfigMap.get(position);
public static SAdventureConfig getSAdventureConfigByPosition(int position){
return sAdventureConfigMap.get(position);
}
public static Map<Integer, SAdventureConfig> getsAdventureConfigMap() {
return sAdventureConfigMap;
}
public int getId() {
public int getId() {
return id;
}
@ -53,28 +43,25 @@ public class SAdventureConfig implements BaseConfig {
return openLevel;
}
public int getRecommendForce() {
return recommendForce;
public int getMaxNum() {
return maxNum;
}
public int[] getRecommendHeroIds() {
return recommendHeroIds;
}
public int getMinNum() {
return minNum;
}
public int[] getBaseRewardGroup() {
public int[] getBaseRewardGroup() {
return baseRewardGroup;
}
public int[] getRandomRewardGroup() {
public int[] getRandomRewardGroup() {
return randomRewardGroup;
}
public int[][] getRecommendRewardGroup() {
return recommendRewardGroup;
public float[][] getNumIncome() {
return numIncome;
}
public int getLeaveBonus() {
return leaveBonus;
}
}

View File

@ -1,53 +0,0 @@
package com.ljsd.jieling.config;
import com.ljsd.jieling.logic.STableManager;
import com.ljsd.jieling.logic.Table;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Table(name ="AdventurePoolConfig")
public class SAdventurePoolConfig implements BaseConfig {
private int id;
private int weight;
private int pool;
private static Map<Integer, List<SAdventurePoolConfig>> sAdventurePoolConfigListMap;
@Override
public void init() throws Exception {
Map<Integer, List<SAdventurePoolConfig>> sAdventurePoolConfigListMapTmp = new HashMap<>();
Map<Integer, SAdventurePoolConfig> config = STableManager.getConfig(SAdventurePoolConfig.class);
for(SAdventurePoolConfig sAdventurePoolConfig : config.values()){
int pool = sAdventurePoolConfig.getPool();
if(!sAdventurePoolConfigListMapTmp.containsKey(pool)){
sAdventurePoolConfigListMapTmp.put(pool,new ArrayList<>());
}
sAdventurePoolConfigListMapTmp.get(pool).add(sAdventurePoolConfig);
}
sAdventurePoolConfigListMap = sAdventurePoolConfigListMapTmp;
}
public static List<SAdventurePoolConfig> getsAdventurePoolConfigListByPool(int poolId) {
return sAdventurePoolConfigListMap.get(poolId);
}
public int getId() {
return id;
}
public int getWeight() {
return weight;
}
public int getPool() {
return pool;
}
}

View File

@ -1,60 +0,0 @@
package com.ljsd.jieling.config;
import com.ljsd.jieling.logic.STableManager;
import com.ljsd.jieling.logic.Table;
import java.util.Map;
@Table(name ="AdventureSetting")
public class SAdventureSetting implements BaseConfig {
private static Map<Integer, SAdventureSetting> sAdventureSettingMap;
private int id;
private int[] consumeGemRatio;
private float[][] baseRewardRatio;
private float[][] randomRewardRatio;
private int perMapMaxHour;
private float[] hourRewardRatio;
@Override
public void init() throws Exception {
sAdventureSettingMap = STableManager.getConfig(SAdventureSetting.class);
}
public static SAdventureSetting getsAdventureSetting(int pooId) {
return sAdventureSettingMap.get(pooId);
}
public int getId() {
return id;
}
public int[] getConsumeGemRatio() {
return consumeGemRatio;
}
public float[][] getBaseRewardRatio() {
return baseRewardRatio;
}
public float[][] getRandomRewardRatio() {
return randomRewardRatio;
}
public int getPerMapMaxHour() {
return perMapMaxHour;
}
public float[] getHourRewardRatio() {
return hourRewardRatio;
}
}

View File

@ -35,7 +35,11 @@ public class RedisKey {
*
* sub_key
*/
public static final String FIGHT_MONSTERS = "MONSTERS";
public static final String FIGHT_MONSTERS_1 = "MONSTERS_1";
public static final String FIGHT_MONSTERS_2 = "MONSTERS_2";
public static final String FIGHT_MONSTERS_3 = "MONSTERS_3";
/**
*

View File

@ -27,4 +27,9 @@ public interface Global {
int FIGHT_OPEND = 2;
int FIGHT_OPEND_NO_CLEARANCE = 3;
int FIGHT_CLEARANCE = 4;
//怪物波次
int MONSTER_1 = 0;
int MONSTER_2 = 1;
int MONSTER_3 = 2;
}

View File

@ -1,28 +0,0 @@
package com.ljsd.jieling.handler.combat;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.fight.CombatLogic;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.FightInfoProto;
import com.ljsd.jieling.protocols.MessageTypeProto;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class AdventureRewardHandler extends BaseHandler {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.ADVENTURE_REWARD_REQUEST;
}
@Override
public void process(ISession iSession, PacketNetData netData) throws Exception {
byte[] bytes = netData.parseClientProtoNetData();
FightInfoProto.TakeAventureRewardRequest takeAventureRewardRequest = FightInfoProto.TakeAventureRewardRequest.parseFrom(bytes);
int position = takeAventureRewardRequest.getPosition();
CombatLogic.getInstance().clearStation(iSession,position);
}
}

View File

@ -23,7 +23,6 @@ public class AdventureStationHandler extends BaseHandler {
FightInfoProto.AventureStationRequest aventureStationRequest = FightInfoProto.AventureStationRequest.parseFrom(bytes);
int position = aventureStationRequest.getPosition();
List<String> heroIdListList = aventureStationRequest.getHeroIdListList();
int hourDuration = aventureStationRequest.getHourDuration();
CombatLogic.getInstance().adventureStation(iSession,position,heroIdListList,hourDuration);
CombatLogic.getInstance().adventureStation(iSession,position,heroIdListList);
}
}

View File

@ -72,12 +72,6 @@ public class MapLogic {
MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), "");
return;
}
if (mapManager.getCurMapId() > 0) {
int leftTime = getLeftTime(user);
if (leftTime == 0) {
resetMapInfo(user, true);
}
}
// 初始序章地图
if (user.getPlayerInfoManager().getMapId() == 0) {
String error = initTeamInfo(teamId, uid, user, mapManager);
@ -111,24 +105,28 @@ public class MapLogic {
MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), "该地图不存在");
return;
}
// TODO 可进入地图条件判断
// int[][] openRule = sChallengeConfig.getOpenRule();
// if (openRule != null && openRule.length > 0) {
// if (user.getPlayerInfoManager().getLevel() < openRule[0][1]) {
// MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), "需要等级:" + openRule[0][1]);
// if (scMapConfig == null || scMapConfig.getOpenRule() == null || scMapConfig.getOpenRule().length == 0) {
// LOGGER.info("enterMap() uid=>{} mapId=>{}, scMapConfig.getOpenRule()=>{}", uid, mapId, scMapConfig == null ? "" : scMapConfig.getOpenRule());
// MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), "");
// return;
// }
// int missionId = scMapConfig.getOpenRule()[0];
// if (!user.getMissionManager().getTakeRewardMissions().contains(missionId)) {
// Mission mission = user.getMissionManager().getDoingMissions().get(missionId);
// if (mission == null || mission.getMissionStep() < scMapConfig.getOpenRule()[1]) {
// LOGGER.info("enterMap() uid=>{} map not open == missionId =>{} step=>{}", uid, missionId, mission == null ? 0 : mission.getMissionStep());
// MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), "需要完成任务:" + (scMapConfig == null ? "" : scMapConfig.getOpenRule()[0] + "#" + scMapConfig.getOpenRule()[1]));
// return;
// }
// LevelDifficulty levelDifficulty = user.getLevelDifficultyManager().getLevelDifficultyInfosMap().get(openRule[0][0]);
// if (levelDifficulty == null && levelDifficulty.getState() != 4) {
// if (user.getPlayerInfoManager().getLevel() < openRule[0][1]) {
// MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), "需要通关:" + openRule[0][0]);
// return;
// }
// }
// }
if (user.getPlayerInfoManager().getMapId() < mapId) {
user.getPlayerInfoManager().setMapId(mapId);
}
if (mapId > user.getPlayerInfoManager().getMapId()) {
LOGGER.info("enterMap() uid=>{} mapManager.getMaxMapId()=>{} mapId =>{} ", uid, user.getPlayerInfoManager().getMapId(), mapId);
MessageUtil.sendErrorResponse(iSession, 0, messageType.getNumber(), "");
return;
}
String error = initTeamInfo(teamId, uid, user, mapManager);
if (!error.isEmpty()){
LOGGER.info("enterMap() uid=>{} error =>{} ", uid, error);
@ -169,7 +167,6 @@ public class MapLogic {
if (mapManager.getTemporaryItems() != null) {
mapEnterResponse.setTemporaryItems(CBean2Proto.getDrop(mapManager.getTemporaryItems()));
}
LOGGER.info("enterMap() uid=>{} mapId =>{} ", uid, mapManager.getCurMapId());
MessageUtil.sendMessage(iSession, 1, messageType.getNumber(), mapEnterResponse.build(), true);
}
@ -259,7 +256,6 @@ public class MapLogic {
Mission mission = new Mission();
mission.setMissionId(challengeMapConfig.getMissionId());
mission.setMissionStep(0);
mission.setTime(0);
mapManager.setMission(mission);
mapManager.setMapInfo(newMap);
mapManager.setTypeEight(spicelMap);
@ -304,13 +300,6 @@ public class MapLogic {
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "");
return;
}
if (mapManager.getCanMoveTime() > 0) {
long leftTime = mapManager.getCanMoveTime() - TimeUtils.now();
if (leftTime > 0) {
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "英雄 " + (leftTime / 1000) + " 秒后复活");
return;
}
}
if (mapManager.getStartExporeTime() == 0) {
LOGGER.info("mapManager.getStartExporeTime() == 0");
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "未开始探索");
@ -366,13 +355,6 @@ public class MapLogic {
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "未开始探索");
return;
}
if (mapManager.getCanMoveTime() > 0) {
long leftTime = mapManager.getCanMoveTime() - TimeUtils.now();
if (leftTime > 0) {
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "英雄 " + (leftTime / 1000) + " 秒后复活");
return;
}
}
Cell cell = mapManager.getMapInfo().get(mapManager.getTriggerXY());
if (cell == null) {
LOGGER.info("cell == null xy is wrong =>{} triggerXY=>{}", mapManager.getCurXY(), mapManager.getTriggerXY());
@ -531,7 +513,7 @@ public class MapLogic {
}
// LOGGER.info("updateEvent =====>success<====== xy=>{}, getPointId=>{} eventId={}, mission=>{}, nextEventId=>{}, eventBehaviorCommon=>{} {} sOptionConfig.getReward()=>{}", mapManager.getCurXY(), cell == null ? 0 : cell.getPointId(),
// cell == null ? 0 : cell.getEventId(), eventUpdateResponse.getMissionList(), nextEventId, eventBehaviorCommon,eventUpdateResponse.getDrop(), sOptionConfig.getReward());
// LOGGER.info("updatEvent() uid=>{},nextEventId={},eventId={},mission=>{}", uid, nextEventId, cell == null ? 0 : cell.getEventId(), eventUpdateResponse.getMission());
LOGGER.info("updatEvent() uid=>{},nextEventId={},eventId={},mission=>{}", uid, nextEventId, cell == null ? 0 : cell.getEventId(), eventUpdateResponse.getMission());
MessageUtil.sendMessage(session, 1, messageType.getNumber(), eventUpdateResponse.build(), true);
}
@ -672,7 +654,6 @@ public class MapLogic {
.setItemId(mission.getMissionId())
.setMissionStep(mission.getMissionStep())
.setState("")
.setTime(mission.getTime())
.build();
return openMission;
}
@ -693,17 +674,12 @@ public class MapLogic {
return;
}
resetMapInfo(user, true);
MapMission mapMission = mapManager.getAllMissionProgress().get(mapId);
if(mapMission!=null){
MapInfoProto.MapOutResponse build = MapInfoProto.MapOutResponse.newBuilder().setMapAccomplishInfo(CBean2Proto.getMapAccomplishInfo(mapMission)).build();
MessageUtil.sendMessage(session, 1, messageType.getNumber(), build, true);
return;
}
MessageUtil.sendMessage(session, 1, messageType.getNumber(), null, true);
}
public void resetMapInfo(User user, boolean needTemporaryItem) throws Exception {
MapManager mapManager = user.getMapManager();
mapManager.clearMapMission();
mapManager.setMapInfo(new HashMap<>());
mapManager.setTypeEight(new HashMap<>());
mapManager.setWalkCells(new HashSet<>());
@ -711,8 +687,6 @@ public class MapLogic {
mapManager.setCurMapId(0);
mapManager.setStartExporeTime(0);
mapManager.setTriggerXY(0);
mapManager.setDieCount(0);
mapManager.setCanMoveTime(0);
mapManager.setFoodBufferMap(new HashMap<>());
TemporaryItems temporaryItems = mapManager.getTemporaryItems();
mapManager.setMission(null);
@ -736,13 +710,6 @@ public class MapLogic {
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "");
return;
}
if (mapManager.getCanMoveTime() > 0) {
long leftTime = mapManager.getCanMoveTime() - TimeUtils.now();
if (leftTime > 0) {
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "英雄 " + (leftTime / 1000) + " 秒后复活");
return;
}
}
Cell cell = mapManager.getMapInfo().get(mapManager.getTriggerXY());
if (cell == null) {
cell = mapManager.getMapInfo().get(mapManager.getCurXY());
@ -808,25 +775,12 @@ public class MapLogic {
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "此战斗已结算过!");
return;
}
MapManager mapManager = user.getMapManager();
if (mapManager.getCanMoveTime() > 0) {
long leftTime = mapManager.getCanMoveTime() - TimeUtils.now();
if (leftTime > 0) {
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "英雄 " + (leftTime / 1000) + " 秒后复活");
return;
}
}
int seed = Integer.parseInt((String)valueMap.get(RedisKey.FIGHT_SEED));
int monsterGroupId = Integer.parseInt((String)valueMap.get(RedisKey.FIGHT_GROUPID));
CommonProto.FightTeamInfo.Builder builder = CommonProto.FightTeamInfo.newBuilder();
JsonFormat.merge((String)valueMap.get(RedisKey.FIGHT_HEROES), builder);
CommonProto.FightTeamInfo fightTeamInfo = builder.build();
CommonProto.FightTeamInfo.Builder monsterBuilder = CommonProto.FightTeamInfo.newBuilder();
JsonFormat.merge((String)valueMap.get(RedisKey.FIGHT_MONSTERS), monsterBuilder);
CommonProto.FightTeamInfo monsterTeam = monsterBuilder.build();
List<CommonProto.FightTeamInfo> monsterTeamList = new ArrayList<>();
monsterTeamList.add(monsterTeam);
List<CommonProto.FightTeamInfo> monsterTeamList = BehaviorUtil.getFightTeamInfos(valueMap);
SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(monsterGroupId);
if (sMonsterGroup == null) {
LOGGER.info("endFight() uid=>{} monsterGroupId=>{} sMonsterGroup == null", uid, monsterGroupId);
@ -848,34 +802,12 @@ public class MapLogic {
}
//校验结果码 1胜利
int resultCode = checkResult[0];
if (resultCode == -1) {
resetMapInfo(user, false);
MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), "战斗异常!");
if (resultCode == -1){
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "战斗异常!");
return;
} else if (resultCode == 0) {
// 失败需要等待n秒后复活所有英雄
int dieCount = mapManager.getDieCount();
dieCount++;
mapManager.setDieCount(dieCount);
SChallengeConfig sChallengeConfig = SChallengeConfig.sChallengeConfigs.get(mapManager.getCurMapId());
int[] reviveTime = sChallengeConfig.getReviveTime();
long time = (long) (MathUtils.calABX(dieCount, reviveTime) * 1000);
mapManager.setCanMoveTime(TimeUtils.now() + time);
int leftTime = getLeftTime(user);
if (leftTime <= (int) (time / 1000)) {
resetMapInfo(user, false);
} else {
List<TeamPosHeroInfo> teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(mapManager.getTeamId());
for (TeamPosHeroInfo heroInfo : teamPosHeroInfos) {
Hero hero = user.getHeroManager().getHero(heroInfo.getHeroId());
if (hero == null) {
continue;
}
Map<Integer, Integer> heroAttributeMap = HeroLogic.getInstance().calHeroFinalAttribute(user, hero);
hero.setCurHp(heroAttributeMap.get(HeroAttributeEnum.Hp.getPropertyId()));
hero.setSpeed(heroAttributeMap.get(HeroAttributeEnum.Speed.getPropertyId()));
}
}
}else if(resultCode == 0){
// 失败处理
// resetMapInfo(user,true);
CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder();
FightInfoProto.FightEndResponse fightEndResponse = FightInfoProto.FightEndResponse
.newBuilder()
@ -886,7 +818,8 @@ public class MapLogic {
MessageUtil.sendMessage(session, 1, messageType.getNumber(), fightEndResponse, true);
return;
}
int teamId = mapManager.getTeamId();
int teamId = user.getMapManager().getTeamId();
List<TeamPosHeroInfo> team = user.getTeamPosManager().getTeamPosForHero().get(teamId);
for (TeamPosHeroInfo teamPosHeroInfo : team){
Hero hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId());
@ -908,23 +841,23 @@ public class MapLogic {
fightEndResponse.setMission(eventUpdateResponse.getMission());
}
if (destoryId != 0) {
BehaviorUtil.destoryPoint(user, mapManager.getCurMapId(), destoryId);
BehaviorUtil.destoryPoint(user, user.getMapManager().getCurMapId(), destoryId);
}
if (destoryXY != 0) {
BehaviorUtil.destoryApointXY(user, destoryXY);
}
if (nextEventId != 0) {
int triggerXY = mapManager.getTriggerXY();
Cell cell = mapManager.getMapInfo().get(triggerXY);
int triggerXY = user.getMapManager().getTriggerXY();
Cell cell = user.getMapManager().getMapInfo().get(triggerXY);
if (cell != null) {
cell.setEventId(nextEventId);
mapManager.addOrUpdateCell(triggerXY, cell);
updateMapMission(mapManager,EventType.updateEvent,cell.getEventId(),0);
user.getMapManager().addOrUpdateCell(triggerXY, cell);
updateMapMission(user.getMapManager(),EventType.updateEvent,cell.getEventId(),0);
}
}
// LOGGER.info("endFight() uid=>{},nextEventId=>{}", uid, nextEventId);
updateMapMission(mapManager,EventType.fightEvent,0,monsterGroupId);
// LOGGER.info("endFight() uid=>{} sMonsterGroup.getRewardgroup()=>{} drop=>{} mission=>{}", uid, sMonsterGroup.getRewardgroup(), fightEndResponse.getDrop(), fightEndResponse.getMission());
LOGGER.info("endFight() uid=>{},nextEventId=>{}", uid, nextEventId);
updateMapMission(user.getMapManager(),EventType.fightEvent,0,monsterGroupId);
// LOGGER.info("endFight() uid=>{} sMonsterGroup.getRewardgroup()=>{} drop=>{}", uid, sMonsterGroup.getRewardgroup(), fightEndResponse.getDrop());
MessageUtil.sendMessage(session, 1, messageType.getNumber(), fightEndResponse.build(), true);
}
@ -1087,34 +1020,6 @@ public class MapLogic {
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.GET_ALL_MAP_ACCOMPLISH_RESPONSE_VALUE,build,true);
}
public void takeMissionBoxReward(ISession session,int mapId,int boxWeight) throws Exception {
int uid = session.getUid();
User user = UserManager.getUser(uid);
MapManager mapManager = user.getMapManager();
MapMission mapMission = mapManager.getAllMissionProgress().get(mapId);
if(mapMission == null ){
MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.TAKE_MAP_MISSION_BOX_RESPONSE_VALUE,"");
return;
}
SAccomplishmentBox sAccomplishmentBox = SAccomplishmentBox.getsAccomplishmentBoxByMapId(mapId);
int totalWeight = mapMission.getTotalWeight();
Integer rewaedGroupId = sAccomplishmentBox.getBoxMap().get(boxWeight);
if(rewaedGroupId == null || totalWeight < boxWeight ){
MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.TAKE_MAP_MISSION_BOX_RESPONSE_VALUE,"");
return;
}
if(mapMission.getHadTakeRewardIds().contains(boxWeight)){
MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.TAKE_MAP_MISSION_BOX_RESPONSE_VALUE,"hadTaked");
return;
}
mapMission.getHadTakeRewardIds().add(boxWeight);
mapMission.setHadTakeRewardIds(mapMission.getHadTakeRewardIds());
CommonProto.Drop.Builder drop = ItemUtil.drop(user, new int[]{rewaedGroupId}, 1.0f, 0);
MapInfoProto.TakeMapBoxResponse build = MapInfoProto.TakeMapBoxResponse.newBuilder().setDrop(drop).build();
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.TAKE_MAP_MISSION_BOX_RESPONSE_VALUE,build,true);
}
public int getLeftTime(User user) throws Exception {
SChallengeConfig sChallengeConfig = SChallengeConfig.sChallengeConfigs.get(user.getMapManager().getCurMapId());
long startExporeTime = user.getMapManager().getStartExporeTime();
@ -1123,28 +1028,17 @@ public class MapLogic {
}
int useTime = (int) ((TimeUtils.now() - startExporeTime) / 1000);
if (useTime >= sChallengeConfig.getMapTime()) {
resetMapInfo(user, false);
return 0;
} else {
return sChallengeConfig.getMapTime() - useTime;
}
}
public int getUseTime(User user) throws Exception {
long startExporeTime = user.getMapManager().getStartExporeTime();
if (startExporeTime == 0) {
return -1;
}
int useTime = (int) ((TimeUtils.now() - startExporeTime) / 1000);
return useTime;
}
public CheckMissionReturn checkMission(Mission mission, User user) throws Exception {
if (mission.getTime() > 0) {
return null;
}
CheckMissionReturn checkMissionReturn = new CheckMissionReturn();
SMissionEventsConfig sMissionEventsConfig = SMissionEventsConfig.sMissionEventsConfigMap.get(mission.getMissionId());
mission.setMissionStep(mission.getMissionStep() + 1);
CheckMissionReturn checkMissionReturn = new CheckMissionReturn();
if (mission.getMissionStep() >= sMissionEventsConfig.getMissionNum()) {
if (mission.getMissionInfo() != null) {
checkMissionReturn.newEventId = mission.getMissionInfo();
@ -1152,9 +1046,9 @@ public class MapLogic {
int[] reward = {sMissionEventsConfig.getReward()};
CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, 1, 0);
checkMissionReturn.drop = drop;
mission.setTime(getUseTime(user));
} else {
user.getMapManager().setMission(mission);
}
user.getMapManager().setMission(mission);
checkMissionReturn.mission = mission;
return checkMissionReturn;
}
@ -1334,11 +1228,7 @@ public class MapLogic {
CommonProto.FightTeamInfo.Builder builder = CommonProto.FightTeamInfo.newBuilder();
JsonFormat.merge((String)valueMap.get(RedisKey.FIGHT_HEROES), builder);
CommonProto.FightTeamInfo fightTeamInfo = builder.build();
CommonProto.FightTeamInfo.Builder monsterBuilder = CommonProto.FightTeamInfo.newBuilder();
JsonFormat.merge((String)valueMap.get(RedisKey.FIGHT_MONSTERS), monsterBuilder);
CommonProto.FightTeamInfo monsterTeam = monsterBuilder.build();
List<CommonProto.FightTeamInfo> monsterTeamList = new ArrayList<>();
monsterTeamList.add(monsterTeam);
List<CommonProto.FightTeamInfo> monsterTeamList = BehaviorUtil.getFightTeamInfos(valueMap);
SLevelDifficultyConfig sLevelDifficultyConfig = SLevelDifficultyConfig.getsLevelDifficultyConfigMap().get(fightId);
if (sLevelDifficultyConfig == null) {
@ -1395,6 +1285,12 @@ public class MapLogic {
MessageUtil.sendMessage(session, 1, messageType.getNumber(), fightEndResponse.build(), true);
}
private CommonProto.FightTeamInfo getFightTeamInfo(Map<Object, Object> valueMap) throws JsonFormat.ParseException {
CommonProto.FightTeamInfo.Builder monsterBuilder = CommonProto.FightTeamInfo.newBuilder();
JsonFormat.merge((String)valueMap.get(RedisKey.FIGHT_MONSTERS_1), monsterBuilder);
return monsterBuilder.build();
}
/**
*
* @param levelDifficultyManager

View File

@ -203,6 +203,11 @@ public class MapManager extends MongoBase {
allMissionProgress.put(mapMission.getMapId(),mapMission);
}
public void clearMapMission(){
removeString( getMongoKey()+".allMissionProgress." + curMapId);
allMissionProgress.remove(curMapId);
}
public static void getEnergy(User user) throws Exception {
@ -212,20 +217,35 @@ public class MapManager extends MongoBase {
if (itemMap.containsKey(Global.STAMINA)) {
itemNum = itemMap.get(Global.STAMINA).getItemNum();
}
MapManager mapManager = user.getMapManager();
int lastUpdateEnergyTime = mapManager.getLastUpdateEnergyTime();
if(itemNum < playerInfoManager.getMaxStamina()){
int updateTime = (int)(System.currentTimeMillis()/1000);
int[] energyRecoverSpeed = SGameSetting.getGameSetting().getEnergyRecoverSpeed();
int addValue = (updateTime - lastUpdateEnergyTime)/60/energyRecoverSpeed[1] * energyRecoverSpeed[0];
if(addValue != 0){
int curEnergy = MathUtils.setBetweenWithMax(itemNum + addValue,0,SGameSetting.getGameSetting().getInitialEnergy());
ItemUtil.drop(user, StringUtil.parseFiledInt2( Global.STAMINA+"#"+curEnergy));
mapManager.setLastUpdateEnergyTime(updateTime);
Item item = user.getItemManager().getItemMap().get(Global.STAMINA);
int updateTime = (int)(System.currentTimeMillis()/1000);
int lastUpdateEnergyTime = item.getEndingTime();
if ((updateTime -lastUpdateEnergyTime)/60 >= 1){
if(itemNum < playerInfoManager.getMaxStamina()){
int[] energyRecoverSpeed = SGameSetting.getGameSetting().getEnergyRecoverSpeed();
int addValue = (updateTime - lastUpdateEnergyTime)/60/energyRecoverSpeed[1] * energyRecoverSpeed[0];
if(addValue != 0){
int curEnergy = MathUtils.setBetweenWithMax(itemNum + addValue,0,SGameSetting.getGameSetting().getInitialEnergy());
item.setItemNum(curEnergy>playerInfoManager.getMaxStamina()?playerInfoManager.getMaxStamina():curEnergy);
setLastUpdateEnergyTime(item, updateTime, lastUpdateEnergyTime);
}
}else {
setLastUpdateEnergyTime(item, updateTime, lastUpdateEnergyTime);
}
}
}
private static void setLastUpdateEnergyTime(Item item, int updateTime, int lastUpdateEnergyTime) throws Exception {
int time = lastUpdateEnergyTime + ((updateTime -lastUpdateEnergyTime)/60 )* 60;
item.setEndingTime(time);
}
public static void main(String [] args){
int lastUpdateEnergyTime = 1552170600;
int nowTime = 1552170735;
int time = lastUpdateEnergyTime + ((nowTime -lastUpdateEnergyTime)/60 )* 60;
System.out.println(time);
}
public void setLastUpdateEnergyTime(int lastUpdateEnergyTime) {
updateString("lastUpdateEnergyTime", lastUpdateEnergyTime);
this.lastUpdateEnergyTime = lastUpdateEnergyTime;

View File

@ -13,8 +13,6 @@ public class MapMission extends MongoBase {
private Map<Integer,Integer> allMissionProgress;
private Set<Integer> hadTakeRewardIds;
private int totalWeight;
public int getMapId() {
@ -31,7 +29,6 @@ public class MapMission extends MongoBase {
this.setRootCollection(User._COLLECTION_NAME);
this.mapId = mapId;
this.allMissionProgress = missionProgress;
this.hadTakeRewardIds = new HashSet<>();
}
@ -44,9 +41,6 @@ public class MapMission extends MongoBase {
this.allMissionProgress = allMissionProgress;
}
public Set<Integer> getHadTakeRewardIds() {
return hadTakeRewardIds;
}
public void setTotalWeight(int totalWeight) {
updateString("totalWeight",totalWeight);
@ -57,8 +51,4 @@ public class MapMission extends MongoBase {
return totalWeight;
}
public void setHadTakeRewardIds(Set<Integer> hadTakeRewardIds) {
updateString("hadTakeRewardIds",hadTakeRewardIds);
this.hadTakeRewardIds = hadTakeRewardIds;
}
}

View File

@ -1,25 +0,0 @@
package com.ljsd.jieling.handler.map;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.MapInfoProto;
import com.ljsd.jieling.protocols.MessageTypeProto;
import org.springframework.stereotype.Component;
@Component
public class TakeMapBoxRewardHandler extends BaseHandler {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.TAKE_MAP_MISSION_BOX_REQUEST;
}
@Override
public void process(ISession iSession, PacketNetData netData) throws Exception {
byte[] bytes = netData.parseClientProtoNetData();
MapInfoProto.TakeMapBoxRequest takeMapBoxRequest = MapInfoProto.TakeMapBoxRequest.parseFrom(bytes);
int boxWeight = takeMapBoxRequest.getBoxWeight();
int mapId = takeMapBoxRequest.getMapId();
MapLogic.getInstance().takeMissionBoxReward(iSession,mapId,boxWeight);
}
}

View File

@ -4,6 +4,7 @@ import com.googlecode.protobuf.format.JsonFormat;
import com.ljsd.jieling.config.MapPointConfig;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.handler.map.Cell;
import com.ljsd.jieling.handler.map.MapLogic;
import com.ljsd.jieling.handler.map.MapManager;
@ -95,9 +96,55 @@ public class BehaviorUtil {
MapManager mapManager = user.getMapManager();
int teamId = mapManager.getTeamId();
List<TeamPosHeroInfo> teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId);
List<CommonProto.FightUnitInfo> heroFightInfos = new ArrayList<>();
CommonProto.FightData.Builder fightData = CommonProto.FightData.newBuilder();
CommonProto.FightTeamInfo fightTeamInfo = getFightTeamInfo(user, teamId);
fightData.setHeroFightInfos(fightTeamInfo);
//monster
Map<Integer, List<CommonProto.FightUnitInfo>> monsterByGroup = MonsterUtil.getMonsterByGroup(groupId);
List<CommonProto.FightTeamInfo> monsterGroupList = getFightTeamInfos(groupId,monsterByGroup, Global.MONSTER_1);
List<CommonProto.FightTeamInfo> monsterGroupList1 = getFightTeamInfos(groupId,monsterByGroup, Global.MONSTER_2);
List<CommonProto.FightTeamInfo> monsterGroupList2 = getFightTeamInfos(groupId,monsterByGroup, Global.MONSTER_3);
fightData.addAllMonsterList(monsterGroupList).addAllMonsterList(monsterGroupList1).addAllMonsterList(monsterGroupList2);
//设置战斗随机种子
int seed = (int)(System.currentTimeMillis()/1000);
// int seed = 1553167956;
fightData.setFightSeed(seed);
fightStartRespons.setFightData(fightData);
String key = RedisKey.getKey(RedisKey.FIGHT, user.getId(), false);
Map<String,Object> fightInfo = new HashMap<>();
fightInfo.put(RedisKey.FIGHT_HEROES, JsonFormat.printToString(fightTeamInfo));
fightInfo.put(RedisKey.FIGHT_MONSTERS_1, JsonFormat.printToString(monsterGroupList.get(0)));
if (monsterGroupList1.size() != 0){
fightInfo.put(RedisKey.FIGHT_MONSTERS_2, JsonFormat.printToString(monsterGroupList1.get(0)));
}
if (monsterGroupList2.size() != 0){
fightInfo.put(RedisKey.FIGHT_MONSTERS_3, JsonFormat.printToString(monsterGroupList2.get(0)));
}
fightInfo.put(RedisKey.FIGHT_SEED,Integer.toString(seed));
fightInfo.put(RedisKey.FIGHT_GROUPID, Integer.toString(groupId));
fightInfo.put(RedisKey.NEED_MISSION_ID, missionId);
fightInfo.put(RedisKey.NEED_DESORY_ID, destoryId);
fightInfo.put(RedisKey.NEED_DESORY_XY, Integer.toString(destoryXY));
fightInfo.put(RedisKey.NEXT_EVENT_ID, nextEventId);
RedisUtil.getInstence().hmset(key, fightInfo, RedisKey.EXPIRE_TIME);
// ISession session = OnlineUserManager.getSessionByUid(Integer.parseInt(user.getId()));
// MapLogic.getInstance().endFight(session,"", MessageTypeProto.MessageType.FIGHT_END_RESPONSE);
}
/**
* FightUnitInfo
* @param user
* @param teamId
* @return
*/
private static CommonProto.FightTeamInfo getFightTeamInfo(User user, int teamId) {
List<CommonProto.FightUnitInfo> heroFightInfos = new ArrayList<>();
List<TeamPosHeroInfo> teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId);
for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfos) {
Hero hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId());
if (hero == null) {
@ -120,42 +167,7 @@ public class BehaviorUtil {
.addAllFightUnitList(heroFightInfos)
.setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user,teamId))
.build();
fightData.setHeroFightInfos(fightTeamInfo);
//monster
List<CommonProto.FightUnitInfo> monsterByGroup = MonsterUtil.getMonsterByGroup(groupId);
String monsterTeamSkill = MonsterUtil.getMonsterTeamSkillByGroup(groupId);
List<CommonProto.FightTeamInfo> monsterGroupList = new ArrayList<>();
CommonProto.FightTeamInfo monsterTeamInfo = CommonProto.FightTeamInfo
.newBuilder()
.addAllFightUnitList(monsterByGroup)
.setTeamSkillList(monsterTeamSkill)
.build();
monsterGroupList.add(monsterTeamInfo);
fightData.addAllMonsterList(monsterGroupList);
//设置战斗随机种子
int seed = (int)(System.currentTimeMillis()/1000);
// int seed = 1553167956;
fightData.setFightSeed(seed);
fightStartRespons.setFightData(fightData);
String key = RedisKey.getKey(RedisKey.FIGHT, user.getId(), false);
Map<String,Object> fightInfo = new HashMap<>();
fightInfo.put(RedisKey.FIGHT_HEROES, JsonFormat.printToString(fightTeamInfo));
fightInfo.put(RedisKey.FIGHT_MONSTERS, JsonFormat.printToString(monsterGroupList.get(0)));//暂时没考虑多拨怪
fightInfo.put(RedisKey.FIGHT_SEED,Integer.toString(seed));
fightInfo.put(RedisKey.FIGHT_GROUPID, Integer.toString(groupId));
fightInfo.put(RedisKey.NEED_MISSION_ID, missionId);
fightInfo.put(RedisKey.NEED_DESORY_ID, destoryId);
fightInfo.put(RedisKey.NEED_DESORY_XY, Integer.toString(destoryXY));
fightInfo.put(RedisKey.NEXT_EVENT_ID, nextEventId);
RedisUtil.getInstence().hmset(key, fightInfo, RedisKey.EXPIRE_TIME);
// ISession session = OnlineUserManager.getSessionByUid(Integer.parseInt(user.getId()));
// MapLogic.getInstance().endFight(session,"", MessageTypeProto.MessageType.FIGHT_END_RESPONSE);
return fightTeamInfo;
}
/**
@ -207,44 +219,15 @@ public class BehaviorUtil {
}
public static void getLevelDifficultyifficuFightInfo(User user,int groupId,int teamId, FightInfoProto.FightStartResponse.Builder fightStartRespons) {
List<TeamPosHeroInfo> teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId);
List<CommonProto.FightUnitInfo> heroFightInfos = new ArrayList<>();
CommonProto.FightData.Builder fightData = CommonProto.FightData.newBuilder();
for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfos) {
Hero hero = user.getHeroManager().getHero(teamPosHeroInfo.getHeroId());
if (hero == null) {
continue;
}
StringBuilder skillSb = new StringBuilder();
StringBuilder propertySb = new StringBuilder();
String heroSkill = HeroLogic.getInstance().getHeroSkills(hero,skillSb).toString();
String property = HeroLogic.getInstance().getHeroProperty(user,hero,propertySb).toString();
CommonProto.FightUnitInfo heroFightInfo = CommonProto.FightUnitInfo
.newBuilder()
.setUnitId(Integer.toString(hero.getTemplateId()))
.setUnitSkillIds(heroSkill.substring(0,heroSkill.length()-1))
.setProperty(property.substring(0, property.length()-1))
.build();
heroFightInfos.add(heroFightInfo);
}
CommonProto.FightTeamInfo fightTeamInfo = CommonProto.FightTeamInfo.
newBuilder()
.addAllFightUnitList(heroFightInfos)
.setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user,teamId))
.build();
CommonProto.FightTeamInfo fightTeamInfo = getFightTeamInfo(user, teamId);
fightData.setHeroFightInfos(fightTeamInfo);
//monster
List<CommonProto.FightUnitInfo> monsterByGroup = MonsterUtil.getMonsterByGroup(groupId);
String monsterTeamSkill = MonsterUtil.getMonsterTeamSkillByGroup(groupId);
List<CommonProto.FightTeamInfo> monsterGroupList = new ArrayList<>();
CommonProto.FightTeamInfo monsterTeamInfo = CommonProto.FightTeamInfo
.newBuilder()
.addAllFightUnitList(monsterByGroup)
.setTeamSkillList(monsterTeamSkill)
.build();
monsterGroupList.add(monsterTeamInfo);
fightData.addAllMonsterList(monsterGroupList);
Map<Integer, List<CommonProto.FightUnitInfo>> monsterByGroup = MonsterUtil.getMonsterByGroup(groupId);
List<CommonProto.FightTeamInfo> monsterGroupList = getFightTeamInfos(groupId,monsterByGroup,0);
List<CommonProto.FightTeamInfo> monsterGroupList1 = getFightTeamInfos(groupId,monsterByGroup,1);
List<CommonProto.FightTeamInfo> monsterGroupList2 = getFightTeamInfos(groupId,monsterByGroup,2);
fightData.addAllMonsterList(monsterGroupList).addAllMonsterList(monsterGroupList1).addAllMonsterList(monsterGroupList2);
//设置战斗随机种子
int seed = (int)(System.currentTimeMillis()/1000);
@ -254,9 +237,14 @@ public class BehaviorUtil {
String key = RedisKey.getKey(RedisKey.LEVE_DIFFICULTY_FIGHT, user.getId(), false);
Map<String,Object> fightInfo = new HashMap<>();
fightInfo.put(RedisKey.FIGHT_HEROES, JsonFormat.printToString(fightTeamInfo));
fightInfo.put(RedisKey.FIGHT_MONSTERS, JsonFormat.printToString(monsterGroupList.get(0)));//暂时没考虑多拨怪
fightInfo.put(RedisKey.FIGHT_MONSTERS_1, JsonFormat.printToString(monsterGroupList.get(0)));
if (monsterGroupList1.size() != 0){
fightInfo.put(RedisKey.FIGHT_MONSTERS_2, JsonFormat.printToString(monsterGroupList1.get(0)));
}
if (monsterGroupList2.size() != 0){
fightInfo.put(RedisKey.FIGHT_MONSTERS_3, JsonFormat.printToString(monsterGroupList2.get(0)));
}
fightInfo.put(RedisKey.FIGHT_SEED,Integer.toString(seed));
fightInfo.put(RedisKey.FIGHT_GROUPID, Integer.toString(groupId));
fightInfo.put(RedisKey.NEED_MISSION_ID, Integer.toString(0));
@ -265,4 +253,48 @@ public class BehaviorUtil {
fightInfo.put(RedisKey.NEXT_EVENT_ID, Integer.toString(0));
RedisUtil.getInstence().hmset(key, fightInfo, RedisKey.EXPIRE_TIME);
}
/**
* hfightTeamInfo
* @param groupId
* @return
*/
public static List<CommonProto.FightTeamInfo> getFightTeamInfos(int groupId,Map<Integer, List<CommonProto.FightUnitInfo>> monsterByGroup,int mosterNum) {
String monsterTeamSkill = MonsterUtil.getMonsterTeamSkillByGroup(groupId);
List<CommonProto.FightTeamInfo> monsterGroupList = new ArrayList<>();
if (monsterByGroup.size() > mosterNum){
CommonProto.FightTeamInfo monsterTeamInfo = CommonProto.FightTeamInfo.newBuilder().addAllFightUnitList(monsterByGroup.get(mosterNum)).setTeamSkillList(monsterTeamSkill).build();
monsterGroupList.add(monsterTeamInfo);
}
return monsterGroupList;
}
/**
*
* @param valueMap
* @return
* @throws JsonFormat.ParseException
*/
public static List<CommonProto.FightTeamInfo> getFightTeamInfos(Map<Object, Object> valueMap) throws JsonFormat.ParseException {
List<CommonProto.FightTeamInfo> monsterTeamList = new ArrayList<>();
CommonProto.FightTeamInfo.Builder monsterBuilder = CommonProto.FightTeamInfo.newBuilder();
JsonFormat.merge((String)valueMap.get(RedisKey.FIGHT_MONSTERS_1), monsterBuilder);
CommonProto.FightTeamInfo monsterTeam = monsterBuilder.build();
monsterTeamList.add(monsterTeam);
String info = (String)valueMap.get(RedisKey.FIGHT_MONSTERS_2);
if (info !=null){
CommonProto.FightTeamInfo.Builder monsterBuilder1 = CommonProto.FightTeamInfo.newBuilder();
JsonFormat.merge(info, monsterBuilder1);
CommonProto.FightTeamInfo monsterTeam1 = monsterBuilder.build();
monsterTeamList.add(monsterTeam1);
}
String info1 = (String)valueMap.get(RedisKey.FIGHT_MONSTERS_3);
if (info1!= null){
CommonProto.FightTeamInfo.Builder monsterBuilder2 = CommonProto.FightTeamInfo.newBuilder();
JsonFormat.merge(info1, monsterBuilder2);
CommonProto.FightTeamInfo monsterTeam2 = monsterBuilder.build();
monsterTeamList.add(monsterTeam2);
}
return monsterTeamList;
}
}

View File

@ -1,6 +1,7 @@
package com.ljsd.jieling.logic.dao;
import com.ljsd.common.mogodb.MongoBase;
import com.ljsd.jieling.handler.map.TemporaryItems;
import com.ljsd.jieling.logic.dao.root.User;
@ -10,63 +11,40 @@ import java.util.Map;
public class AdventureManager extends MongoBase {
private Map<Integer,AdventureStateInfo> adventureStateInfoMap;
private Map<Integer,Integer> allowTimeMap;
private long updateTime;
private Map<int[],Float> tempDropRatio = new HashMap<>();
public AdventureManager(){
this.setRootCollection(User._COLLECTION_NAME);
adventureStateInfoMap = new HashMap<>();
allowTimeMap = new HashMap<>();
}
public void station(AdventureStateInfo adventureStateInfo,int allowTime) throws Exception {
public void station(AdventureStateInfo adventureStateInfo) throws Exception {
int position = adventureStateInfo.getPosition();
updateString("adventureStateInfoMap." + position, adventureStateInfo);
updateString("allowTimeMap." + position, allowTime);
adventureStateInfoMap.put(position,adventureStateInfo);
allowTimeMap.put(position,allowTime);
}
public void clearStation(int position){
AdventureStateInfo adventureStateInfo = adventureStateInfoMap.get(position);
if (adventureStateInfo!=null){
removeString(getMongoKey() +".adventureStateInfoMap." + position);
removeString(getMongoKey() +".allowTimeMap." + position);
adventureStateInfoMap.remove(position);
allowTimeMap.remove(position);
}
public Map<int[], Float> getTempDropRation() {
return tempDropRatio;
}
public void updateTemp(int dropIds[],float ratio){
tempDropRatio.put(dropIds,ratio);
updateString("tempDropRatio."+dropIds,ratio);
}
public void clearTemp(){
tempDropRatio.clear();
updateString("tempDropRatio",new HashMap<>());
}
public Map<Integer, AdventureStateInfo> getAdventureStateInfoMap() {
return adventureStateInfoMap;
}
public void setAdventureStateInfoMap(Map<Integer, AdventureStateInfo> adventureStateInfoMap) {
this.adventureStateInfoMap = adventureStateInfoMap;
}
public void updateAllowTime(int position,int allowTime){
updateString("allowTimeMap." + position, allowTime);
allowTimeMap.put(position,allowTime);
}
public void setUpdateTime(long updateTime) {
updateString("updateTime",updateTime);
this.updateTime = updateTime;
}
public void setAllowTimeMap(Map<Integer, Integer> allowTimeMap) {
updateString("allowTimeMap.",allowTimeMap);
this.allowTimeMap = allowTimeMap;
}
public long getUpdateTime() {
return updateTime;
}
public Map<Integer, Integer> getAllowTimeMap() {
return allowTimeMap;
public void clearStation(int position) {
removeString(getMongoKey()+".adventureStateInfoMap." + position);
adventureStateInfoMap.remove(position);
}
}

View File

@ -1,8 +1,6 @@
package com.ljsd.jieling.logic.dao;
import com.ljsd.common.mogodb.MongoBase;
import com.ljsd.jieling.config.SAdventureSetting;
import com.ljsd.jieling.config.SVipLevelConfig;
import com.ljsd.jieling.logic.dao.root.User;
import java.util.List;
@ -11,24 +9,15 @@ public class AdventureStateInfo extends MongoBase {
private int position;
private List<String> heroIds;
private int startTime;
private int hourDuration;
private int totalForce;
private int myRecommendHeroSize;
public AdventureStateInfo(){
this.setRootCollection(User._COLLECTION_NAME);
}
public AdventureStateInfo(int position,List<String> heroIds, int startTime, int hourDuration,int totalForce,int myRecommendHeroSize) {
public AdventureStateInfo(int position,List<String> heroIds, int startTime) {
this.setRootCollection(User._COLLECTION_NAME);
this.heroIds = heroIds;
this.startTime = startTime;
this.hourDuration = hourDuration;
this.position = position;
this.totalForce = totalForce;
this.myRecommendHeroSize = myRecommendHeroSize;
}
public List<String> getHeroIds() {
@ -39,19 +28,13 @@ public class AdventureStateInfo extends MongoBase {
return startTime;
}
public int getHourDuration() {
return hourDuration;
}
public int getPosition() {
return position;
}
public int getTotalForce() {
return totalForce;
}
public void setStartTime(int startTime) {
updateString("startTime",startTime);
this.startTime = startTime;
public int getMyRecommendHeroSize() {
return myRecommendHeroSize;
}
}

View File

@ -1,16 +1,12 @@
package com.ljsd.jieling.logic.fight;
import com.ljsd.GameApplication;
import com.ljsd.jieling.config.*;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.db.mongo.MongoUtil;
import com.ljsd.jieling.handler.map.MapManager;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.root.AdventureSeasonInfo;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.FightInfoProto;
@ -24,9 +20,6 @@ import java.util.*;
public class CombatLogic {
private static final Logger LOGGER = LoggerFactory.getLogger(CombatLogic.class);
private static AdventureSeasonInfo adventureSeasonInfoCache;
private static List<CommonProto.AdventureRecommendHeroInfo> adventureRecommendHeroInfos ;
private CombatLogic(){}
@ -39,149 +32,57 @@ public class CombatLogic {
return CombatLogic.Instance.instance;
}
private void getAdventureRecommendHeroInfos( Map<Integer, Set<Integer>> recommendFinalHeroMap){
adventureRecommendHeroInfos = new ArrayList<>(recommendFinalHeroMap.size());
for(Map.Entry<Integer,Set<Integer>> item : recommendFinalHeroMap.entrySet()){
Integer key = item.getKey();
Set<Integer> value = item.getValue();
adventureRecommendHeroInfos.add(CommonProto.AdventureRecommendHeroInfo.newBuilder().setPositionId(key).addAllRecommenedId(value).build());
}
}
//冒险模式 加成英雄刷新
public void checkAdventureFlush() throws Exception {
AdventureSeasonInfo adventureSeasonInfo = MongoUtil.getInstence().getMyMongoTemplate().findById(AdventureSeasonInfo._COLLECTION_NAME, Integer.toString(GameApplication.serverId), AdventureSeasonInfo.class);
if(adventureSeasonInfo!=null){
if(adventureSeasonInfoCache == null || adventureSeasonInfo.getUpdateTime()!=adventureSeasonInfoCache.getUpdateTime()){
adventureSeasonInfoCache = adventureSeasonInfo;
getAdventureRecommendHeroInfos(adventureSeasonInfo.getRecommendFinalHeroMap());
}
if(TimeUtils.isSameDayWithNow(adventureSeasonInfo.getUpdateTime())){
return;
}
}
Map<Integer,Set<Integer>> recommendFinalHeroMap = new HashMap<>();
Map<Integer, SAdventureConfig> sAdventureConfigMap = SAdventureConfig.getsAdventureConfigMap();
for(SAdventureConfig sAdventureConfig : sAdventureConfigMap.values()){
int[] recommendHeroIds = sAdventureConfig.getRecommendHeroIds();
int recommendNums = recommendHeroIds[0];
int randomPoolId = recommendHeroIds[1];
int mustPoolId = recommendHeroIds[2];
int leftNums = recommendNums;
Set<Integer> recommendFinalHeroIds = new HashSet<>(recommendNums);
recommendFinalHeroMap.put(sAdventureConfig.getId(),recommendFinalHeroIds);
if(mustPoolId!=0){
List<SAdventurePoolConfig> sAdventurePoolConfigs = SAdventurePoolConfig.getsAdventurePoolConfigListByPool(mustPoolId);
for(SAdventurePoolConfig sAdventurePoolConfig : sAdventurePoolConfigs){
recommendFinalHeroIds.add(sAdventurePoolConfig.getId());
leftNums --;
}
}
if(leftNums>0){
List<SAdventurePoolConfig> sAdventurePoolConfigs = SAdventurePoolConfig.getsAdventurePoolConfigListByPool(randomPoolId);
int totalWeight = 0;
for(SAdventurePoolConfig sAdventurePoolConfig : sAdventurePoolConfigs){
totalWeight+=sAdventurePoolConfig.getWeight();
}
while (leftNums>0){
int randomWeight = MathUtils.randomInt(totalWeight)+1;
for(SAdventurePoolConfig sAdventurePoolConfig : sAdventurePoolConfigs){
randomWeight-=sAdventurePoolConfig.getWeight();
if(randomWeight<=0){
recommendFinalHeroIds.add(sAdventurePoolConfig.getId());
leftNums--;
break;
}
}
}
}
}
if(adventureSeasonInfo == null){
adventureSeasonInfo = new AdventureSeasonInfo();
}
adventureSeasonInfo.setRecommendFinalHeroMap(recommendFinalHeroMap);
adventureSeasonInfo.setUpdateTime(System.currentTimeMillis());
adventureSeasonInfoCache = adventureSeasonInfo;
getAdventureRecommendHeroInfos(adventureSeasonInfo.getRecommendFinalHeroMap());
MongoUtil.getInstence().getMyMongoTemplate().save(adventureSeasonInfo);
}
//冒险模式
public void getAdventureStateInfo(ISession session) throws Exception {
int uid = session.getUid();
User user = UserManager.getUser(uid);
flushAdventureTime(user);
AdventureManager adventureManager = user.getAdventureManager();
Map<Integer, AdventureStateInfo> adventureStateInfoMap = adventureManager.getAdventureStateInfoMap();
List<CommonProto.AdventureStateInfo> result = new ArrayList<>();
Map<Integer, Integer> allowTimeMap = adventureManager.getAllowTimeMap();
for(Map.Entry<Integer,Integer> item : allowTimeMap.entrySet()){
Integer position = item.getKey();
Integer allowTime = item.getValue();
AdventureStateInfo adventureStateInfo = adventureStateInfoMap.get(position);
result.add(CBean2Proto.getAdventureStateInfo(adventureStateInfo,position,allowTime));
CommonProto.Drop.Builder dropBuilder = calAdvenrureReward(user, false,0);
for(AdventureStateInfo item : adventureStateInfoMap.values()){
result.add(CBean2Proto.getAdventureStateInfo(item,item.getPosition()));
}
FightInfoProto.GetAdventureStateInfoResponse response = FightInfoProto.GetAdventureStateInfoResponse.newBuilder().addAllAdventureStateInfoList(result).addAllAdventureRecommendHeroInfo(adventureRecommendHeroInfos).
build();
FightInfoProto.GetAdventureStateInfoResponse response = FightInfoProto.GetAdventureStateInfoResponse.newBuilder().addAllAdventureStateInfoList(result).setDrop(dropBuilder.build()).build();
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.GET_ADVENTURE_INFO_RESPONSE_VALUE,response,true);
}
public void adventureStation(ISession session,int position,List<String> heroIds,int hourDuration) throws Exception {
if(heroIds == null || heroIds.isEmpty()){
MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_STATION_RESPONSE_VALUE,"");
return;
}
int uid = session.getUid();
public void adventureStation(ISession session,int position,List<String> heroIds) throws Exception {
int uid = session.getUid();
User user = UserManager.getUser(uid);
SAdventureConfig sAdventureConfig = SAdventureConfig.getsAdventureConfigByPosition(position);
/* if(sAdventureConfig.getOpenLevel() > user.getPlayerInfoManager().getLevel()){
SAdventureConfig sAdventureConfig = SAdventureConfig.getSAdventureConfigByPosition(position);
if(sAdventureConfig.getOpenLevel() > user.getPlayerInfoManager().getLevel()){
MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_STATION_RESPONSE_VALUE,"等级不够");
return;
}*/
if(sAdventureConfig.getMinNum() > heroIds.size()){
MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_STATION_RESPONSE_VALUE,"英雄数量小于规定数量");
return;
}
SAdventureSetting sAdventureSetting = SAdventureSetting.getsAdventureSetting(position);
if(hourDuration > sAdventureSetting.getPerMapMaxHour()){
MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_STATION_RESPONSE_VALUE,"超出时长");
return;
}
AdventureManager adventureManager = user.getAdventureManager();
//检验
Map<Integer, AdventureStateInfo> adventureStateInfoMap = adventureManager.getAdventureStateInfoMap();
AdventureStateInfo adventureStateInfo = adventureManager.getAdventureStateInfoMap().get(position);
if(adventureStateInfo!=null){
MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_STATION_RESPONSE_VALUE,"已驻扎");
if(heroIds == null || heroIds.isEmpty()){
if(!adventureStateInfoMap.containsKey(position)){
MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_STATION_RESPONSE_VALUE,"");
return;
}
calAdvenrureReward(user,true,position);
adventureManager.clearStation(position);
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_STATION_RESPONSE_VALUE,null,true);
return;
}
int allowTime =0;
if(!adventureManager.getAllowTimeMap().containsKey(position)){
int vipLevel = user.getPlayerInfoManager().getVipLevel();
allowTime = SVipLevelConfig.getsVipLevelConfigMap().get(vipLevel).getPrivilegeMap().get(1) -hourDuration;
}else{
Integer remainAllowTime = adventureManager.getAllowTimeMap().get(position);
allowTime = remainAllowTime - hourDuration;
}
if(allowTime<0){
MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_STATION_RESPONSE_VALUE,"超过时间");
if(heroIds.size()>sAdventureConfig.getMaxNum()){
MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_STATION_RESPONSE_VALUE,"英雄数量大于规定数量");
return;
}
for(AdventureStateInfo adventureStateInfoTmp:adventureStateInfoMap.values()){
int positionTmp = adventureStateInfoTmp.getPosition();
if(position == positionTmp){
continue;
}
List<String> heroIds1 = adventureStateInfoTmp.getHeroIds();
for(String useHeroId : heroIds1){
if(heroIds.contains(useHeroId)){
@ -191,117 +92,76 @@ public class CombatLogic {
}
}
}
HeroManager heroManager = user.getHeroManager();
int myRecommendHeroSize=0;
int totalForce=0;
Set<Integer> recommendHeroSets =adventureSeasonInfoCache.getRecommendFinalHeroMap().get(position);
Set<Integer> cacheHeroTid = new HashSet<>(recommendHeroSets.size());
for(String heroId : heroIds){
Hero hero = heroManager.getHero(heroId);
int templateId = hero.getTemplateId();
if(recommendHeroSets.contains(templateId) && !cacheHeroTid.contains(templateId)){
cacheHeroTid.add(templateId);
myRecommendHeroSize++;
if(adventureManager.getAdventureStateInfoMap().containsKey(position)){
AdventureStateInfo adventureStateInfo = adventureManager.getAdventureStateInfoMap().get(position);
if(adventureStateInfo.getHeroIds()!=null && !adventureStateInfo.getHeroIds().isEmpty()){
calAdvenrureReward(user,true,position);
}
totalForce += HeroLogic.getInstance().calHeoForce(user,hero);
}
adventureManager.station(new AdventureStateInfo(position,heroIds,(int)(System.currentTimeMillis()/1000),hourDuration,totalForce,myRecommendHeroSize),allowTime);
if(adventureManager.getUpdateTime() == 0){
adventureManager.setUpdateTime(System.currentTimeMillis());
}
adventureManager.station(new AdventureStateInfo(position,heroIds,(int)(System.currentTimeMillis()/1000)));
//发送成功
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_STATION_RESPONSE_VALUE,null,true);
}
private void flushAdventureTime( User user ){
public void calAdventureRewardByHeroChange(User user,Set<String> heroIds) throws Exception {
AdventureManager adventureManager = user.getAdventureManager();
long updateTime = adventureManager.getUpdateTime();
if(updateTime ==0 || TimeUtils.isSameDayWithNow(updateTime)){
return;
}
int vipLevel = user.getPlayerInfoManager().getVipLevel();
int allowTime = SVipLevelConfig.getsVipLevelConfigMap().get(vipLevel).getPrivilegeMap().get(1);
Map<Integer, Integer> allowTimeMap = adventureManager.getAllowTimeMap();
if(allowTimeMap!=null && !allowTimeMap.isEmpty()){
Map<Integer,Integer> result = new HashMap<>();
for(Integer position : allowTimeMap.keySet()){
result.put(position,allowTime);
//检验
Map<Integer, AdventureStateInfo> adventureStateInfoMap = adventureManager.getAdventureStateInfoMap();
for(AdventureStateInfo adventureStateInfoTmp:adventureStateInfoMap.values()){
List<String> heroIdsOccupy = adventureStateInfoTmp.getHeroIds();
boolean remove = heroIdsOccupy.removeAll(heroIds);
if(remove){
//提前结算
int position = adventureStateInfoTmp.getPosition();
calAdvenrureReward(user,true,position);
adventureManager.station(new AdventureStateInfo(adventureStateInfoTmp.getPosition(),heroIdsOccupy,(int)(System.currentTimeMillis()/1000)));
}
adventureManager.setUpdateTime(System.currentTimeMillis());
adventureManager.setAllowTimeMap(result);
}
}
public void clearStation(ISession session,int position) throws Exception {
int uid = session.getUid();
User user = UserManager.getUser(uid);
//消耗道具全部加一遍基础奖励。
public CommonProto.Drop.Builder calAdvenrureReward(User user, boolean isOnLine,int position) throws Exception {
Map<int[], Float> tempDropRation = new HashMap<>();
AdventureManager adventureManager = user.getAdventureManager();
AdventureStateInfo adventureStateInfo = adventureManager.getAdventureStateInfoMap().get(position);
if( null == adventureStateInfo ){
MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_REWARD_RESPONSE_VALUE,"");
return;
}
int startTime = adventureStateInfo.getStartTime();
int hourDuration = adventureStateInfo.getHourDuration();
Map<Integer, AdventureStateInfo> adventureStateInfoMap = adventureManager.getAdventureStateInfoMap();
int now = (int)(System.currentTimeMillis()/1000);
if( (now - startTime ) /3600 < hourDuration ){
MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_REWARD_RESPONSE_VALUE,"驻扎时长不到");
return;
}
//计算奖励
SAdventureConfig sAdventureConfig = SAdventureConfig.getsAdventureConfigByPosition(position);
int recommendForce = sAdventureConfig.getRecommendForce();
SAdventureSetting sAdventureSetting = SAdventureSetting.getsAdventureSetting(position);
float[][] baseRewardRatio = sAdventureSetting.getBaseRewardRatio();
float[][] randomRewardRatio = sAdventureSetting.getRandomRewardRatio();
float[] hourRewardRatio = sAdventureSetting.getHourRewardRatio();
int totalForce =adventureStateInfo.getTotalForce();
int myRecommendHeroSize =adventureStateInfo.getMyRecommendHeroSize();
float myForceRatio = totalForce*1.0f / recommendForce;
float hourRewardRatioTmp = MathUtils.calABX(hourDuration, hourRewardRatio);
float baseRewardRatioTmp = calRatio(myForceRatio, baseRewardRatio) * hourRewardRatioTmp;
float randomRewardRatioTmp = calRatio(myForceRatio, randomRewardRatio) * hourRewardRatioTmp;
int[] baseRewardGroup = sAdventureConfig.getBaseRewardGroup();
int[][] recommendRewardGroup = sAdventureConfig.getRecommendRewardGroup();
int[] randomRewardGroup = sAdventureConfig.getRandomRewardGroup();
Map<int[],Float> dropInfoMap = new HashMap<>();
dropInfoMap.put(baseRewardGroup,baseRewardRatioTmp);
dropInfoMap.put(randomRewardGroup,randomRewardRatioTmp);
if(myRecommendHeroSize>0){
int[] recommendRewardGroupDetail = recommendRewardGroup[myRecommendHeroSize - 1];
for(int i=0;i<recommendRewardGroupDetail.length;i=i+2){
int hourLimit = recommendRewardGroupDetail[i];
if(hourDuration<=hourLimit){
dropInfoMap.put(new int[]{recommendRewardGroupDetail[i+1]},1.0f);
break;
for(AdventureStateInfo adventureStateInfoTmp:adventureStateInfoMap.values()){
int positionTmp = adventureStateInfoTmp.getPosition();
if(position!=0 && positionTmp!=position){
continue;
}
int startTime = adventureStateInfoTmp.getStartTime();
int times = (now - startTime)%60;
int size = adventureStateInfoTmp.getHeroIds().size();
if(times>0){
adventureStateInfoTmp.setStartTime(startTime+times*60);
SAdventureConfig sAdventureConfig = SAdventureConfig.getSAdventureConfigByPosition(positionTmp);
int leaveBonus = sAdventureConfig.getLeaveBonus();
if(!isOnLine){
times = times>leaveBonus?leaveBonus:times;
}
int baseRewardGroup[] = sAdventureConfig.getBaseRewardGroup();
float rewardRation = calRation(size,sAdventureConfig.getNumIncome());
tempDropRation.put(baseRewardGroup,rewardRation * times);
adventureManager.updateTemp(sAdventureConfig.getRandomRewardGroup(),rewardRation*times);
}
}
CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropInfoMap);
//清除占领
adventureManager.clearStation(position);
FightInfoProto.TakeAventureRewardResponse response = FightInfoProto.TakeAventureRewardResponse.newBuilder().setDrop(drop).build();
//发送成功
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_REWARD_RESPONSE_VALUE,response,true);
if(!isOnLine){
tempDropRation.putAll(adventureManager.getTempDropRation());
adventureManager.clearTemp();
}
return ItemUtil.drop(user, tempDropRation);
}
public float calRatio(float value,float[][] base){
float result = 0;
for(int i=0;i< base.length;i++){
float weight = base[i][0];
if(value>= weight){
result = base[i][1];
private float calRation(float source,float[][] rationInfos){
float result = 0.0f;
for(float[] item : rationInfos){
float num = item[0];
float value = item[1];
if(source<num){
break;
}
result = value;
}
return result;
}

View File

@ -542,12 +542,12 @@ public class HeroLogic {
public void recyleHeroBySystem(User user,Set<String> removeHeroIds){
public void recyleHeroBySystem(User user,Set<String> removeHeroIds) throws Exception {
HeroManager heroManager = user.getHeroManager();
for(String useHeroId : removeHeroIds){
heroManager.removeHero(useHeroId);
}
CombatLogic.getInstance().calAdventureRewardByHeroChange(user,removeHeroIds);
}
//初始属性*1+化境增长)*等级系数 + 初始属性*突破系数

View File

@ -1,6 +1,5 @@
package com.ljsd.jieling.thread;
import com.ljsd.jieling.thread.task.MinuteJob;
import com.ljsd.jieling.thread.task.PlatConfigureTask;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -64,9 +63,6 @@ public class ThreadManager {
// testTask 已秒为单位 延迟10s, 间隔30s为周期执行
scheduledExecutor.scheduleAtFixedRate(platConfigureTask, 10, PlatConfigureTask.SLEEP_INTEVAL_TIME, TimeUnit.SECONDS);
long diff = now/1000 % 60 ;
scheduledExecutor.scheduleAtFixedRate(new MinuteJob(), 60 - diff, 60, TimeUnit.SECONDS);
LOGGER.info("All Task running ...");
}
public ScheduledThreadPoolExecutor getScheduledExecutor() {

View File

@ -1,23 +0,0 @@
package com.ljsd.jieling.thread.task;
import com.ljsd.jieling.logic.fight.CombatLogic;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MinuteJob extends Thread {
private static final Logger LOGGER = LoggerFactory.getLogger(MinuteJob.class);
public MinuteJob(){
super("minute-job-thread");
}
@Override
public void run() {
try {
LOGGER.info("MinuteJob start working");
CombatLogic.getInstance().checkAdventureFlush();
} catch (Exception e) {
LOGGER.error("the exception={}",e);
}
}
}

View File

@ -86,17 +86,11 @@ public class CBean2Proto {
return mailProto;
}
public static CommonProto.AdventureStateInfo getAdventureStateInfo(AdventureStateInfo adventureStateInfo,int position,int allowTime){
CommonProto.AdventureStateInfo.Builder builder = CommonProto.AdventureStateInfo.newBuilder().setAllowTime(allowTime).setPositionId(position);
public static CommonProto.AdventureStateInfo getAdventureStateInfo(AdventureStateInfo adventureStateInfo,int position){
CommonProto.AdventureStateInfo.Builder builder = CommonProto.AdventureStateInfo.newBuilder().setPositionId(position);
if(adventureStateInfo!=null){
int startTime = adventureStateInfo.getStartTime();
int now = (int)(System.currentTimeMillis()/1000);
int hourDuration = adventureStateInfo.getHourDuration();
int remainTime = startTime + hourDuration*60*60 - now;
remainTime = remainTime<0?0:remainTime;
builder.addAllHeroIdList(adventureStateInfo.getHeroIds())
.setHourDuration(hourDuration)
.setRemainTime(remainTime);
builder.addAllHeroIdList(adventureStateInfo.getHeroIds()).setStartTime(startTime);
}
return builder.build();
@ -205,7 +199,6 @@ public class CBean2Proto {
return CommonProto.MapAccomplishInfo.newBuilder() .setMapId(mapId)
.addAllExploreDetail(exploreDetailList)
.setTotalWeight(totalWeight)
.addAllHadTakedId(mapMission.getHadTakeRewardIds())
.build();
}

View File

@ -8,7 +8,7 @@ import com.ljsd.jieling.handler.map.MapManager;
import com.ljsd.jieling.handler.map.TemporaryItems;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.item.ItemLogic;
import com.ljsd.jieling.logic.fight.CombatLogic;
import com.ljsd.jieling.protocols.CommonProto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -396,12 +396,15 @@ public class ItemUtil {
}
public static List<CommonProto.Item > getAllItem(User user){
public static List<CommonProto.Item > getAllItem(User user) throws Exception {
List<CommonProto.Item > itemList = new ArrayList<>();
ItemManager itemManager = user.getItemManager();
Map<Integer, Item> itemMap = itemManager.getItemMap();
if (itemMap.size() !=0 ){
for (Map.Entry<Integer, Item> entry :itemMap.entrySet()){
if (entry.getKey() ==Global.STAMINA){
MapManager.getEnergy(user);
}
itemList.add(CBean2Proto.getItem(entry.getValue(),-1));
}
}
@ -495,6 +498,7 @@ public class ItemUtil {
if (itemMap == null) {
return true;
}
CombatLogic.getInstance().calAdvenrureReward(user,true,0);
TemporaryItems temporaryItems = user.getMapManager().getTemporaryItems();
Map<Integer, Item> temporaryItemList = new HashMap<>();
if (temporaryItems != null) {

View File

@ -7,21 +7,25 @@ import com.ljsd.jieling.protocols.FightInfoProto;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
public class MonsterUtil {
public static List<CommonProto.FightUnitInfo> getMonsterByGroup(int groupId){
public static Map<Integer, List<CommonProto.FightUnitInfo>> getMonsterByGroup(int groupId){
SMonsterGroup sMonsterGroup = SMonsterGroup.getsMonsterGroupMap().get(groupId);
int[][] groupIds = sMonsterGroup.getContents();
List<CommonProto.FightUnitInfo> monsterList = new CopyOnWriteArrayList<>();
Map<Integer, List<CommonProto.FightUnitInfo>> map = new ConcurrentHashMap<>();
Map<Integer, CommonProto.FightUnitInfo> monsterMap = SMonsterConfig.getMonsterMap();
for (int[] monsterIds : groupIds){
for (int monsterId: monsterIds){
for (int i = 0; i < groupIds.length; i++) {
int[] monsterIds = groupIds[i];
List<CommonProto.FightUnitInfo> monsterList = new CopyOnWriteArrayList<>();
for (int monsterId : monsterIds) {
monsterList.add(monsterMap.get(monsterId));
}
map.put(i,monsterList);
}
return monsterList;
return map;
}
public static String getMonsterSkillById(int monsterId){