| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030 |
- ---------------------------------------------------------------
- -- 指引
- -- db.guide.id 指引id
- -- db.guide.step 步骤
- -- db.guide.state 状态
- -- db.guide.cmd2id cmd->id
- -- db.guide.flags 特殊指引标记,是否完成
- ---------------------------------------------------------------
- local Config = require("Config")
- Json = Json or require("common.Json")
- local GuideExcel = require("excel.guide")
- local Util = require("common.Util")
- local Log = require("common.Log")
- local Msg = require("core.Msg")
- local ObjHuman = require("core.ObjHuman")
- local Grid = require("bag.Grid")
- local BagLogic = require("bag.BagLogic")
- local ItemDefine = require("bag.ItemDefine")
- local BattleLogic = require("battle.BattleLogic")
- local LoginSignLogic = require("loginSign.LoginSignLogic")
- local PanelDefine = require("broadcast.PanelDefine")
- local SceneHandler = require("scene.Handler")
- local RoleExcel = require("excel.role")
- local CombatLogic = require("combat.CombatLogic")
- local HeroGrid = require("hero.HeroGrid")
- local HeroLogic = require("hero.HeroLogic")
- local CombatDefine = require("combat.CombatDefine")
- local CombatPosLogic = require("combat.CombatPosLogic")
- local RoleDefine = require("role.RoleDefine")
- local CombatExcel = require("excel.combat")
- local OpenActExcel = require("excel.openAct")
- local OpenAct = require("present.OpenAct")
- local CommonDB = require("common.CommonDB")
- local OpenServerGiftLogic = require("present.OpenServerGiftLogic")
- local MaiDianDefine = require("MaiDian.MaiDianDefine")
- local MainDianLogic = require("MaiDian.MaiDianLogic")
- local GuideJumpExcel = require("excel.guideJump")
- local CommonDefine = require("common.CommonDefine")
- local WeiLen = 30
- local GUIDECMD_LIST = {"battle"}
- local GUIDEID_FIRST = 0
- local GUIDEID_SPECIALSID = 103
- local FORCE_GUIDE_CHANNEL_LIST = { --即使问卷调查选对游戏, 依然要强制新手引导的渠道
- [CommonDefine.CHANNEL_TAG_MINNIGAME] = true,
- }
- -- 指引中断处理方式
- SKIPTYPE_RESET = 0 -- 该指引重新从第一步开始
- SKIPTYPE_JUMP = 1 -- 该指引直接跳过
- SKIPTYPE_JUMP_NAME = 2 -- 改名跳过该指引
- SKIPTYPE_JUMP_DRAW = 3 -- 期间进行过高级抽奖,直接跳过
- SKIPTYPE_JUMP_HERO = 4 -- 期间获得过英雄,直接跳过
- SKIPTYPE_JUMP_HEROUP = 5 -- 英雄升级指定次数
- SKIPTYPE_JUMP_BATTLE_REWARD = 7 -- 战役通关奖励
- SKIPTYPE_JUMP_SHOPBUY = 8 -- 商店购买
- SKIPTYPE_JUMP_OL_REWARD = 9 -- 在线奖励
- SKIPTYPE_JUMP_LOGINSIGN = 10 -- 签到
- SKIPTYPE_JUMP_BATTLE_SD = 11 -- 战役扫荡
- SKIPTYPE_JUMP_BATTLE = 12 -- 战役
- SKIPTYPE_JUMP_BATTLE_EXP = 13 -- 是否领取经验
- SKIPTYPE_JUMP_LEVEL_GIFT = 14 -- 领取等级礼包
- SKIPTYPE_JUMP_OPEN_SERVER_GIFT = 15 -- 领取开服有礼礼包
- SKIPTYPE_JUMP_UPGRADE = 16 -- 英雄指定进阶次数
- SKIPTYPE_JUMP_JIBAN_GROUP = 17 -- 添加过羁绊组合
- SKIPTYPE_JUMP_JIEFENG_BAOJU = 18 -- 解封过宝具奖励
- SKIPTYPE_JUMP_BATTLE_GUAJI = 19 -- 领取过挂机奖励
- SKIPTYPE_JUMP_BARTASK = 20 -- 悬赏
- SKIPTYPE_JUMP_FINISH = 21 -- 直接全部跳过
- -- 状态
- STATE_DOING = 1 -- 进行中
- STATE_FINISH = 2 -- 完成
- GUIDE_COMBAT_INFO = GUIDE_COMBAT_INFO or { db = {} }
- -- 开服第8天 除了取名的指引 其余一律跳过
- local function initGuideHeroList()
- local combatConf = CombatExcel.gm[888888]
- if not combatConf then return end
- GUIDE_COMBAT_INFO.attacker = {}
- GUIDE_COMBAT_INFO.defender = {}
- GUIDE_COMBAT_INFO.atkFormation = combatConf.atkF
- GUIDE_COMBAT_INFO.defFormation = combatConf.defF
- local atkConf = nil
- for i = 1, CombatDefine.COMBAT_HERO_CNT do
- atkConf = nil
- for k, v in ipairs(combatConf.atk) do
- if i == v[2] then
- atkConf = v
- break
- end
- end
- if atkConf then
- GUIDE_COMBAT_INFO.attacker[i] = CombatLogic.createHeroObj(GUIDE_COMBAT_INFO, atkConf[1], atkConf[3], atkConf[4], i, atkConf[5])
- end
- atkConf = nil
- for k, v in ipairs(combatConf.def) do
- if i == v[2] then
- atkConf = v
- break
- end
- end
- if atkConf then
- GUIDE_COMBAT_INFO.defender[i] = CombatLogic.createHeroObj(GUIDE_COMBAT_INFO, atkConf[1], atkConf[3], atkConf[4], i, atkConf[5])
- end
- end
-
- GUIDE_COMBAT_INFO.init = 1
- end
- function initAfterHot()
- if GUIDE_COMBAT_INFO.combat ~= nil then
- return
- end
- GuideExcel = require("excel.guide")
- -- 初始化剧情动画
- initGuideHeroList()
- if not GUIDE_COMBAT_INFO.init then return end
- CombatLogic.combatGuide(GUIDE_COMBAT_INFO, GUIDE_COMBAT_INFO.atkFormation, GUIDE_COMBAT_INFO.attacker,
- GUIDE_COMBAT_INFO.defFormation, GUIDE_COMBAT_INFO.defender)
- end
- local function sendjumpinfo(human)
- local tMsgData = Msg.gc.GC_GUIDE_WENJUAN
- tMsgData.tList[0] = #GuideJumpExcel.Jump
- for nID, v in ipairs(GuideJumpExcel.Jump) do
- local tData = tMsgData.tList[nID]
- tData.nID = nID
- tData.szName = v.szName
- end
- tMsgData.tPrize[0] = #GuideJumpExcel.Prize[1].tPrize
- for index, v in ipairs(GuideJumpExcel.Prize[1].tPrize) do
- Grid.makeItem(tMsgData.tPrize[index], v[1], v[2])
- end
- Msg.send(tMsgData, human.fd)
- end
- local createRoleAwardArr = { {1203,1}, {118,10}, {101,5000000}, {112,1000} }
- local function sendCreateRoleAWard(human)
- local tMsgData = Msg.gc.GC_GUIDE_CTRATE_AWARD
- tMsgData.awardArr[0] = #createRoleAwardArr
- for i, itemInfo in ipairs(createRoleAwardArr) do
- Grid.makeItem(tMsgData.awardArr[i], itemInfo[1], itemInfo[2])
- end
- Msg.send(tMsgData, human.fd)
- end
- ------------------------------ data --------------------------------------
- -- 设置指引
- function setGuide(human, id, state, skipType)
- local cf = GuideExcel.main_guide[id]
- if not cf then return end
- human.db.guide = human.db.guide or {}
- local oldstate = human.db.guide.state
- local oldid = human.db.guide.id
- if (oldid == id) and (oldstate == state) then
- return -- 老的和新的一致
- end
- local guide = human.db.guide
- local oldcmdid = getGuideIDByCmd(human, cf.cmd)
- guide.id = id
- guide.state = state
- guide.step = 0
- guide.cmd2id = guide.cmd2id or {}
- guide.cmd2id[cf.cmd] = id
- guide.flags = nil
- if state == STATE_DOING then
- if oldcmdid < id then
- -- 触发指引给东西
- BagLogic.addItemList(human, cf.items, "guide")
- end
- end
-
- if state == STATE_FINISH then
- -- Log.write(Log.LOGID_OSS_GUIDE_MAIN, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip,
- -- human.pf or "", human.appid, id, skipType or 0)
- Log.write(Log.LOGID_OSS_GUIDE_MAIN, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, human.db.ip,
- human.pf or "", human.appid, id, skipType or 0)
- end
- end
- -- 获取id
- function getGuideID(human)
- if not human.db.guide then
- return
- end
- return human.db.guide.id
- end
- --
- function getGuideState(human)
- if not human.db.guide then
- return
- end
- return human.db.guide.state
- end
- function getGuideStep(human)
- if not human.db.guide then
- return 0
- end
- return human.db.guide.step or 0
- end
- function setGuideStep(human, step, sid)
- if not human.db.guide then
- return
- end
- human.db.guide.step = step
- if sid then
- --Log.write(Log.LOGID_OSS_GUIDE_SUB, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip, human.pf or "", human.appid, sid)
- Log.write(Log.LOGID_OSS_GUIDE_SUB, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, human.db.ip, human.pf or "", human.appid, sid)
- end
- end
- --
- function setLoginStep(human, id)
- human.guideLoginStep = nil
- local cf = GuideExcel.main_guide[id]
- if not cf then return end
- if #cf.loginList < 1 then return end
- human.guideLoginStep = {}
- for i, sid in ipairs(cf.loginList) do
- human.guideLoginStep[i] = sid
- end
- end
- function getLoginStep(human)
- if not human.guideLoginStep then
- return
- end
- return human.guideLoginStep[1]
- end
- function delLoginStep(human)
- if not human.guideLoginStep then return end
- for i = 1, #human.guideLoginStep do
- human.guideLoginStep[i] = human.guideLoginStep[i + 1]
- end
- if #human.guideLoginStep < 1 then
- human.guideLoginStep = nil
- end
- end
- -- 根据cmd获取id
- function getGuideIDByCmd(human, cmd)
- if not human.db.guide or
- not human.db.guide.cmd2id then
- return GUIDEID_FIRST
- end
- if not human.db.guide.cmd2id[cmd] then
- return GUIDEID_FIRST
- end
- return human.db.guide.cmd2id[cmd]
- end
- function isFinishGuideID(human, id)
- local cf = GuideExcel.main_guide[id]
- if not cf then return end
- local nowid = getGuideIDByCmd(human, cf.cmd)
- if nowid ~= id then
- return nowid > id
- end
- if getGuideID(human) == id then
- local state = getGuideState(human)
- return state == STATE_FINISH
- end
- return true
- end
- -- 获取当前类型 是否满足条件
- function getGuideSkip(human, skipType)
- local id = getGuideID(human)
- local state = getGuideState(human)
- if id and state == STATE_FINISH then
- return true
- end
- local cf = GuideExcel.main_guide[id]
- if not cf then return end
- if cf.skipType ~= skipType then return true end
- local isJump = nil
- if cf.skipType == SKIPTYPE_JUMP then
- isJump = true
- elseif cf.skipType == SKIPTYPE_JUMP_DRAW or
- cf.skipType == SKIPTYPE_JUMP_HERO or
- cf.skipType == SKIPTYPE_JUMP_SHOPBUY or
- cf.skipType == SKIPTYPE_JUMP_BATTLE or
- cf.skipType == SKIPTYPE_JUMP_JIEFENG_BAOJU or
- cf.skipType == SKIPTYPE_JUMP_BATTLE_GUAJI or
- cf.skipType == SKIPTYPE_JUMP_BATTLE_EXP or
- cf.skipType == SKIPTYPE_JUMP_BARTASK then
- if getDoSpecialGuide(human, cf.skipType) > 0 then
- isJump = true
- end
- elseif cf.skipType == SKIPTYPE_JUMP_NAME then
- if (human.db.changeNameCnt or 0) > 0 then
- isJump = true
- end
-
- elseif cf.skipType == SKIPTYPE_JUMP_HEROUP or
- cf.skipType == SKIPTYPE_JUMP_UPGRADE then
- if getDoSpecialGuide(human, cf.skipType) >= cf.skipArgs[1] then
- isJump = true
- end
- elseif cf.skipType == SKIPTYPE_JUMP_BATTLE_REWARD then
- if BattleLogic.isGetReward(human, cf.skipArgs[1] or 1) then
- isJump = true
- end
- elseif cf.skipType == SKIPTYPE_JUMP_OL_REWARD then
- if (human.db.onlineReward and human.db.onlineReward.id or 1) > 1 then
- isJump = true
- end
- elseif cf.skipType == SKIPTYPE_JUMP_LOGINSIGN then
- if not LoginSignLogic.isRed(human) or getDoSpecialGuide(human, cf.skipType) > 0 then
- isJump = true
- end
- elseif cf.skipType == SKIPTYPE_JUMP_BATTLE_SD then
- if (human.db.mopupDoCnt or 0) > 0 and getDoSpecialGuide(human, cf.skipType) > 0 then
- isJump = true
- end
- elseif cf.skipType == SKIPTYPE_JUMP_LEVEL_GIFT then
- if human.db.chongJi ~= nil then
- isJump = true
- end
- elseif cf.skipType == SKIPTYPE_JUMP_OPEN_SERVER_GIFT then
- local len = #OpenActExcel.openServerGift
- for i = 1,len do
- local state = OpenServerGiftLogic.getGiftState(human, i)
- if state ~= 1 and state ~= 0 then
- isJump = true
- break
- end
- end
- elseif cf.skipType == SKIPTYPE_JUMP_JIBAN_GROUP then
- for i = 1,CombatDefine.COMBAT_TYPE_MAX do
- local combatHeroDB = CombatPosLogic.getCombatHeroDB(human,i)
- if combatHeroDB and combatHeroDB.jiban then
- isJump = true
- break
- end
- end
- end
- return isJump
- end
- -- 是否触发过该特殊指引
- function getDoSpecialGuide(human, id)
- if not human.db.guide or
- not human.db.guide.flags then
- return 0
- end
- return human.db.guide.flags[id] or 0
- end
- -- 设置已触发
- function setDoSpecialGuide(human, id)
- human.db.guide = human.db.guide or {}
- human.db.guide.flags = human.db.guide.flags or {}
- local cnt = human.db.guide.flags[id] or 0
- human.db.guide.flags[id] = cnt + 1
- end
- -- 刷新指引状态
- function refreshGuide(human, isLogin)
- local id = getGuideID(human)
- local state = getGuideState(human)
- if id and state ~= STATE_FINISH then
- local conf = GuideExcel.main_guide[id]
- if not conf then
- assert(nil, " GuideExcel conf not have id : ".. id)
- end
- if conf.cmd == GUIDECMD_LIST[1] and conf.skipType == SKIPTYPE_JUMP_FINISH and isLogin then
- -- 完成此任务
- setGuide(human, id, STATE_FINISH, conf.skipType)
-
- while true do
- local pid = getGuideIDByCmd(human, GUIDECMD_LIST[1])
- if pid == GUIDEID_FIRST then
- break
- end
- local nid = getNextGuideID(pid, GUIDECMD_LIST[1])
- local cf = GuideExcel.main_guide[nid]
- if nid and cf and cf.cmd == GUIDECMD_LIST[1] then
- setGuide(human, nid, STATE_FINISH, cf.skipType)
- else
- break
- end
- end
-
- end
- return
- end
- local doSkip = false
- local fid = nil
- for _, cmd in ipairs(GUIDECMD_LIST) do
- local cond, skip, nid = nil
- while true do
- local pid = getGuideIDByCmd(human, cmd)
- nid = getNextGuideID(pid, cmd)
- cond = checkCondition(human, nid)
- local cf = GuideExcel.main_guide[nid]
-
- if nid and cf and cf.cmd == "lv" then
- -- 不重登的情况下 必须达成等级需求才跳过 没有开启活动
- local isSkip = false
- if cf.args[2] == 1 and not isLogin and human.db.lv >= cf.args[1] and not cond then
- setGuide(human, nid, STATE_FINISH, cf.skipType)
- isSkip = true
- end
- -- 重登的情况下 直接跳过
- if isLogin and human.db.lv >= cf.args[1] then
- setGuide(human, nid, STATE_FINISH, cf.skipType)
- isSkip = true
- end
- if not isSkip then break end
- else
- break
- end
- end
- if nid and cond then
- fid = nid
- break
- end
- end
- if (not fid) or (fid == id) then return end
- setGuide(human, fid, STATE_DOING)
- return true
- end
- -- 指引跳过/还原处理
- function skipGuide(human)
- local id = getGuideID(human)
- local state = getGuideState(human)
- if id and state == STATE_FINISH then
- return
- end
- local cf = GuideExcel.main_guide[id]
- if not cf then return end
- local isJump = nil
- if cf.skipType == SKIPTYPE_JUMP or
- cf.skipType == SKIPTYPE_JUMP_BARTASK then
- isJump = true
- elseif cf.skipType == SKIPTYPE_JUMP_DRAW or
- cf.skipType == SKIPTYPE_JUMP_HERO or
- cf.skipType == SKIPTYPE_JUMP_SHOPBUY or
- cf.skipType == SKIPTYPE_JUMP_BATTLE or
- cf.skipType == SKIPTYPE_JUMP_JIEFENG_BAOJU or
- cf.skipType == SKIPTYPE_JUMP_BATTLE_GUAJI or
- cf.skipType == SKIPTYPE_JUMP_BATTLE_EXP then
- if getDoSpecialGuide(human, cf.skipType) > 0 then
- isJump = true
- end
- elseif cf.skipType == SKIPTYPE_JUMP_NAME then
- if human.db.changeNameCnt ~= nil then
- isJump = true
- end
-
- elseif cf.skipType == SKIPTYPE_JUMP_HEROUP or
- cf.skipType == SKIPTYPE_JUMP_UPGRADE then
- if getDoSpecialGuide(human, cf.skipType) >= cf.skipArgs[1] then
- isJump = true
- end
- elseif cf.skipType == SKIPTYPE_JUMP_BATTLE_REWARD then
- if BattleLogic.isGetReward(human, cf.skipArgs[1] or 1) then
- isJump = true
- end
- elseif cf.skipType == SKIPTYPE_JUMP_OL_REWARD then
- if (human.db.onlineReward and human.db.onlineReward.id or 1) > 1 then
- isJump = true
- end
- elseif cf.skipType == SKIPTYPE_JUMP_LOGINSIGN then
- if not LoginSignLogic.isRed(human) or getDoSpecialGuide(human, cf.skipType) > 0 then
- isJump = true
- end
- elseif cf.skipType == SKIPTYPE_JUMP_BATTLE_SD then
- if (human.db.mopupDoCnt or 0) > 0 and getDoSpecialGuide(human, cf.skipType) > 0 then
- isJump = true
- end
- elseif cf.skipType == SKIPTYPE_JUMP_LEVEL_GIFT then
- if human.db.chongJi ~= nil then
- isJump = true
- end
- elseif cf.skipType == SKIPTYPE_JUMP_OPEN_SERVER_GIFT then
- local len = #OpenActExcel.openServerGift
- for i = 1,len do
- local state = OpenServerGiftLogic.getGiftState(human, i)
- if state ~= 1 and state ~= 0 then
- isJump = true
- break
- end
- end
- elseif cf.skipType == SKIPTYPE_JUMP_JIBAN_GROUP then
- for i = 1,CombatDefine.COMBAT_TYPE_MAX do
- local combatHeroDB = CombatPosLogic.getCombatHeroDB(human,i)
- if combatHeroDB and combatHeroDB.jiban then
- isJump = true
- break
- end
- end
- end
- if isJump then
- --跳过所有战斗
- for i = CombatDefine.COMBAT_TYPE1, CombatDefine.COMBAT_TYPE_MAX do
- CombatLogic.clientFinish(human, i, true)
- end
- return setGuide(human, id, STATE_FINISH, cf.skipType)
- end
- setGuideStep(human, nil)
- end
- ---------------------------- condition -----------------------------------
- GuideCondition = {}
- GuideCondition["lv"] = function(human, lv, checkAct)
- if not SceneHandler.canCharge(human) then
- return -- 如果不能充值,所有等级指引都不开
- end
- if checkAct and checkAct == 1 then
- if human.db.lv >= lv then
- for k, v in ipairs(OpenActExcel.openAct) do
- local flag = OpenAct.getOpenActTime(k)
- if flag == true then
- return true
- end
- end
- end
- else
- return human.db.lv >= lv
- end
- return false
- end
- -- 完成指定战役
- GuideCondition["battle"] = function(human, id)
- return (human.db.battleID or 1) > id
- end
- function checkCondition(human, id)
- local cf = GuideExcel.main_guide[id]
- if not cf then return end
- if cf.cmd == "" then return true end
- local func = GuideCondition[cf.cmd]
- if not func then return end
- return func(human, cf.args[1], cf.args[2])
- end
- ------------------------------ excel --------------------------------------
- -- 获取下一个指引id
- local GUIDEID_2_NEXTID = nil -- [cmd][preid] = nextid
- function getNextGuideID(id, cmd)
- if not GUIDEID_2_NEXTID then
- GUIDEID_2_NEXTID = {}
- local sids = {}
- for tid, cf in Util.pairsByKeys(GuideExcel.main_guide) do
- if #cf.guideList > 0 then
- local sid = sids[cf.cmd] or GUIDEID_FIRST
- GUIDEID_2_NEXTID[cf.cmd] = GUIDEID_2_NEXTID[cf.cmd] or {}
- GUIDEID_2_NEXTID[cf.cmd][sid] = tid
- sids[cf.cmd] = tid
- end
- end
- end
- if not GUIDEID_2_NEXTID[cmd] then
- return
- end
- return GUIDEID_2_NEXTID[cmd][id]
- end
- local SID_2_GUIDEID = nil
- local SID_2_GUIDESTEP = nil
- function getGuideIDBySid(sid)
- if not SID_2_GUIDEID then
- SID_2_GUIDEID = {}
- SID_2_GUIDESTEP = {}
- for id, cf in pairs(GuideExcel.main_guide) do
- for step, tsid in ipairs(cf.guideList) do
- SID_2_GUIDEID[tsid] = id
- SID_2_GUIDESTEP[tsid] = step
- end
- end
- end
- return SID_2_GUIDEID[sid], SID_2_GUIDESTEP[sid]
- end
- function getNextGuideIDByLv(lv)
- local minlv = nil
- local minid = nil
- for id, cf in pairs(GuideExcel.lv_guide) do
- if cf.cmd == "lv" and cf.dialog > 0 then
- local clv = cf.args[1]
- if clv > lv and (minlv == nil or clv < minlv) then
- minlv = clv
- minid = id
- end
- end
- end
- if not minid then return end
- return minid
- end
- local DIALOG_2_CONTENT = nil
- function getContentByDialog(dialog)
- if not dialog then return end
- if not DIALOG_2_CONTENT then
- DIALOG_2_CONTENT = {}
- for id, cf in pairs(GuideExcel.main_guide) do
- if cf.dialog > 0 then
- DIALOG_2_CONTENT[cf.dialog] = cf.content
- end
- end
- end
- return DIALOG_2_CONTENT[dialog]
- end
- local function getLvUpGetZuanshi(oldLv,newLv)
- local addZuanshi = 0
- for lv=1,#RoleExcel.exp do
- if lv > oldLv and lv <= newLv then
- addZuanshi = addZuanshi + RoleExcel.exp[lv].lvUpGetZuanshi
- end
- end
- return addZuanshi
- end
- ------------------------------- msg -------------------------------------
- function sendStep(human, sendNil)
- if not Config.HAS_GUIDE then return end -- 指引总开关
- local diffTime = os.time() - human.db.createTime
- if diffTime >= 7 * 86400 and human.db.lv >= 5 then
- return
- end
- if human.db.noguide and not sendNil then return end
- local id = (not sendNil) and getGuideID(human)
- local cf = id and GuideExcel.main_guide[id]
- local nextstep = getGuideStep(human) + 1
- local state = getGuideState(human)
- local msgRet = Msg.gc.GC_GUIDE_STEP
- msgRet.step[0] = 0
- if cf and state == STATE_DOING then
- local sid = getLoginStep(human) or cf.guideList[nextstep]
- local scf = sid and GuideExcel.sub_guide[sid]
- if scf then
- msgRet.step[0] = msgRet.step[0] + 1
- local net = msgRet.step[msgRet.step[0]]
- net.id = sid
- net.conditions = Json.Encode(scf.conditions)
- net.behavior = Json.Encode(scf.behavior)
- net.sound = scf.sound
- net.dialog = scf.dialog
- net.content = scf.content
- net.handid = scf.handid
- net.zhiyin = scf.zhiyin
- net.heroLhID = scf.herolhId
- net.skip = scf.skip
- if scf.behavior[1] == "openPanel" and scf.behavior[2] and
- scf.behavior[2][1] == PanelDefine.PANEL_ID_52 then
- local dialog = scf.behavior[2][2]
- net.content = getContentByDialog(dialog)
- end
- if scf.behavior[1] == "showAnima" and GUIDE_COMBAT_INFO.combat ~= nil then
- CombatLogic.sendCombatData(human, GUIDE_COMBAT_INFO.combat)
- end
- end
- end
- --Msg.trace(msgRet)
- Msg.send(msgRet, human.fd)
- end
- -- 能否下一步
- function canStepFinish(human, sid)
- local state = getGuideState(human)
- if state ~= STATE_DOING then return end
- if getLoginStep(human) == sid then -- 登录步骤
- delLoginStep(human)
- return true, getGuideID(human), 0
- end
- local id, step = getGuideIDBySid(sid)
- if not id then return end
- if getGuideID(human) ~= id then return end
- if sid >= 503 and sid <= 506 then
- local config = GuideExcel.main_guide[id]
- local oldStep = getGuideStep(human)
- local oldSid = config.guideList[oldStep]
- if oldSid < 502 or oldSid > 506 then
- return
- end
- -- if oldStep <
- else
- if getGuideStep(human) + 1 ~= step then return end
- end
-
- local cf = GuideExcel.main_guide[id]
- -- 升级次数
- if cf.skipType == SKIPTYPE_JUMP_HEROUP and cf.skipArgs[2] == sid then
- if getDoSpecialGuide(human, SKIPTYPE_JUMP_HEROUP) < cf.skipArgs[1] then
- return
- end
- end
- -- 进阶次数判定
- if cf.skipType == SKIPTYPE_JUMP_UPGRADE and cf.skipArgs[2] == sid then
- if getDoSpecialGuide(human, SKIPTYPE_JUMP_UPGRADE) < cf.skipArgs[1] then
- return
- end
- end
- return true, id, step
- end
- function stepFinish(human, sid, noSend)
- local isok, id, step = canStepFinish(human, sid)
- if isok then
- local cf = GuideExcel.main_guide[id]
- if step >= #cf.guideList then
- setGuide(human, id, STATE_FINISH)
- else
- setGuideStep(human, step, sid)
- MainDianLogic.MaiDian_Begin(human, MaiDianDefine.MAIDIAN_TYPE_GUIDE, {nValue = sid})
- end
- end
- if sid == GUIDEID_SPECIALSID and (not human.db.getCreateRoleAward or not human.db.bGetJumpPrize ) then
- if not human.db.getCreateRoleAward then
- sendCreateRoleAWard(human)
- else
- sendjumpinfo(human)
- end
- else
- refreshGuide(human)
- sendStep(human)
- end
- end
- local function isShowCreateAward(human)
- local id = getGuideID(human)
- local state = getGuideState(human)
- local isIn103Step = false
- if id and state == STATE_DOING then
- local cf = GuideExcel.main_guide[id]
- if cf and cf.guideList then
- local currentStep = getGuideStep(human)
- local currentSid = cf.guideList[currentStep + 1]
- if id == 100 and (not human.db.getCreateRoleAward or not human.db.bGetJumpPrize) then
- isIn103Step = true
- end
- -- if currentSid == GUIDEID_SPECIALSID then
- -- isIn103Step = true
- -- if not human.db.getCreateRoleAward then
- -- sendCreateRoleAWard(human)
- -- else
- -- sendjumpinfo(human)
- -- end
- -- end
- end
- end
- return isIn103Step
- end
- -- 登录回调
- function onLogin(human)
- local isIn103Step = isShowCreateAward(human)
- -- 过了领取创角奖励和问卷调查这两个步骤后才执行跳过逻辑
- if not isIn103Step then
- skipGuide(human)
- refreshGuide(human, true)
- else
- if not human.db.getCreateRoleAward then
- return sendCreateRoleAWard(human)
- else
- if not human.db.bGetJumpPrize then
- return sendjumpinfo(human)
- end
- end
- end
- if getGuideState(human) == STATE_DOING then
- setLoginStep(human, getGuideID(human))
- sendStep(human)
- end
- sendLvGuide(human)
- if human.db.lv and human.db.lv <= 4 then
- local nID = getGuideID(human)
- local nMaxID = 0
- for i, v in pairs(GuideExcel.main_guide) do
- nMaxID = math.max(nMaxID, i)
- end
- if nMaxID == nID then
- local tMsgData = Msg.gc.GC_GUIDE_WENJUAN_JUMPOK
- Msg.send(tMsgData, human.fd)
- end
- end
- end
- -- 升级回调
- function onLvUpCB(human, oldLv, newLv)
- local giveZuanshi = getLvUpGetZuanshi(oldLv,newLv)
- if giveZuanshi > 0 then
- ObjHuman.addZuanshi(human, giveZuanshi, "level_up")
- end
- local id = getNextGuideIDByLv(newLv)
- local cf = id and GuideExcel.lv_guide[id]
- local msgRet = Msg.gc.GC_LEVEL_UP
- local net = msgRet.data
- net.oldLv = oldLv
- net.newLv = newLv
- net.items[0] = 0
- if giveZuanshi > 0 then
- net.items[0] = net.items[0] + 1
- Grid.makeItem(net.items[net.items[0]], ItemDefine.ITEM_ZUANSHI_ID, giveZuanshi)
- end
- net.dialog = cf and cf.dialog or 0
- net.dialogName = cf and cf.dialogName or ""
- net.content = cf and cf.content or ""
- net.noticeLv = cf and cf.args[1] or 0
- net.panelId = cf and cf.panelId or 0
- Msg.send(msgRet, human.fd)
- end
- -- 等级指引
- local function makeLvGuideNet(net, id, human)
- local cf = GuideExcel.lv_guide[id]
- net.id = id
- net.noticeLv = cf and cf.args[1] or 0
- net.panelId = cf and cf.panelId or 0
- net.status = human.db.lvGuide and human.db.lvGuide[id] or 0
- local len = 0
- for k, v in ipairs(cf.guideList) do
- len = len + 1
- net.guideList[len] = v
- end
- net.guideList[0] = len
- end
- --推送等级指引
- function sendLvGuide(human)
- local msgRet = Msg.gc.GC_LEVEL_GUIDE
- local len = 0
- for k, v in ipairs(GuideExcel.lv_guide) do
- len = len + 1
- local net = msgRet.data[len]
- makeLvGuideNet(net, k, human)
- end
- msgRet.data[0] = len
- Msg.send(msgRet, human.fd)
- end
- --
- function stepLvFinish(human, id)
- local cf = GuideExcel.lv_guide[id]
- if not cf then
- if human.db.lvGuide and human.db.lvGuide[id] then
- human.db.lvGuide[id] = nil
- end
- return
- end
- human.db.lvGuide = human.db.lvGuide or {}
- human.db.lvGuide[id] = 1
- end
- --
- function stepLvInfo(human, id, guideId)
- if not Config.HAS_GUIDE then return end -- 指引总开关
- local diffTime = os.time() - human.db.createTime
- if diffTime >= 7 * 86400 and human.db.lv >= 5 then
- return
- end
-
- local cf = id and GuideExcel.lv_guide[id]
- if not cf then return end
- local msgRet = Msg.gc.GC_GUIDE_STEP
- msgRet.step[0] = 0
- local scf = GuideExcel.sub_guide[guideId]
- if scf then
- msgRet.step[0] = msgRet.step[0] + 1
- local net = msgRet.step[msgRet.step[0]]
- net.id = guideId
- net.conditions = Json.Encode(scf.conditions)
- net.behavior = Json.Encode(scf.behavior)
- net.sound = scf.sound
- net.dialog = scf.dialog
- net.content = scf.content
- net.handid = scf.handid
- net.zhiyin = scf.zhiyin
- net.heroLhID = scf.herolhId
- net.skip = scf.skip
-
- if scf.behavior[1] == "openPanel" and scf.behavior[2] and
- scf.behavior[2][1] == PanelDefine.PANEL_ID_52 then
- local dialog = scf.behavior[2][2]
- net.content = getContentByDialog(dialog)
- end
- end
-
- Msg.send(msgRet, human.fd)
- end
- -- 通用回调
- function onCallback(human)
- if not refreshGuide(human) then
- return
- end
- if getGuideState(human) ~= STATE_DOING then
- return
- end
- sendStep(human)
- return true
- end
- -- 临时 容错
- function checkAllFinish(human)
- if not Config.HAS_GUIDE then return 1 end
- -- local lastConfig = GuideExcel.main_guide[1200]
- -- local lastID = lastConfig.guideList[#lastConfig.guideList]
- -- local isFinish = isFinishGuideID(human, 1200)
- return isFinishGuideID(human, 1200) and 1 or 0
- end
- function stepwenjuanchose(human, szChoseID)
- local tChoseID = Util.split(szChoseID, "|")
- local bJump = false
- if tChoseID and nil ~= _G.next(tChoseID) then
- for _, key in ipairs(tChoseID) do
- local nID = tonumber(key)
- if GuideJumpExcel.Jump[nID] and GuideJumpExcel.Jump[nID].bJump
- and GuideJumpExcel.Jump[nID].bJump == 1 then
- bJump = true
- break
- end
- end
- end
- if not human.db.bGetJumpPrize then
- local tPrize = GuideJumpExcel.Prize[1].tPrize
- BagLogic.addItemList(human, tPrize, "guide")
-
- human.db.bGetJumpPrize = true
- end
- if true == bJump and not FORCE_GUIDE_CHANNEL_LIST[human.phpChanelID] then
- local nMaxID = 0
- for nID, v in pairs(GuideExcel.main_guide) do
- nMaxID = math.max(nMaxID, nID)
- end
- print("[stepwenjuanchose] 设置完成主线 nMaxID = "..nMaxID)
- setGuide(human, nMaxID, STATE_FINISH)
- local tMsgData = Msg.gc.GC_GUIDE_WENJUAN_JUMPOK
- Msg.send(tMsgData, human.fd)
- ObjHuman.save(human)
- else
- refreshGuide(human)
- sendStep(human)
- end
- end
- -- 领取创角奖励
- function GetCreateRoleAward(human)
- if not human.db.getCreateRoleAward then
- local itemArr = {}
- for i, itemInfo in ipairs(createRoleAwardArr) do
- itemArr[i] = {itemInfo[1], itemInfo[2]}
- end
- BagLogic.addItemList(human, itemArr, "guide")
- human.db.getCreateRoleAward = true
- end
- sendjumpinfo(human)
- end
|