| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469 |
- local Msg = require("core.Msg")
- local BagLogic = require("bag.BagLogic")
- local Grid = require("bag.Grid")
- local ChengjiuExcel = require("excel.chengjiu").chengjiu
- local GroupExcel = require("excel.chengjiu").group
- local HeroLogic = require("hero.HeroLogic")
- local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
- local RoleDBLogic = require("role.RoleDBLogic")
- local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
- local ObjHuman = require("core.ObjHuman")
- local CombatObj = require("combat.CombatObj")
- local CombatDefine = require("combat.CombatDefine")
- local ChengjiuDefine = require("chengjiu.ChengjiuDefine")
- local CombatPosLogic = require("combat.CombatPosLogic")
- local RoleAttr = require("role.RoleAttr")
- local GuideLogic = require("guide.GuideLogic")
- local DB = require("common.DB")
- local LuaMongo = _G.lua_mongo
- --[[
- human.db.chengjiu = {}
- human.db.chengjiu.task = {}
- human.db.chengjiu.group = {}
- human.db.chengjiu.task[taskID] = state -- 单个任务对应完成状态
- human.db.chengjiu.type[taskType] = cnt -- 任务类型对应完成次数
- human.db.chengjiu.group[groupID] = state -- 任务组对应完成状态
- human.db.chengjiu.privilege[privilege] = value -- 玩家已获取奖励累积
- human.db.chengjiu.attr[key] = value -- 玩家已获取属性奖励累计
- ]]
- local CJ_TASK_STATE_0 = 0 -- 任务状态 未达成
- local CJ_TASK_STATE_1 = 1 -- 任务状态 可解封
- local CJ_TASK_STATE_2 = 2 -- 任务状态 已解封
- local CJ_GROUP_STATE_0 = 0 -- 任务组状态 未开放
- local CJ_GROUP_STATE_1 = 1 -- 任务组状态 已开放
- local CJ_GROUP_STATE_2 = 2 -- 任务组状态 已达成
- local CJ_PARAM_TYPE = {}
- function initAfterHot()
- for k,v in pairs(ChengjiuExcel) do
- CJ_PARAM_TYPE[v.type] = v.paramType
- end
- end
- local function makePrivilegeNet(data,net,type)
- if type then
- local lenth = #data
- for i = 1,lenth do
- net[0] = net[0] + 1
- net[net[0]].key = data[i][1]
- net[net[0]].value = data[i][2]
- end
- else
- if data.privilege then
- for k,v in pairs(data.privilege) do
- net[0] = net[0] + 1
- net[net[0]].key = k
- net[net[0]].value = v
- end
- end
- if data.attrs then
- for k,v in pairs(data.attrs) do
- net[0] = net[0] + 1
- net[net[0]].key = k
- net[net[0]].value = v
- end
- end
- end
- end
- local function makeChengjiuNet(human,config,net,id)
- net.groupID = config.group
- net.taskID = id
- net.desc = config.desc
- net.curCnt = 0
- net.state = CJ_TASK_STATE_0
- if human.db.chengjiu.type and human.db.chengjiu.type[config.type] then
- net.curCnt = human.db.chengjiu.type[config.type]
- end
- if human.db.chengjiu.task and human.db.chengjiu.task[id] then
- net.state = human.db.chengjiu.task[id]
- end
- net.maxCnt = config.param
- net.goDot = 0
- net.privilege[0] = 0
- makePrivilegeNet(config.privilege,net.privilege,1)
- makePrivilegeNet(config.attr,net.privilege,1)
- net.panelID = config.panelID
- local len = #config.items
- for i = 1,len do
- Grid.makeItem(net.items[i],config.items[i][1],config.items[i][2])
- end
- net.items[0] = len
-
- local groupConfig = GroupExcel[config.group]
- if config.group <= 4 and human.chengJiuGo and human.chengJiuGo[config.group] and human.chengJiuGo[config.group][id] then
- elseif config.group <= 4 and net.state == CJ_TASK_STATE_0 and human.db.lv >= groupConfig.lv then
- net.goDot = 1
- end
- end
- local function makeChengjiuList(human,config,net,id)
- net.groupID = id
- net.lv = config.lv
- net.state = CJ_GROUP_STATE_1
- if human.db.chengjiu.group and human.db.chengjiu.group[id] then
- net.state = human.db.chengjiu.group[id]
- end
- if config.lv > human.db.lv then
- net.state = CJ_GROUP_STATE_0
- end
- net.dot = 0
- for _,taskId in pairs(config.member) do
- if human.db.chengjiu.task and human.db.chengjiu.task[taskId] == 1 then
- net.dot = 1
- break
- end
- end
- local state = CJ_TASK_STATE_0
- if id <= 4 and net.dot == 0 and net.state == CJ_GROUP_STATE_1 then
- for _,taskId in pairs(config.member) do
- if human.chengJiuGo and human.chengJiuGo[id] and human.chengJiuGo[id][taskId] then
- else
- state = CJ_TASK_STATE_0
- if human.db.chengjiu and human.db.chengjiu.task and human.db.chengjiu.task[taskId] then
- state = human.db.chengjiu.task[taskId]
- end
-
- if state == CJ_TASK_STATE_0 then
- net.dot = 1
- break
- end
- end
- end
- end
- end
- function chenJiuGo(human, groupID, taskID)
- human.chengJiuGo = human.chengJiuGo or {}
- human.chengJiuGo[groupID] = human.chengJiuGo[groupID] or {}
- human.chengJiuGo[groupID][taskID] = 1
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_2001)
- end
- function query(human,groupID,type)
- if groupID == 0 then
- groupID = 1
- for k,v in pairs(GroupExcel) do
- if human.db.chengjiu.group and human.db.chengjiu.group[k] == nil then
- groupID = k
- break
- end
- end
- end
- local msgRet = Msg.gc.GC_CHENGJIU_QUERY
- msgRet.groupID = groupID
- msgRet.type = type
- local taskLen = 0
- for k,v in pairs(ChengjiuExcel) do
- if groupID == v.group then
- taskLen = taskLen + 1
- makeChengjiuNet(human,v,msgRet.task[taskLen],k)
- end
- end
- msgRet.task[0] = taskLen
- local listLen = 0
- for k,v in pairs(GroupExcel) do
- listLen = listLen + 1
- makeChengjiuList(human,v,msgRet.list[listLen],k)
- end
- msgRet.list[0] = listLen
- msgRet.tips[0] = 0
- makePrivilegeNet(human.db.chengjiu,msgRet.tips)
- Msg.send(msgRet,human.fd)
- end
- function isFinish(human,taskID)
- local config = ChengjiuExcel[taskID]
- if not config then return end
- local groupConfig = GroupExcel[config.group]
- if not groupConfig then return end
- -- 任务校验错误
- if human.db.chengjiu.task == nil or
- human.db.chengjiu.task[taskID] == nil or
- config == nil or
- groupConfig.lv > human.db.lv then
- return
- end
- -- 当前任务类型达成次数不足
- if human.db.chengjiu.type == nil or
- human.db.chengjiu.type[config.type] == nil then
- return
- end
- -- 当前领取任务状态不为可领取
- if human.db.chengjiu.task[taskID] ~= CJ_TASK_STATE_1 then
- return
- end
- return true
- end
- function getReward(human,taskID)
- local config = ChengjiuExcel[taskID]
- if not config then return end
- local groupConfig = GroupExcel[config.group]
- if not groupConfig then return end
-
- -- 任务校验错误
- if human.db.chengjiu.task == nil or
- human.db.chengjiu.task[taskID] == nil or
- config == nil or
- groupConfig.lv > human.db.lv then
- return
- end
- -- 当前任务类型达成次数不足
- if human.db.chengjiu.type == nil or
- human.db.chengjiu.type[config.type] == nil then
- return
- end
- -- 当前领取任务状态不为可领取
- if human.db.chengjiu.task[taskID] ~= CJ_TASK_STATE_1 then
- return
- end
- human.db.chengjiu.task[taskID] = CJ_TASK_STATE_2
- local isOver = 1
- for k,v in pairs(ChengjiuExcel) do
- if v.group == config.group then
- -- 同组任务没有完成
- if human.db.chengjiu.task[k] == nil or
- human.db.chengjiu.task[k] ~= CJ_TASK_STATE_2 then
- isOver = 0
- break
- end
- end
- end
- if isOver == 1 then
- human.db.chengjiu.group = human.db.chengjiu.group or {}
- human.db.chengjiu.group[config.group] = CJ_GROUP_STATE_2
- end
- -- 给道具奖励
- for i = 1,#config.items do
- BagLogic.addItem(human, config.items[i][1],config.items[i][2], "chengjiu")
- end
-
- -- 给特权奖励
- for _,v in pairs(config.privilege) do
- human.db.chengjiu.privilege = human.db.chengjiu.privilege or {}
- human.db.chengjiu.privilege[v[1]] = human.db.chengjiu.privilege[v[1]] or 0
- human.db.chengjiu.privilege[v[1]] = human.db.chengjiu.privilege[v[1]] + v[2]
- addPrivilegeDo(human,v[1])
- end
- -- 给属性奖励
- for k,v in pairs(config.attr) do
- human.db.chengjiu.attrs = human.db.chengjiu.attrs or {}
- human.db.chengjiu.attrs[v[1]] = human.db.chengjiu.attrs[v[1]] or 0
- human.db.chengjiu.attrs[v[1]] = human.db.chengjiu.attrs[v[1]] + v[2]
- RoleAttr.cleanHeroAttrCache(human)
- end
- local msgRet = Msg.gc.GC_CHENGJIU_GET
- msgRet.taskID = taskID
- Msg.send(msgRet,human.fd)
- --query(human,config.group)
-
- GuideLogic.setDoSpecialGuide(human, GuideLogic.SKIPTYPE_JUMP_JIEFENG_BAOJU)
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_2001)
- end
- -- 回调
- function onCallback(human,taskType,cnt)
- if CJ_PARAM_TYPE[taskType] == 1 then
- human.db.chengjiu.type = human.db.chengjiu.type or {}
- human.db.chengjiu.type[taskType] = human.db.chengjiu.type[taskType] or 0
- human.db.chengjiu.type[taskType] = human.db.chengjiu.type[taskType] + cnt
- else
- human.db.chengjiu.type = human.db.chengjiu.type or {}
- human.db.chengjiu.type[taskType] = cnt
- end
- local touchCnt = human.db.chengjiu.type[taskType]
- for k,v in pairs(ChengjiuExcel) do
- local config = GroupExcel[v.group]
- if v.type == taskType and
- human.db.lv >= config.lv and
- touchCnt >= v.param and
- (human.db.chengjiu.task == nil or
- human.db.chengjiu.task[k] == CJ_TASK_STATE_0 or
- human.db.chengjiu.task[k] == nil) then
- human.db.chengjiu.task = human.db.chengjiu.task or {}
- human.db.chengjiu.task[k] = CJ_TASK_STATE_1
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_2001)
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_2002)
-
- local msgRet = Msg.gc.GC_CHENGJIU_SET
- msgRet.taskID = k
- msgRet.groupID = v.group
- msgRet.desc = v.desc
- Msg.send(msgRet,human.fd)
- end
- end
- end
- -- 检查任务
- function checkTaskState(human)
- for k,v in pairs(ChengjiuExcel) do
- local config = GroupExcel[v.group]
- local touchCnt = 0
- if human.db.chengjiu.type and human.db.chengjiu.type[v.type] then
- touchCnt = human.db.chengjiu.type[v.type]
- end
- if human.db.lv >= config.lv and
- touchCnt >= v.param and
- (human.db.chengjiu.task == nil or
- human.db.chengjiu.task[k] ~= CJ_TASK_STATE_2) then
- human.db.chengjiu.task = human.db.chengjiu.task or {}
- human.db.chengjiu.task[k] = CJ_TASK_STATE_1
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_2001)
- local msgRet = Msg.gc.GC_DAILYSHARE_SET
- msgRet.type = 2
- msgRet.desc = v.desc
- Msg.send(msgRet,human.fd)
- end
- end
- end
- -- 回调
- function onLvUp(human)
- checkTaskState(human)
- end
- function isDot(human)
- if not RoleSystemLogic.isOpen(human, RoleSystemDefine.ROLE_SYS_ID_2001) then
- return
- end
- for i = 1, 4 do
- local needLv = GroupExcel[i].lv
- if needLv <= human.db.lv then
- for k, id in ipairs( GroupExcel[i].member) do
- if human.chengJiuGo and human.chengJiuGo[i] and human.chengJiuGo[i][id] then
- else
- if human.db.chengjiu.task and human.db.chengjiu.task[id] and human.db.chengjiu.task[id] ~= CJ_TASK_STATE_0 then
- else
- return true
- end
-
- end
- end
- end
- end
- if human.db.chengjiu.task == nil then
- return
- end
- for k,v in pairs(human.db.chengjiu.task) do
- if ChengjiuExcel[k] then
- local groupID = ChengjiuExcel[k].group
- local needLv = GroupExcel[groupID].lv
- if v == CJ_TASK_STATE_1 and human.db.lv >= needLv then
- return true
- end
- end
- end
- return
- end
- function onCallbackByUuid(uuid,taskType,cnt)
- local target = ObjHuman.onlineUuid[uuid]
- if target and target.fd then
- onCallback(target,taskType,cnt)
- else
- local fakeDB = RoleDBLogic.getDb(uuid)
- if fakeDB then
- local fakeHuman = {}
- fakeHuman.db = fakeDB
- if onCallback(fakeHuman,taskType,cnt) then
- ObjHuman.save(fakeHuman)
- end
- end
- end
- end
- -- 计算特权
- function addPrivilegeDo(human,privilege)
- -- 解锁援军
- if privilege == ChengjiuDefine.PRIVILEGE_TYPE_6 then
- CombatPosLogic.activeBackup(human)
- -- 解锁守护之龙
- elseif privilege == ChengjiuDefine.PRIVILEGE_TYPE_8 then
- RoleAttr.cleanHeroAttrCache(human)
- -- 增加栏位
- elseif privilege == ChengjiuDefine.PRIVILEGE_TYPE_1 then
- HeroLogic.sendHeroBagCap(human)
- end
- end
- -- 计算属性
- function doCalcHero(human, attrs)
- if human and human.db and human.db.chengjiu and human.db.chengjiu.attrs then
- for k, v in pairs(human.db.chengjiu.attrs) do
- if v > 0 then
- RoleAttr.updateValue(k, v, attrs)
- end
- end
- end
- end
- -- 检查特权是否激活
- function checkPrivilege(human,priType)
- if not human or not human.db or not human.db.chengjiu then return end
- if human.db.chengjiu.privilege == nil or human.db.chengjiu.privilege[priType] == nil or human.db.chengjiu.privilege[priType] == 0 then
- return
- end
- return human.db.chengjiu.privilege[priType]
- end
- --
- function initAfterHotTemp()
- local taskID = 402
- local config = ChengjiuExcel[taskID]
- LuaMongo.find(DB.db_char)
- local DBUpdate = {}
- while true do
- local data = {}
- if not LuaMongo.next(DB.db_char, data) then
- break
- end
- DBUpdate._id = data._id
- if data.chengjiu.task and
- data.chengjiu.task[taskID] and
- data.chengjiu.task[taskID] == CJ_TASK_STATE_2 and
- config then
- -- 给特权奖励
- for _,v in pairs(config.privilege) do
- data.chengjiu.privilege = data.chengjiu.privilege or {}
- data.chengjiu.privilege[v[1]] = v[2]
- local human = ObjHuman.onlineUuid[data._id]
- if human then
- human.db.chengjiu.privilege[v[1]] = v[2]
- else
- data._id = nil
- local updateDb = {}
- updateDb["$set"] = data
- LuaMongo.update(DB.db_char, DBUpdate, updateDb)
- end
- end
- end
- end
- end
|