| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- -----------------------------------------------------------------
- -- 文件名 : DarkForbiddenAreaLogic.lua
- -- 文件说明 : 幽暗禁地
- -- 创建时间 : 2025/07/11
- -- 创建人 : FC
- -----------------------------------------------------------
- local Msg = require("core.Msg")
- local Util = require("common.Util")
- local Grid = require("bag.Grid")
- local BagLogic = require("bag.BagLogic")
- local DarkConf = require("excel.darkForbiddenara")
- local CombatDefine = require("combat.CombatDefine")
- local CombatLogic = require("combat.CombatLogic")
- local MonsterGrid = require("monster.MonsterGrid")
- local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
- local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
- local DARKFORBIDDENAREA_OPEN_LV = 100 -- 可参与活动等级
- local DARKFORBIDDENAREA_BIT = 30 -- 2进制位
- local DARKFORBIDDENAREA_NO_SAODANG = 0 -- 不可扫荡
- local DARKFORBIDDENAREA_SAODANG = 1 -- 可扫荡
- ---------------------------------- 内部调用 ----------------------------------------------
- -- 获取怪物配置
- local function DarkForbiddenArea_GetMonsterConf()
- return DarkConf.darkenemy
- end
- -- 获取奖励配置
- local function DarkForbiddenArea_GetPrizeConf()
- return DarkConf.darkprize
- end
- -- 创建DB数据
- local function DarkForbiddenArea_CreateDB(human)
- local tConfig = DarkForbiddenArea_GetMonsterConf()
- human.db.DarkForArea = {}
- for nID, v in pairs(tConfig) do
- local nIndex = math.ceil(nID / DARKFORBIDDENAREA_BIT)
- if not human.db.DarkForArea[nIndex] then
- human.db.DarkForArea[nIndex] = DARKFORBIDDENAREA_NO_SAODANG
- end
- end
- end
- -- 设置DB数据
- local function DarkForbiddenArea_SetDB(human, nID)
- if not human.db.DarkForArea then
- DarkForbiddenArea_CreateDB(human)
- end
- local nIndex = math.ceil(nID / DARKFORBIDDENAREA_BIT)
- local byteIndex = nID % DARKFORBIDDENAREA_BIT
- human.db.DarkForArea[nIndex] = Util.setBit(human.db.DarkForArea[nIndex], byteIndex)
- end
- -- 获取DB数据
- local function DarkForbiddenArea_GetDB(human, nID)
- if not human.db.DarkForArea then
- DarkForbiddenArea_CreateDB(human)
- end
- local nIndex = math.ceil(nID / DARKFORBIDDENAREA_BIT)
- local byteIndex = nID % DARKFORBIDDENAREA_BIT
- --print("[DarkForbiddenArea_GetDB] nID = "..nID.." nIndex = "..nIndex.." byteIndex = "..byteIndex)
- return Util.getBit(human.db.DarkForArea[nIndex], byteIndex) > 0 and DARKFORBIDDENAREA_SAODANG or DARKFORBIDDENAREA_NO_SAODANG
- end
- -- 获取奖励
- local function DarkForbiddenArea_GetPrize(nPrizeID, nRandPrizeNum)
- local tPrizeConf = DarkForbiddenArea_GetPrizeConf()
- local tPrizeInfo, nAllWeight = {}, 0
- for nID, v in ipairs(tPrizeConf) do
- if v.nPrizeID == nPrizeID then
- nAllWeight = nAllWeight + v.nWeight
- table.insert(tPrizeInfo, {nWeight = nAllWeight, tPrize = v.tPrize})
- end
- end
- if nil == _G.next(tPrizeInfo) then
- return nil
- end
- local tItem = {}
- for i = 1, nRandPrizeNum, 1 do
- local nRandWeight = math.random(1, nAllWeight)
- for _, v in pairs(tPrizeInfo) do
- if nRandWeight <= v.nWeight then
- local nGoodsID = v.tPrize[1]
- local nGoodsNum = v.tPrize[2]
- if not tItem[nGoodsID] then
- tItem[nGoodsID] = 0
- end
- tItem[nGoodsID] = tItem[nGoodsID] + nGoodsNum
- break
- end
- end
- end
- if nil == _G.next(tItem) then
- return nil
- end
- local tGoods = {}
- for nGoodsID, nGoodsNum in pairs(tItem) do
- table.insert(tGoods, {nGoodsID, nGoodsNum})
- end
- return tGoods
- end
- ---------------------------------- 客户端请求 ----------------------------------------------
- -- 请求幽暗禁地信息
- function DarkForAreaLogic_Query(human, nType)
- if not human.db.DarkForArea then
- DarkForbiddenArea_CreateDB(human)
- end
- local tMsgData = Msg.gc.GC_DARK_FORBIDDEN_AREA_QUEY
- local bFillUse, bFillHave = false, false
- local nAllLen, nSendLen = 0, 0
- local tMonstConf = DarkForbiddenArea_GetMonsterConf()
- for nID, v in pairs(tMonstConf) do
- if v.nDifficulty == nType then
- nAllLen = nAllLen + 1
- end
- end
- tMsgData.tMonster[0] = 0
- tMsgData.bEnd = 0
-
- for nID, v in pairs(tMonstConf) do
- if v.nDifficulty == nType then
- nSendLen = nSendLen + 1
- tMsgData.tMonster[0] = tMsgData.tMonster[0] + 1
- local tData = tMsgData.tMonster[tMsgData.tMonster[0]]
- tData.nID = nID
- tData.szName = v.szMonsterName
- tData.nMonsterShowID = v.nMonsterStyling
- tData.nMonsterLv = v.nMonsterLv
- tData.bSaoDang = DarkForbiddenArea_GetDB(human, nID)
- tData.nPower = 0
- --怪物数据
- local objList = MonsterGrid.createMonsterObjListByMonsterOutID(v.nMonsterID)
- if objList then
- for _, monster in ipairs(objList) do
- tData.nPower = tData.nPower + (monster.power or 0)
- end
- end
- -- 奖励配置
- local tPrizeData = tData.tPrize
- tPrizeData[0] = 0
- local nPrizeID = v.nPrizeID
- local tPrizeConf = DarkForbiddenArea_GetPrizeConf()
- for _, value in ipairs(tPrizeConf) do
- if value.nPrizeID == nPrizeID and value.tShow and value.tShow == 1 then
- tPrizeData[0] = tPrizeData[0] + 1
- Grid.makeItem(tPrizeData[tPrizeData[0]], value.tPrize[1], value.tPrize[2])
- end
- end
- if false == bFillUse then
- Grid.makeItem(tMsgData.tUseGoods, v.nUseGood, v.nUseNum)
- bFillUse = true
- end
- if false == bFillHave then
- tMsgData.nHaveNum = BagLogic.getItemCnt(human, v.nUseGood)
- bFillHave = true
- end
- if tMsgData.tMonster[0] >= 5 then
- tMsgData.bEnd = nSendLen == nAllLen and 1 or 0
- Msg.send(tMsgData, human.fd)
- tMsgData.tMonster[0] = 0
- end
- end
- end
- if tMsgData.tMonster[0] > 0 and tMsgData.bEnd == 0 then
- tMsgData.bEnd = 1
- Msg.send(tMsgData, human.fd)
- end
- print("[DarkForAreaLogic_Query] 下发协议结束")
- end
- -- 请求扫荡
- function DarkForAreaLogic_SaoDang(human, nID)
- local tConfig = DarkForbiddenArea_GetMonsterConf()
- if not tConfig or not tConfig[nID] then
- return
- end
- local bSaoDang = DarkForbiddenArea_GetDB(human, nID)
- if DARKFORBIDDENAREA_NO_SAODANG == bSaoDang then
- print("[CG_DARK_FORBIDDEN_AREA_SAODANG] 当前没有解锁扫荡")
- return
- end
- local tMonsterConf = tConfig[nID]
- local nNowGoodsNum = BagLogic.getItemCnt(human, tMonsterConf.nUseGood)
- if tMonsterConf.nUseNum > nNowGoodsNum then
- print("[CG_DARK_FORBIDDEN_AREA_SAODANG] 当前扫荡物品不足")
- return
- end
- local tItem = DarkForbiddenArea_GetPrize(tMonsterConf.nPrizeID, tMonsterConf.nRandPrizeNum)
- if nil ~= tItem and nil ~= _G.next(tItem) then
- BagLogic.delItem(human, tMonsterConf.nUseGood, tMonsterConf.nUseNum, "darkforarea")
-
- BagLogic.addItemList(human, tItem, "darkforarea")
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_1215)
- --DarkForAreaLogic_Query(human, tMonsterConf.nDifficulty)
- end
- end
- ---------------------------------- 战斗相关 ----------------------------------------------
- -- 调用开始战斗
- function fight(human, args, combatType)
- if not human or combatType ~= CombatDefine.COMBAT_TYPE31 then
- print("[arkForbiddenAreaLogic_fight] 不正确的参数 combatType = "..combatType)
- return
- end
- if not args[1] or not args[2] then
- print("[arkForbiddenAreaLogic_fight] 不存在对应的 args 参数")
- return
- end
- local nID = tonumber(args[2])
- local tMonsterConf = DarkForbiddenArea_GetMonsterConf()
- print("[arkForbiddenAreaLogic_fight] args1 = "..args[1].." args2 = "..args[2])
- if not nID then
- print("[DarkForbiddenAreaLogic_fight] 参数不正确没有传递正确的对应对战的怪物ID ")
- return
- end
- if not tMonsterConf[nID] then
- print("[DarkForbiddenAreaLogic_fight]不存在对应配置 ")
- return
- end
-
-
- if not nID or not tMonsterConf[nID] then
- print("[DarkForbiddenAreaLogic_fight] 参数不正确没有传递正确的对应对战的怪物ID ")
- return
- end
- local nUseGood, nUseNum = tMonsterConf[nID].nUseGood, tMonsterConf[nID].nUseNum
- local nNowGoodsNum = BagLogic.getItemCnt(human, nUseGood)
- if nNowGoodsNum < nUseNum then
- print("[DarkForbiddenAreaLogic_fight] 挑战消耗的物品不足 nNowGoodsNum = "..nNowGoodsNum.." nUseNum = "..nUseNum)
- return
- end
- -- 删除挑战消耗物品
- BagLogic.delItem(human, nUseGood, nUseNum, "darkforarea")
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_1215)
- print("[arkForbiddenAreaLogic_fight] 开始进入战斗")
- CombatLogic.combatBegin(human, 1001, args, CombatDefine.COMBAT_TYPE31, nID)
- end
- -- 获取人物对战列表
- function getCombatObjList(human, side, args)
- if side ~= CombatDefine.ATTACK_SIDE then
- return
- end
- -- local uuid = args[1]
- -- if not uuid then return end
- -- local fakeHuman = CombatLogic.createCombatFakeHuman(uuid)
- -- if not fakeHuman then return end
- return CombatLogic.getHumanObjList(human, CombatDefine.COMBAT_TYPE31)
- end
- -- 获取机器人对应战斗ID
- function getCombatMonsterOutID(human, side, args)
- if side ~= CombatDefine.DEFEND_SIDE then
- return
- end
- local nID = tonumber(args[2])
- local tMonsterConf = DarkForbiddenArea_GetMonsterConf()
- if not nID or not tMonsterConf[nID] then
- print("[DarkForbiddenAreaLogic_getCombatMonsterOutID] 参数不正确没有传递正确的对应对战的怪物ID ")
- return
- end
- local nMonsterOutID = tMonsterConf[nID].nMonsterID
- if not nMonsterOutID then
- print("[DarkForbiddenAreaLogic_getCombatMonsterOutID] 配置中没有配置正确的怪物ID")
- return
- end
- return nMonsterOutID
- end
- -- 挑战结束
- function onFightEnd(human, result, combatType, nIndexID, combatInfo)
- if CombatDefine.COMBAT_TYPE31 ~= combatType then
- return
- end
- local nID = tonumber(nIndexID)
- if CombatDefine.RESULT_WIN == result then
- local tMonsterConf = DarkForbiddenArea_GetMonsterConf()
- if not tMonsterConf[nID] then
- print("[DarkForbiddenAreaLogic_onFightEnd] 挑战结束, 但是获取不到对应的怪物配置 nID = "..nID)
- return
- end
- local tItem = DarkForbiddenArea_GetPrize(tMonsterConf[nID].nPrizeID, tMonsterConf[nID].nRandPrizeNum)
- if nil ~= tItem and nil ~= _G.next(tItem) then
- combatInfo.rewardItem = combatInfo.rewardItem or {}
- for i, v in pairs(tItem) do
- BagLogic.addItem(human, v[1], v[2], "darkforarea")
- combatInfo.rewardItem[i] = combatInfo.rewardItem[i] or { }
- combatInfo.rewardItem[i] = {v[1], v[2]}
- end
- -- BagLogic.addItemList(human, tItem, "darkforarea")
- end
- DarkForbiddenArea_SetDB(human, nID)
- end
- end
|