| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377 |
- local Msg = require("core.Msg")
- local Grid = require("bag.Grid")
- local BagLogic = require("bag.BagLogic")
- local AbsActLogic = require("absAct.AbsActLogic")
- local Broadcast = require("broadcast.Broadcast")
- local Lang = require("common.Lang")
- local Config = require("excel.commonact").ectype
- local CommonDefine = require("common.CommonDefine")
- local Util = require("common.Util")
- local CombatDefine = require("combat.CombatDefine")
- local CombatLogic = require("combat.CombatLogic")
- local YunYingLogic = require("yunying.YunYingLogic")
- local AbsActExcel = require("excel.absAct")
- local COMMONACTBOSSABSID = 7501
- local COMMONACTFREENUM = 3 -- 免费挑战次数
- local COMMONACTDAYID = 99
- local COMMONACTBOOSPRIZE = 1 -- BOSS奖励类型
- local COMMONACTFIGHTPRIZE = 2 -- 战斗奖励类型
- local CommonAct_BossID = nil
- local CommonAct_MapID = nil
- local function ComActBoss_CreateDB(human)
- if not human.db.absAct[COMMONACTBOSSABSID] then
- human.db.absAct[COMMONACTBOSSABSID] = {}
- end
-
- human.db.absAct[COMMONACTBOSSABSID].tBossInfo = {
- nFreeNum = COMMONACTFREENUM,
- nFreeTime = os.time(),
- nDamage = 0,
- tPrizeInfo = {}
- }
- for nID, v in pairs(Config) do
- if nID ~= COMMONACTDAYID then
- human.db.absAct[COMMONACTBOSSABSID].tBossInfo.tPrizeInfo[nID] = CommonDefine.COMMON_PRIZE_STATE_NOGET
- end
- end
- end
- -- 检测并创建DB数据
- local function ComActBoss_CheckAndCreateDB(human)
- if not human.db.absAct[COMMONACTBOSSABSID] or not human.db.absAct[COMMONACTBOSSABSID].tBossInfo then
- ComActBoss_CreateDB(human)
- end
- end
- -- 获取奖励数据
- local function CommonActBoss_GetPrizeData(human)
- return human.db.absAct[COMMONACTBOSSABSID].tBossInfo.tPrizeInfo
- end
- -- 获取奖励状态
- local function CommonActBoss_GetPrizeStatus(human, nID)
- local tPrizeInfo = CommonActBoss_GetPrizeData(human)
-
- return tPrizeInfo[nID]
- end
- -- 设置奖励状态
- local function CommonActBoss_SetPrizeStatus(human, nID, nValue)
- local tPrizeInfo = CommonActBoss_GetPrizeData(human)
- tPrizeInfo[nID] = nValue
- end
- -- 获取总伤害
- local function CommonActBoss_GetDamage(human)
- return human.db.absAct[COMMONACTBOSSABSID].tBossInfo.nDamage
- end
- -- 增加总伤害
- local function CommonActBoss_AddDamage(human, nNum)
- human.db.absAct[COMMONACTBOSSABSID].tBossInfo.nDamage = human.db.absAct[COMMONACTBOSSABSID].tBossInfo.nDamage + nNum
- end
- -- 获取免费次数
- local function CommonActBoss_GetFreeNum(human)
- return human.db.absAct[COMMONACTBOSSABSID].tBossInfo.nFreeNum
- end
- -- 设置免费次数
- local function CommonActBoss_SetFreeNum(human, nNum)
- human.db.absAct[COMMONACTBOSSABSID].tBossInfo.nFreeNum = nNum
- end
- -- 获取免费刷新时间
- local function CommonActBoss_GetFreeTime(human)
- return human.db.absAct[COMMONACTBOSSABSID].tBossInfo.nFreeTime
- end
- -- 设置免费刷新时间
- local function CommonActBoss_SetFreeTime(human, nTime)
- human.db.absAct[COMMONACTBOSSABSID].tBossInfo.nFreeTime = nTime
- end
- local function CommonActBoss_IsPrizeRed(human)
- for nID, v in pairs(Config) do
- if nID ~= COMMONACTDAYID then
- local nState = CommonActBoss_GetPrizeStatus(human, nID)
- if nState == CommonDefine.COMMON_PRIZE_STATE_CANGET then
- return true
- end
- end
- end
- return false
- end
- function isRed(human)
- local state, nEndTime, nOpenTime = AbsActLogic.isStarted(human, COMMONACTBOSSABSID)
- if not state then
- return false
- end
- ComActBoss_CheckAndCreateDB(human)
- local nFreeNum = CommonActBoss_GetFreeNum(human)
- if nFreeNum > 0 then
- return true
- end
- return CommonActBoss_IsPrizeRed(human)
- end
- function isOpen(human, YYInfo, funcConfig)
- local state, endTime, startTime = AbsActLogic.isStarted(human, funcConfig and funcConfig.funcID or COMMONACTBOSSABSID)
- if not state then
- print("[CommonActBoss_isOpen] 当前活动未开启")
- return
- end
- -- print("[CommonActBoss_isOpen] 进入判断 endTime = "..endTime.." startTime = "..startTime)
- return true, endTime, startTime
- end
- function isActive(human, YYInfo, funcConfig)
- return not isOpen(human, YYInfo, funcConfig)
- end
- function onZero(human, funcID)
- local state, nEndTime, nOpenTime = AbsActLogic.isStarted(human, COMMONACTBOSSABSID)
- if not state then
- return
- end
- CommonActBoss_SetFreeNum(human, COMMONACTFREENUM)
- CommonActBoss_SetFreeTime(human, os.time())
- end
- function onLogin(human, funcID)
- local state, nEndTime, nOpenTime = AbsActLogic.isStarted(human, COMMONACTBOSSABSID)
- if not state then
- return
- end
- ComActBoss_CheckAndCreateDB(human)
- local nFreeRefreshTime = CommonActBoss_GetFreeTime(human)
- if true ~= Util.isSameDayByTimes(nFreeRefreshTime, os.time()) then
- CommonActBoss_SetFreeNum(human, COMMONACTFREENUM)
- CommonActBoss_SetFreeTime(human, os.time())
- end
- end
- ------------------------------------ 客户端请求处理开始 ---------------------------------
- function CommonActBoss_Query(human)
- local state = AbsActLogic.isStarted(human, COMMONACTBOSSABSID)
- if not state then
- print("[CommonActBoss_Query] 当前活动未开启")
- return
- end
- ComActBoss_CheckAndCreateDB(human)
- local tMsgData = Msg.gc.GC_ABS_FESTIVAL_BOSS_QUERY
- tMsgData.nNum = CommonActBoss_GetFreeNum(human)
- tMsgData.nMaxNum = COMMONACTFREENUM
- tMsgData.nHarm = CommonActBoss_GetDamage(human)
- tMsgData.bRedPrize = CommonActBoss_IsPrizeRed(human) == true and 1 or 0
- Msg.send(tMsgData, human.fd)
- end
- function CommonActBoss_QueryPrize(human)
- local tMsgData = Msg.gc.GC_ABS_FESTIVAL_BOSS_REWARD
- tMsgData.tPrize[0] = 0
- for nID, v in pairs(Config) do
- if v.nType == COMMONACTBOOSPRIZE then
- tMsgData.tPrize[0] = tMsgData.tPrize[0] + 1
- local tData = tMsgData.tPrize[tMsgData.tPrize[0]]
- tData.nID = nID
- tData.nHarm = v.hurt
- tData.nState = CommonActBoss_GetPrizeStatus(human, nID)
- tData.tPrize[0] = #v.tPrize
- for i, value in ipairs(v.tPrize) do
- Grid.makeItem(tData.tPrize[i], value[1], value[2])
- end
- end
- end
- Msg.send(tMsgData, human.fd)
- end
- function CommonActBoss_GetPrize(human)
- local tItem = {}
- for nID, v in pairs(Config) do
- if v.nType == COMMONACTBOOSPRIZE then
- local nState = CommonActBoss_GetPrizeStatus(human, nID)
- if CommonDefine.COMMON_PRIZE_STATE_CANGET == nState then
- CommonActBoss_SetPrizeStatus(human, nID, CommonDefine.COMMON_PRIZE_STATE_GET)
- for i, value in ipairs(v.tPrize) do
- if not tItem[value[1]] then
- tItem[value[1]] = 0
- end
- tItem[value[1]] = tItem[value[1]] + value[2]
- end
- end
- end
- end
- if nil ~= _G.next(tItem) then
- local tGoods = {}
- for nID, nNum in pairs(tItem) do
- table.insert(tGoods, {nID, nNum})
- end
- BagLogic.addItemList(human, tGoods, "CommonActBoss")
- CommonActBoss_Query(human)
- CommonActBoss_QueryPrize(human)
- YunYingLogic.sendBanner(human)
- local config = AbsActExcel.absActivity[COMMONACTBOSSABSID]
- YunYingLogic.sendGroupUpdate(YYInfo[COMMONACTBOSSABSID], human, config.panelID)
- end
- end
- ------------------------------------ 战斗处理开始 ---------------------------------
- -- 调用开始战斗
- function fight(human, args, combatType)
- if CombatDefine.COMBAT_TYPE34 ~= combatType then
- print("[CommonActBoss_fight] 战斗类型不正确 combatType = "..combatType)
- return
- end
- local nMapID = getMapID(human, nil)
- -- print("[CommonActBoss_fight] 11111 combatType = "..combatType)
- local nNowFreeNum = CommonActBoss_GetFreeNum(human)
- if 0 >= nNowFreeNum then
- return
- end
- nNowFreeNum = nNowFreeNum - 1
- CommonActBoss_SetFreeNum(human, nNowFreeNum)
- CombatLogic.combatBegin(human, nMapID, args, CombatDefine.COMBAT_TYPE34)
- -- print("[CommonActBoss_fight] 2222 combatType = "..combatType)
- end
- -- 获取人物对战列表
- function getCombatObjList(human, side, args)
- if not human then
- print("[getCombatObjList] 获取进攻方,但是不存在对应的human")
- return
- end
- if side ~= CombatDefine.ATTACK_SIDE then
- return
- end
- -- print("[getCombatObjList] 进攻方 获取人物对战列表")
- local objList, helpList, rolebase, formation,jiban, elfList = CombatLogic.getHumanObjList(human, CombatDefine.COMBAT_TYPE34)
- if not objList or nil == _G.next(objList) then
- print("[getCombatObjList] 没有获取到对应的进攻方防守阵容,取默认对战阵容")
- objList, helpList, rolebase, formation,jiban, elfList = CombatLogic.getHumanObjList(human, CombatDefine.COMBAT_TYPE1)
- end
- return objList, helpList, rolebase, formation,jiban, elfList
- end
- -- 获取机器人对应战斗ID
- function getCombatMonsterOutID(human, side, args)
- if side ~= CombatDefine.DEFEND_SIDE then
- return
- end
- if not CommonAct_BOSSID then
- for key, v in pairs(Config) do
- if v.nMonsterOutID and v.nType == COMMONACTFIGHTPRIZE then
- CommonAct_BOSSID = v.nMonsterOutID
- break
- end
- end
- end
- -- print("[getCombatMonsterOutID] 获取到的战斗ID CommonAct_BOSSID = "..CommonAct_BOSSID)
- return CommonAct_BOSSID
- end
- function getMapID(human, param)
- if not CommonAct_MapID then
- for key, v in pairs(Config) do
- if v.mapID and v.nType == COMMONACTFIGHTPRIZE then
- CommonAct_MapID = v.mapID
- break
- end
- end
- end
- return CommonAct_MapID
- end
- function onFightEnd(human, result, combatType, defUuid, combatInfo)
- local atkHurt = 0
- for pos = 1, CombatDefine.COMBAT_HERO_CNT do
- local obj = combatInfo.objList and combatInfo.objList[pos]
- if obj then
- atkHurt = atkHurt + obj.result[1]
- end
- end
- -- 魔兽 造成伤害
- for _,pos in ipairs(CombatDefine.SIDE2HELPPOS[CombatDefine.ATTACK_SIDE]) do
- local pet = combatInfo.helpList and combatInfo.helpList[pos]
- if pet and pet.isPet then
- atkHurt = atkHurt + pet.result[1]
- end
- end
- -- 精灵 造成伤害
- for _,pos in ipairs(CombatDefine.SIDE2ELFPOS[CombatDefine.ATTACK_SIDE]) do
- local elf = combatInfo.elfList and combatInfo.elfList[pos]
- if elf then
- atkHurt = atkHurt + elf.result[1]
- end
- end
- local nNowDamage = CommonActBoss_GetDamage(human)
- nNowDamage = nNowDamage + atkHurt
- local bChange = false
- local tPrize = nil
- for nID, v in pairs(Config) do
- if v.nType == COMMONACTBOOSPRIZE then
- if nNowDamage >= v.hurt then
- local nState = CommonActBoss_GetPrizeStatus(human, nID)
- if CommonDefine.COMMON_PRIZE_STATE_NOGET == nState then
- CommonActBoss_SetPrizeStatus(human, nID, CommonDefine.COMMON_PRIZE_STATE_CANGET)
- bChange = true
- end
- else
- bChange = true
- end
- else
- tPrize = v.tPrize
- end
- end
- if true == bChange then
- YunYingLogic.sendBanner(human)
- local config = AbsActExcel.absActivity[COMMONACTBOSSABSID]
- YunYingLogic.sendGroupUpdate(YYInfo[COMMONACTBOSSABSID], human, config.panelID)
-
- CommonActBoss_AddDamage(human, atkHurt)
- CommonActBoss_Query(human)
- end
- BagLogic.addItemList(human, tPrize, "CommonActBoss")
- end
|