|
|
@@ -0,0 +1,418 @@
|
|
|
+--------------------------------
|
|
|
+-- 文件名 : BusOneActivityHeroYuanZheng.lua
|
|
|
+-- 文件说明 : 新商业活动-英雄远征
|
|
|
+-- 创建时间 : 2025/08/06
|
|
|
+-- 创建人 : FC
|
|
|
+--------------------------------
|
|
|
+
|
|
|
+local tBusoneActivityConf = require("excel.BusoneActivity")
|
|
|
+local Util = require("common.Util")
|
|
|
+local Msg = require("core.Msg")
|
|
|
+local Grid = require("bag.Grid")
|
|
|
+local BagLogic = require("bag.BagLogic")
|
|
|
+local CommonDefine = require("common.CommonDefine")
|
|
|
+local AbsActLogic = require("absAct.AbsActLogic")
|
|
|
+local BuyLogic = require("topup.BuyLogic")
|
|
|
+local YunYingLogic = require("yunying.YunYingLogic")
|
|
|
+local BusOneActivityTask = require("absAct.BusOneActivityTask")
|
|
|
+local BusOneActivityYuanZheng = require("absAct.BusOneActivityYuanZheng")
|
|
|
+
|
|
|
+
|
|
|
+local BUSONEHEROYUANZHENGABSID = 7204 -- 对应ABS活动ID
|
|
|
+local BUSONEHEROYUANZHENGMAXLAYERS = nil -- 最大层数
|
|
|
+local BUSONEHEROYUANZHENGMAXROUND = nil -- 最大轮数
|
|
|
+local BUSONEHEROYUANZHENGBAOHU = 2 -- 保护抽取
|
|
|
+local BUSONEHEROYUANZHENGDGOODID = 1039 -- 物品ID
|
|
|
+
|
|
|
+----------------------------------------- 内部处理开始 -------------------------------------
|
|
|
+-- 获取权重配置
|
|
|
+local function BusOneHeroYuanZheng_GetWeightConf()
|
|
|
+ return tBusoneActivityConf.HeroWeight
|
|
|
+end
|
|
|
+
|
|
|
+-- 获取奖励配置
|
|
|
+local function BusOneHeroYuanZheng_GetHeroConf()
|
|
|
+ return tBusoneActivityConf.HeroYuanZheng
|
|
|
+end
|
|
|
+
|
|
|
+local function BusOneHeroYuanZheng_GetMaxLayers()
|
|
|
+ if nil == BUSONEHEROYUANZHENGMAXLAYERS then
|
|
|
+ BUSONEHEROYUANZHENGMAXLAYERS = 0
|
|
|
+ for _, v in ipairs(tBusoneActivityConf.HeroYuanZheng) do
|
|
|
+ if v.nLayers > BUSONEHEROYUANZHENGMAXLAYERS then
|
|
|
+ BUSONEHEROYUANZHENGMAXLAYERS = v.nLayers
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ return BUSONEHEROYUANZHENGMAXLAYERS
|
|
|
+end
|
|
|
+
|
|
|
+-- 获取最大轮数
|
|
|
+local function BusOneHeroYuanZheng_GetMaxRound()
|
|
|
+ if nil == BUSONEHEROYUANZHENGMAXROUND then
|
|
|
+ BUSONEHEROYUANZHENGMAXROUND = 0
|
|
|
+ for _, v in ipairs(tBusoneActivityConf.HeroYuanZheng) do
|
|
|
+ if v.nRound > BUSONEHEROYUANZHENGMAXROUND then
|
|
|
+ BUSONEHEROYUANZHENGMAXROUND = v.nRound
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ return BUSONEHEROYUANZHENGMAXROUND
|
|
|
+end
|
|
|
+
|
|
|
+-- 创建DB
|
|
|
+local function BusOneHeroYuanZheng_CreatDB(human)
|
|
|
+ if not human.db.absAct[BUSONEHEROYUANZHENGABSID] then
|
|
|
+ human.db.absAct[BUSONEHEROYUANZHENGABSID] = {}
|
|
|
+ end
|
|
|
+
|
|
|
+ human.db.absAct[BUSONEHEROYUANZHENGABSID].tLayers = {
|
|
|
+ nRound = 1,
|
|
|
+ nLayers = -1,
|
|
|
+ tStatus = {},
|
|
|
+ }
|
|
|
+
|
|
|
+ local nMaxLayers = BusOneHeroYuanZheng_GetMaxLayers()
|
|
|
+
|
|
|
+ for i = 0, nMaxLayers, 1 do
|
|
|
+ human.db.absAct[BUSONEHEROYUANZHENGABSID].tLayers.tStatus[i] = CommonDefine.COMMON_PRIZE_STATE_NOGET
|
|
|
+ end
|
|
|
+
|
|
|
+end
|
|
|
+
|
|
|
+-- 重置DB
|
|
|
+local function BusOneHeroYuanZheng_CheckAndResetDB(human)
|
|
|
+ if not human.db.absAct[BUSONEHEROYUANZHENGABSID] or nil == _G.next(human.db.absAct[BUSONEHEROYUANZHENGABSID])
|
|
|
+ or not human.db.absAct[BUSONEHEROYUANZHENGABSID].tLayers then
|
|
|
+ BusOneHeroYuanZheng_CreatDB(human)
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+-- 获取当前远征轮数
|
|
|
+local function BusOneHeroYuanZheng_GetRound(human)
|
|
|
+ return human.db.absAct[BUSONEHEROYUANZHENGABSID].tLayers.nRound
|
|
|
+end
|
|
|
+
|
|
|
+-- 设置远征轮数
|
|
|
+local function BusOneHeroYuanZheng_SetRound(human, nValue)
|
|
|
+ human.db.absAct[BUSONEHEROYUANZHENGABSID].tLayers.nRound = nValue
|
|
|
+end
|
|
|
+
|
|
|
+-- 获取当前远征层数
|
|
|
+local function BusOneHeroYuanZheng_GetLayers(human)
|
|
|
+ return human.db.absAct[BUSONEHEROYUANZHENGABSID].tLayers.nLayers
|
|
|
+end
|
|
|
+
|
|
|
+-- 设置远征层数
|
|
|
+local function BusOneHeroYuanZheng_SetLayers(human, nValue)
|
|
|
+ human.db.absAct[BUSONEHEROYUANZHENGABSID].tLayers.nLayers = nValue
|
|
|
+end
|
|
|
+
|
|
|
+-- 获取当前远征状态
|
|
|
+local function BusOneHeroYuanZheng_GetStatus(human, nID)
|
|
|
+ return human.db.absAct[BUSONEHEROYUANZHENGABSID].tLayers.tStatus[nID]
|
|
|
+end
|
|
|
+
|
|
|
+-- 设置远征状态
|
|
|
+local function BusOneHeroYuanZheng_SetStatus(human, nID, nValue)
|
|
|
+ human.db.absAct[BUSONEHEROYUANZHENGABSID].tLayers.tStatus[nID] = nValue
|
|
|
+end
|
|
|
+
|
|
|
+-- 进行对应轮数
|
|
|
+local function BusOneHeroYuanZheng_EnterRound(human, nRound)
|
|
|
+ local nMaxRound = BusOneHeroYuanZheng_GetMaxRound()
|
|
|
+ if nMaxRound < nRound then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ BusOneHeroYuanZheng_SetRound(human, nRound)
|
|
|
+ BusOneHeroYuanZheng_SetLayers(human, -1)
|
|
|
+ local nMaxLayers = BusOneHeroYuanZheng_GetMaxLayers()
|
|
|
+
|
|
|
+ for i = 0, nMaxLayers, 1 do
|
|
|
+ human.db.absAct[BUSONEHEROYUANZHENGABSID].tLayers.tStatus[i] = CommonDefine.COMMON_PRIZE_STATE_NOGET
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+-----------------------------------客户端请求-----------------------------
|
|
|
+-- 请求英雄远征
|
|
|
+function BusOneHeroYuanZheng_Query(human)
|
|
|
+ BusOneHeroYuanZheng_CheckAndResetDB(human)
|
|
|
+
|
|
|
+ local tMsgData = Msg.gc.GC_NEW_BUSONEACT_HERO_QUERY
|
|
|
+ local tWeightConf = BusOneHeroYuanZheng_GetWeightConf()
|
|
|
+ tMsgData.tFenShu[0] = #tWeightConf
|
|
|
+ for i, v in ipairs(tWeightConf) do
|
|
|
+ tMsgData.tFenShu[i] = v.nWeight
|
|
|
+ end
|
|
|
+
|
|
|
+ tMsgData.nRound = BusOneHeroYuanZheng_GetRound(human)
|
|
|
+ tMsgData.nLayers = BusOneHeroYuanZheng_GetLayers(human)
|
|
|
+
|
|
|
+ local tConf = BusOneHeroYuanZheng_GetHeroConf()
|
|
|
+ tMsgData.tLayersInfo[0] = 0
|
|
|
+
|
|
|
+ for _, v in ipairs(tConf) do
|
|
|
+ if v.nRound == tMsgData.nRound then
|
|
|
+ local nLayers = v.nLayers
|
|
|
+ tMsgData.tLayersInfo[0] = tMsgData.tLayersInfo[0] + 1
|
|
|
+ local tData = tMsgData.tLayersInfo[tMsgData.tLayersInfo[0]]
|
|
|
+ tData.nLayers = nLayers
|
|
|
+ tData.nStatus = BusOneHeroYuanZheng_GetStatus(human, nLayers)
|
|
|
+
|
|
|
+ tData.tPrize[0] = #v.tPrize
|
|
|
+ for i, tItem in ipairs(v.tPrize) do
|
|
|
+ local nGoodsID = tItem[1]
|
|
|
+ local nGoodsNum = tItem[2]
|
|
|
+
|
|
|
+ Grid.makeItem(tData.tPrize[i], nGoodsID, nGoodsNum)
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ Msg.send(tMsgData, human.fd)
|
|
|
+end
|
|
|
+
|
|
|
+-- 请求参与
|
|
|
+function BusOneHeroYuanZheng_Join(human)
|
|
|
+ BusOneHeroYuanZheng_CheckAndResetDB(human)
|
|
|
+
|
|
|
+ local nGoodsNum = BagLogic.getItemCnt(human, BUSONEHEROYUANZHENGDGOODID)
|
|
|
+ if 0 >= nGoodsNum then
|
|
|
+ print("[BusOneHeroYuanZheng_Join] 物品不足 nGoodsNum = "..nGoodsNum)
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ local nNowLayers = BusOneHeroYuanZheng_GetLayers(human)
|
|
|
+ if nNowLayers ~= -1 then
|
|
|
+ print("[BusOneHeroYuanZheng_Join] 当前层数不正确 nNowLayers = "..nNowLayers)
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ local tWeightConf = BusOneHeroYuanZheng_GetWeightConf()
|
|
|
+ local nAllWeight = 0
|
|
|
+ local tWeight = {}
|
|
|
+ for _, v in ipairs(tWeightConf) do
|
|
|
+ if v.nWeight >= 0 then
|
|
|
+ nAllWeight = nAllWeight + v.nLayers
|
|
|
+ table.insert(tWeight, {nWeight = nAllWeight, nFenShu = v.nWeight})
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ local nRandWeight = math.random(1, nAllWeight)
|
|
|
+ local nFenShu = nil
|
|
|
+ for _, v in ipairs(tWeight) do
|
|
|
+ if v.nWeight >= nRandWeight then
|
|
|
+ nFenShu = v.nFenShu
|
|
|
+ break
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ local nNewLayers = nNowLayers + nFenShu
|
|
|
+ BusOneHeroYuanZheng_SetLayers(human, nNewLayers)
|
|
|
+ BusOneHeroYuanZheng_SetStatus(human, nNewLayers, CommonDefine.COMMON_PRIZE_STATE_CANGET)
|
|
|
+
|
|
|
+ local nRound = BusOneHeroYuanZheng_GetRound(human)
|
|
|
+ local tConf = BusOneHeroYuanZheng_GetHeroConf()
|
|
|
+
|
|
|
+ local tMsgData = Msg.gc.GC_NEW_BUSONEACT_HERO_JOIN
|
|
|
+ tMsgData.nFenShu = nFenShu
|
|
|
+ tMsgData.nLayers = nNewLayers
|
|
|
+ tMsgData.tLayersInfo[0] = 0
|
|
|
+
|
|
|
+ for _, v in ipairs(tConf) do
|
|
|
+ if v.nRound == nRound then
|
|
|
+ local nLayers = v.nLayers
|
|
|
+ tMsgData.tLayersInfo[0] = tMsgData.tLayersInfo[0] + 1
|
|
|
+ local tData = tMsgData.tLayersInfo[tMsgData.tLayersInfo[0]]
|
|
|
+ tData.nLayers = nLayers
|
|
|
+ tData.nStatus = BusOneHeroYuanZheng_GetStatus(human, nLayers)
|
|
|
+
|
|
|
+ tData.tPrize[0] = #v.tPrize
|
|
|
+ for i, tItem in ipairs(v.tPrize) do
|
|
|
+ local nGoodsID = tItem[1]
|
|
|
+ local nGoodsNum = tItem[2]
|
|
|
+
|
|
|
+ Grid.makeItem(tData.tPrize[i], nGoodsID, nGoodsNum)
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ BagLogic.delItem(human, BUSONEHEROYUANZHENGBAOHU, 1, "BusOneHeroYuanZheng")
|
|
|
+
|
|
|
+ Msg.send(tMsgData, human.fd)
|
|
|
+ print("[BusOneHeroYuanZheng_Join] 发送数据完成")
|
|
|
+ BusOneActivityYuanZheng.BusOneYuanZheng_NumChange(human, 1)
|
|
|
+ BusOneActivityTask.BusOneTask_SendRed(human)
|
|
|
+end
|
|
|
+
|
|
|
+-- 请求抽取
|
|
|
+function BusOneHeroYuanZheng_Do(human, nOperate)
|
|
|
+ local nDelNum = nOperate == BUSONEHEROYUANZHENGBAOHU and 1 or 0
|
|
|
+ local nGoodsNum = BagLogic.getItemCnt(human, BUSONEHEROYUANZHENGDGOODID)
|
|
|
+ if nGoodsNum < nDelNum then
|
|
|
+ print("[BusOneHeroYuanZheng_Do] 进行抽取 当前的可抽取的数量不正确 nGoodsNum = "..nGoodsNum.." nDelNum = "..nDelNum)
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ local tWeightConf = BusOneHeroYuanZheng_GetWeightConf()
|
|
|
+ local nAllWeight = 0
|
|
|
+ local tWeight = {}
|
|
|
+ for _, v in ipairs(tWeightConf) do
|
|
|
+ if v.nWeight >= 0 then
|
|
|
+ nAllWeight = nAllWeight + v.nLayers
|
|
|
+ table.insert(tWeight, {nWeight = nAllWeight, nFenShu = v.nWeight})
|
|
|
+ else
|
|
|
+ if nOperate ~= BUSONEHEROYUANZHENGBAOHU then
|
|
|
+ nAllWeight = nAllWeight + v.nLayers
|
|
|
+ table.insert(tWeight, {nWeight = nAllWeight, nFenShu = v.nWeight})
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ local nRandWeight = math.random(1, nAllWeight)
|
|
|
+ local nFenShu = nil
|
|
|
+ for _, v in ipairs(tWeight) do
|
|
|
+ if v.nWeight >= nRandWeight then
|
|
|
+ nFenShu = v.nFenShu
|
|
|
+ break
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ local nNowLayers = BusOneHeroYuanZheng_GetLayers(human)
|
|
|
+ local nMaxLayers = BusOneHeroYuanZheng_GetMaxLayers()
|
|
|
+
|
|
|
+ local nNextLayer = nNowLayers + nFenShu
|
|
|
+ if nNextLayer > 0 then
|
|
|
+ nNextLayer = nNextLayer > nMaxLayers and nMaxLayers or nNextLayer
|
|
|
+ BusOneHeroYuanZheng_SetStatus(human, nNowLayers, CommonDefine.COMMON_PRIZE_STATE_NOGET)
|
|
|
+ BusOneHeroYuanZheng_SetLayers(human, nNextLayer)
|
|
|
+ BusOneHeroYuanZheng_SetStatus(human, nNextLayer, CommonDefine.COMMON_PRIZE_STATE_CANGET)
|
|
|
+ else
|
|
|
+ if nNextLayer < 0 then
|
|
|
+ nNextLayer = -1
|
|
|
+ -- 重置为第一轮
|
|
|
+ BusOneHeroYuanZheng_EnterRound(human, 1)
|
|
|
+ else
|
|
|
+ BusOneHeroYuanZheng_SetStatus(human, nNowLayers, CommonDefine.COMMON_PRIZE_STATE_NOGET)
|
|
|
+ BusOneHeroYuanZheng_SetLayers(human, nNextLayer)
|
|
|
+ BusOneHeroYuanZheng_SetStatus(human, nNextLayer, CommonDefine.COMMON_PRIZE_STATE_CANGET)
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+
|
|
|
+ local tMsgData = Msg.gc.GC_NEW_BUSONEACT_HERO_DO
|
|
|
+ tMsgData.nFenShu = nFenShu
|
|
|
+ tMsgData.nLayers = nNextLayer
|
|
|
+ tMsgData.nRound = BusOneHeroYuanZheng_GetRound(human)
|
|
|
+ tMsgData.tLayersInfo[0] = 0
|
|
|
+
|
|
|
+ local tConf = BusOneHeroYuanZheng_GetHeroConf()
|
|
|
+ for _, v in ipairs(tConf) do
|
|
|
+ if v.nRound == tMsgData.nRound then
|
|
|
+ local nLayers = v.nLayers
|
|
|
+ tMsgData.tLayersInfo[0] = tMsgData.tLayersInfo[0] + 1
|
|
|
+ local tData = tMsgData.tLayersInfo[tMsgData.tLayersInfo[0]]
|
|
|
+ tData.nLayers = nLayers
|
|
|
+ tData.nStatus = BusOneHeroYuanZheng_GetStatus(human, nLayers)
|
|
|
+
|
|
|
+ tData.tPrize[0] = #v.tPrize
|
|
|
+ for i, tItem in ipairs(v.tPrize) do
|
|
|
+ local nGoodsID = tItem[1]
|
|
|
+ local nGoodsNum = tItem[2]
|
|
|
+
|
|
|
+ Grid.makeItem(tData.tPrize[i], nGoodsID, nGoodsNum)
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ if nDelNum > 0 then
|
|
|
+ BagLogic.delItem(human, BUSONEHEROYUANZHENGBAOHU, nDelNum, "BusOneHeroYuanZheng")
|
|
|
+ end
|
|
|
+
|
|
|
+ BusOneActivityYuanZheng.BusOneYuanZheng_NumChange(human, 1)
|
|
|
+ BusOneActivityTask.BusOneTask_SendRed(human)
|
|
|
+ Msg.send(tMsgData, human.fd)
|
|
|
+end
|
|
|
+
|
|
|
+-- 请求领取奖励
|
|
|
+function BusOneHeroYuanZheng_Get(human, nLayers, nIndex)
|
|
|
+ local nRound = BusOneHeroYuanZheng_GetRound(human)
|
|
|
+ local nNowLayers = BusOneHeroYuanZheng_GetLayers(human)
|
|
|
+
|
|
|
+ if nLayers ~= nNowLayers then
|
|
|
+ print("[BusOneHeroYuanZheng_Get] 请求领取奖励的层数和记录的不一致 nLayers = "..nLayers.." nNowLayers = "..nNowLayers)
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ local tItem = {}
|
|
|
+ local tConf = BusOneHeroYuanZheng_GetHeroConf()
|
|
|
+ for _, v in ipairs(tConf) do
|
|
|
+ if v.nRound == nRound and v.nLayers == nNowLayers then
|
|
|
+ BusOneHeroYuanZheng_SetStatus(human, nNowLayers, CommonDefine.COMMON_PRIZE_STATE_GET)
|
|
|
+
|
|
|
+ for i, value in ipairs(v.tPrize) do
|
|
|
+ if i == nIndex then
|
|
|
+ table.insert(tItem, {value[1], value[2]})
|
|
|
+ break
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ if nil ~= _G.next(tItem) then
|
|
|
+ BagLogic.addItemList(human, tItem, "BusOneHeroYuanZheng")
|
|
|
+ local nNextRound = nRound + 1
|
|
|
+ local nMaxRound = BusOneHeroYuanZheng_GetMaxRound()
|
|
|
+ local nMaxLayers = BusOneHeroYuanZheng_GetMaxLayers()
|
|
|
+ print("[BusOneHeroYuanZheng_Get] 当前轮数 nRound = "..nRound.." nNextRound = "..nNextRound.." nMaxRound = "..nMaxRound)
|
|
|
+ if nNextRound <= nMaxRound and nNowLayers == nMaxLayers then
|
|
|
+ print("[BusOneHeroYuanZheng_Get] 进入下一轮")
|
|
|
+ BusOneHeroYuanZheng_EnterRound(human, nNextRound)
|
|
|
+ else
|
|
|
+ print("[BusOneHeroYuanZheng_Get] 重置为第一轮")
|
|
|
+ BusOneHeroYuanZheng_EnterRound(human, 1)
|
|
|
+ end
|
|
|
+
|
|
|
+ BusOneHeroYuanZheng_Query(human)
|
|
|
+ BusOneActivityTask.BusOneTask_SendRed(human)
|
|
|
+ else
|
|
|
+ print("[BusOneHeroYuanZheng_Get] 不存在对应的奖励 nLayers = "..nLayers.." nIndex = "..nIndex)
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+-----------------------------------外部调用-----------------------------
|
|
|
+function isOpen(human, YYInfo, funcConfig)
|
|
|
+ print("[BusOneHeroYuanZheng_isOpen] 进入判断")
|
|
|
+
|
|
|
+ local state, endTime, startTime = AbsActLogic.isStarted(human, funcConfig and funcConfig.funcID or BUSONEHEROYUANZHENGABSID)
|
|
|
+ if not state then
|
|
|
+ print("[BusOneHeroYuanZheng_isOpen] 当前活动未开启")
|
|
|
+ return
|
|
|
+ end
|
|
|
+ print("[BusOneHeroYuanZheng_isOpen] 进入判断 endTime = "..endTime.." startTime = "..startTime)
|
|
|
+ return true, endTime, startTime
|
|
|
+end
|
|
|
+
|
|
|
+function isActive(human, YYInfo, funcConfig)
|
|
|
+ return not isOpen(human, YYInfo, funcConfig)
|
|
|
+end
|
|
|
+
|
|
|
+function isRed(human, YYInfo, absActConfig)
|
|
|
+ BusOneHeroYuanZheng_CheckAndResetDB(human)
|
|
|
+
|
|
|
+ local tConf = BusOneHeroYuanZheng_GetHeroConf()
|
|
|
+ local nRound = BusOneHeroYuanZheng_GetRound(human)
|
|
|
+ for _, v in ipairs(tConf) do
|
|
|
+ if v.nRound == nRound then
|
|
|
+ local nStatus = BusOneHeroYuanZheng_GetStatus(human, v.nLayers)
|
|
|
+ if nStatus == CommonDefine.COMMON_PRIZE_STATE_CANGET then
|
|
|
+ return true
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ return false
|
|
|
+end
|