Bladeren bron

同步代码

gitxsm 1 jaar geleden
bovenliggende
commit
2a863e804e

+ 41 - 25
script/common/CommonDB.lua

@@ -14,7 +14,7 @@ KEY_SERVER_START_TIME = "serverStartTime"				-- 开服时间
 KEY_IDENTITY_MAX = "identityMax"						-- 自增的最大的数字 从1开始
 KEY_UNION_IDENTITY_MAX = "unionIdentityMax"				-- 自增的最大的数字 从1开始
 KEY_REWARD_INDEX = "rewardIndex"						-- 好友排行榜奖励索引rewardIndex
-KEY_BAN_IP = "banIp"									-- 被禁IP
+-- KEY_BAN_IP = "banIp"									-- 被禁IP
 KEY_CHONGJI_ACT = "chongJiAct"							-- 全服冲级活动 领取情况
 KEY_ACT_MONTH = "actMonth"								-- 当前计算的真实月份
 KEY_UNION_WAR = "unionWar"								-- 公会战
@@ -41,6 +41,7 @@ KEY_FIREWORKBONUS_TIME="fireWorksBonusTime"             -- 烟花加成时间
 KEY_COMMERCEACT_INFO = "commerceActInfo"				-- 跨服活动信息
 KEY_JJCLADDER_TIME = "jjcladderEndTime"					-- 天梯赛结束时间
 KEY_COMMERCEACT_MIDDLE_INFO = "commerceMiddleActInfo"	-- 中心服跨服商业活动信息
+KEY_BAN_DATA = "banData"								-- 封禁数据
 
 db = db or {
 	serverStartTime = nil,								-- 开服时间
@@ -49,7 +50,7 @@ db = db or {
     rewardIndex = nil,                                  -- 好友排行榜奖励索引rewardIndex
     unionIdentityMax = nil,                             -- 自增的最大的数字 从1开始
     mergeSvrIndex = nil,								-- 合服之后对应的服务器索引 比如如果10001,10003,100004合服了 这里的数据结构是{10001,10003,10004}
-    banIp = {},                                         -- 被禁IP
+    -- banIp = {},                                         -- 被禁IP
 	chongJiAct  = {},                                   -- 全服冲级活动 领取情况
 	actMonth = nil,                                     -- 当前计算的真实月份
 	unionWarState = nil,                                -- 当前工会战状态
@@ -71,6 +72,14 @@ db = db or {
 	commerceMiddleActInfo = {},							-- 中心服跨服商业活动信息
 }
 
+do
+	if _G.is_middle == true then
+		if not db[KEY_BAN_DATA] then
+			db[KEY_BAN_DATA] = {}
+		end
+	end
+end
+
 function init()
 	LuaMongo.find(DB.db_common)
 	if not LuaMongo.next(db) then
@@ -200,35 +209,42 @@ function getMergeSvrIndex()
 	return db.mergeSvrIndex
 end
 
-cnt = 1
-function setBanIp(ip,time)
-    db.banIp[cnt] =db.banIp[cnt] or {}
-    db.banIp[cnt].ip = ip
-    db.banIp[cnt].time = time
-    cnt = cnt + 1
+-- cnt = 1
+-- function setBanIp(ip,time)
+--     db.banIp[cnt] =db.banIp[cnt] or {}
+--     db.banIp[cnt].ip = ip
+--     db.banIp[cnt].time = time
+--     cnt = cnt + 1
 	
-	updateValue(KEY_BAN_IP, db.banIp)
-end
+-- 	updateValue(KEY_BAN_IP, db.banIp)
+-- end
 
-function getBanIp(ip)
-    for k,v in pairs(db.banIp) do
-        if v.ip == ip then
-            return v.ip,v.time
-        end
-    end
-    return 
-end
+-- function getBanIp(ip)
+--     for k,v in pairs(db.banIp) do
+--         if v.ip == ip then
+--             return v.ip,v.time
+--         end
+--     end
+--     return 
+-- end
 
-function delBanIp(ip)
-    for k,v in pairs(db.banIp) do
-        if v.ip == ip then
-            db.banIp[k] = nil
-        end
-    end
+-- function delBanIp(ip)
+--     for k,v in pairs(db.banIp) do
+--         if v.ip == ip then
+--             db.banIp[k] = nil
+--         end
+--     end
+
+--     updateValue(KEY_BAN_IP, db.banIp)
+-- end
 
-    updateValue(KEY_BAN_IP, db.banIp)
+function UpdateBanData(newBanData)
+	db.banData = newBanData
+	updateValue(KEY_BAN_DATA, newBanData)
 end
 
+
+
 -- 全服创号 冲级活动
 function getSvrChongJiGet(id)
 	local num = 0 

+ 5 - 0
script/common/CommonDefine.lua

@@ -14,6 +14,8 @@ DISCONNECT_BANUSER = 8 			-- 封号
 DISCONNECT_BANIP = 9 			-- 封IP
 DISCONNECT_FCM_CHILD = 10 		-- 防沉迷(未成年达到每日时间上限)
 DISCONNECT_FCM_HEALTH = 11 		-- 防沉迷(未成年/游客不得在22-08进行游戏)
+DISCONNECT_BAN_ROLE  = 12       -- 封角色
+DISCONNECT_BAN_APP  = 13        -- 封设备  
 
 ZERO = 0.000000001
 
@@ -30,6 +32,9 @@ DISCONNECT_MSG[DISCONNECT_BANIP] = Lang.DISCONNECT_IP
 DISCONNECT_MSG[DISCONNECT_FCM_CHILD] = ""
 DISCONNECT_MSG[DISCONNECT_FCM_HEALTH] = ""
 
+DISCONNECT_MSG[DISCONNECT_BAN_ROLE] = Lang.BAN_ROLE
+DISCONNECT_MSG[DISCONNECT_BAN_APP] = Lang.BAN_APP
+
 
 ------------------ 通用排行榜大类型定义开始 ---------------------------
 COMMONRANK_TYPE_MIN = 1                                     -- 最小类型

+ 27 - 0
script/common/InnerHandler.lua

@@ -21,6 +21,7 @@ local HeroMiddleLogic = require("hero.HeroMiddleLogic")
 local MiddleCommonLogic = require("middle.MiddleCommonLogic")
 local CommerceMiddle = require("serverCommerce.ServerCommerceMiddle")
 local MiddleCommonRank = require("middle.MiddleCommonRank")
+local BanLogic = require("scene.BanLogic")
 
 function LW_HELLO(fd, msg)
 	if _G.is_middle ~= true then return end
@@ -282,3 +283,29 @@ function WL_COMMERCE_ACT_GET_OPENTIME(fd, msg)
     CommerceMiddle.CommerceMiddle_GetActOpenTime_WL(msg)
 end
 -------------------- 跨服商业活动结束 ---------------------------
+
+----------------------- 封禁功能开始 ---------------------------
+
+-- 向跨服查询
+function LW_QUERY_BAN_INFO(fd, msg)
+    if _G.is_middle ~= true then return end
+    BanLogic.CS_Get_BanData()
+end
+
+-- 跨服回应查询
+function WL_QUERY_BAN_INFO(fd, msg)
+    BanLogic.NS_Init_BanData(msg)
+end
+
+-- 通知跨服更新
+function LW_UPDATE_BAN_INFO(fd, msg)
+    if _G.is_middle ~= true then return end
+    BanLogic.CS_Update_BanData(msg)
+end
+
+-- 跨服广播更新的封禁数据
+function WL_UPDATE_BAN_INFO(fd, msg)
+    BanLogic.NS_Update_BanData(msg.banTag, msg.banTime, msg.banLevel)
+end
+
+----------------------- 封禁功能结束 ---------------------------

+ 28 - 0
script/common/InnerProto.lua

@@ -326,3 +326,31 @@ WL_COMMERCE_ACT_GET_OPENTIME =
 
 
 -------------------- 天梯赛结束 -----------------------------------
+
+
+-------------------- 封禁功能开始 -----------------------------------
+LW_QUERY_BAN_INFO = {
+  {"nSrcServerID",      "int"},       -- 服务器ID
+}
+
+WL_QUERY_BAN_INFO = {
+  {"banList",           "table"},       --  禁止登录列表
+}
+
+-- 请求更新
+LW_UPDATE_BAN_INFO =
+{
+  {"nSrcServerID",      "int"},          -- 服务器ID
+  {"banTag",            "string"},       -- 禁止登录标识
+  {"banTime",           "int"},          -- 禁止登录时间
+  {"banLevel",          "int"},          -- 禁止等级
+}
+
+WL_UPDATE_BAN_INFO =
+{
+  {"banTag",            "string"},       -- 禁止登录标识
+  {"banTime",           "int"},          -- 禁止登录时间
+  {"banLevel",          "int"},          -- 禁止等级
+}
+
+-------------------- 封禁功能结束 -----------------------------------

+ 6 - 1
script/common/InnerProtoID.lua

@@ -39,4 +39,9 @@ _ENV[38] = 'LW_COMMERCE_GM_CLEAR_MAIL'
 _ENV[39] = 'WL_COMMERCE_GET_ACT_INFO'
 _ENV[40] = 'LW_COMMERCE_GET_ACT_INFO'
 _ENV[41] = 'LW_COMMERCE_ACT_GET_OPENTIME'
-_ENV[42] = 'WL_COMMERCE_ACT_GET_OPENTIME'
+_ENV[42] = 'WL_COMMERCE_ACT_GET_OPENTIME'
+
+_ENV[45] = 'LW_QUERY_BAN_INFO'
+_ENV[46] = 'WL_QUERY_BAN_INFO'
+_ENV[47] = 'LW_UPDATE_BAN_INFO'
+_ENV[48] = 'WL_UPDATE_BAN_INFO'

+ 3 - 0
script/common/Lang.lua

@@ -12,6 +12,9 @@ DISCONNECT_AUTH_FAIL = [[登录认证失败]]
 DISCONNECT_MAX_ONLINE = [[服务器人数已满,请稍后重试]]
 DISCONNECT_BANUSER = [[您已被系统封号,可联系GM解决]]
 DISCONNECT_IP = [[此IP地址已被系统封禁,可联系GM解决]]
+BAN_ROLE = [[该角色被系统封号]]
+BAN_ACCOUNT = [[该账号已被系统封号]]
+BAN_APP  =  [[该设备已被系统禁止登录]]
 
 COMMON_NO_ZUANSHI = [[钻石不足]]
 COMMON_NO_JINBI = [[金币不足]] 

+ 8 - 4
script/common/ProtoID.lua

@@ -1422,7 +1422,11 @@ _ENV[1466]="CG_MAINTASK_QUERY"
 _ENV[1467]="GC_MAINTASK_QUERY"
 _ENV[1468]="CG_MAINTASK_GETREWARD"
 
-_ENV[1471]="CG_QUERY_DAY_LOTTERY_TIMES"
-_ENV[1472]="GC_QUERY_DAILYLOTTERYLIMIT"
-_ENV[1473]="CG_QUERY_DAY_ZHUANPAN_TIMES"
-_ENV[1474]="GC_QUERY_DAY_ZHUANPAN_TIMES"
+-- 预留到1480
+--- QQ大咖专属
+_ENV[1481]="CG_QUERY_DAY_LOTTERY_TIMES"
+_ENV[1482]="GC_QUERY_DAILYLOTTERYLIMIT"
+_ENV[1483]="CG_QUERY_DAY_ZHUANPAN_TIMES"
+_ENV[1484]="GC_QUERY_DAY_ZHUANPAN_TIMES"
+
+_ENV[1490]="CG_SET_BAN"

+ 68 - 53
script/module/battle/BattleLogic.lua

@@ -1070,17 +1070,17 @@ function onLogin(human)
     end
 
     -- 处理老号的闯关的属性加成
-    -- local normalBattleAttrData = getBattleAttrByType(human, EliteDefine.COPY_ELITE_NORMAL)
-    -- if not normalBattleAttrData then
-    --     human.db.normalBattleAttrData = {}
-    --     human.db.normalBattleAttrData.chosenAttrList = generateDiffBattleAttr(human, EliteDefine.COPY_ELITE_NORMAL)
+    local normalBattleAttrData = getBattleAttrByType(human, EliteDefine.COPY_ELITE_NORMAL)
+    if not normalBattleAttrData then
+        human.db.normalBattleAttrData = {}
+        human.db.normalBattleAttrData.chosenAttrList = generateDiffBattleAttr(human, EliteDefine.COPY_ELITE_NORMAL)
 
-    --     human.db.eliteBattleAttrData = {}
-    --     human.db.eliteBattleAttrData.chosenAttrList = generateDiffBattleAttr(human, EliteDefine.COPY_LEVEL_ELITE)
+        human.db.eliteBattleAttrData = {}
+        human.db.eliteBattleAttrData.chosenAttrList = generateDiffBattleAttr(human, EliteDefine.COPY_LEVEL_ELITE)
 
-    --     human.db.hardBattleAttrData = {}
-    --     human.db.hardBattleAttrData.chosenAttrList = generateDiffBattleAttr(human, EliteDefine.COPY_ELITE_DIFFICULTY)
-    -- end
+        human.db.hardBattleAttrData = {}
+        human.db.hardBattleAttrData.chosenAttrList = generateDiffBattleAttr(human, EliteDefine.COPY_ELITE_DIFFICULTY)
+    end
 
 
     if human.db.lv >= BATTLE_LOGIN_LEV_TIPS then
@@ -2531,28 +2531,28 @@ end
 
 
 --处理战斗前属性加成
--- function onFightBegin(human, cbParam, combatType, param)
---     local nBattleType = BattleLogic_GetBattleType(human)
---     local attrAddData = getBattleAttrByType(human, nBattleType)
+function onFightBegin(human, cbParam, combatType, param)
+    local nBattleType = BattleLogic_GetBattleType(human)
+    local attrAddData = getBattleAttrByType(human, nBattleType)
 
---     if not attrAddData or not attrAddData.chosenAttrList then
---         return
---     end
+    if not attrAddData or not attrAddData.chosenAttrList then
+        return
+    end
 
---     local attrList = calcAttr(attrAddData.chosenAttrList)
+    local attrList = calcAttr(attrAddData.chosenAttrList)
 
---     for index = 1, CombatDefine.COMBAT_HERO_CNT do
---         local atkPos = CombatLogic.getPos(CombatDefine.ATTACK_SIDE, index)
---         local atkObj = CombatImpl.objList[atkPos]
+    for index = 1, CombatDefine.COMBAT_HERO_CNT do
+        local atkPos = CombatLogic.getPos(CombatDefine.ATTACK_SIDE, index)
+        local atkObj = CombatImpl.objList[atkPos]
 
---         if atkObj then
---             for attrId, attrVal in pairs(attrList) do
---                 atkObj.sysAttr[attrId] = (atkObj.sysAttr[attrId] or 0) + attrVal
---             end
---             atkObj.isSysAttrChange = true
---         end
---     end
--- end
+        if atkObj then
+            for attrId, attrVal in pairs(attrList) do
+                atkObj.sysAttr[attrId] = (atkObj.sysAttr[attrId] or 0) + attrVal
+            end
+            atkObj.isSysAttrChange = true
+        end
+    end
+end
 
 
 
@@ -2588,11 +2588,11 @@ function fight(human)
     end
 
     --如果有加成属性还没有选也不能挑战
-    -- local nBattleType = BattleLogic_GetBattleType(human)
-    -- local attrAddData = getBattleAttrByType(human, nBattleType)
-    -- if attrAddData and attrAddData.unSelectedAttrList then
-    --     return Broadcast.sendErr(human, Lang.BATTLE_CHOOSE_ATTR)
-    -- end
+    local nBattleType = BattleLogic_GetBattleType(human)
+    local attrAddData = getBattleAttrByType(human, nBattleType)
+    if attrAddData and attrAddData.unSelectedAttrList then
+        return Broadcast.sendErr(human, Lang.BATTLE_CHOOSE_ATTR)
+    end
 
 
     local config = tBattleConfig.node[battleID]
@@ -2802,22 +2802,35 @@ function onFightEnd(human, result, fightTypeID, param1, combatInfo)
 
 
     --肉鸽属性加成判断
-    -- local nowStageCfg = tBattleConfig.node[battleID]
-    -- if nowStageCfg.isRouge and type(nowStageCfg.isRouge) == "number" and nowStageCfg.isRouge == 1 then
-    --     local attrAddData = getBattleAttrByType(human, nBattleType)
-    --     local totalWeight, randList = generateCfgWeightInfo()
-
-    --     if totalWeight > 0 then
-    --         for i=1, 3 do
-    --             local id = getIndexByRand(totalWeight, randList)
-    --             -- local cfg = battleRougeCfg[id]
-    --             attrAddData.unSelectedAttrList = attrAddData.unSelectedAttrList or {}
-    --             -- attrAddData.unSelectedAttrList[id] = cfg.lv
-    --             attrAddData.unSelectedAttrList[i] = id
-    --         end
-    --         QueryDiffBattleUnSelectAttr(human)
-    --     end
-    -- end
+    local nowStageCfg = tBattleConfig.node[battleID]
+    if nowStageCfg.isRouge and type(nowStageCfg.isRouge) == "number" and nowStageCfg.isRouge == 1 then
+        local attrAddData = getBattleAttrByType(human, nBattleType)
+
+        --需求修改: 普通模式第一次战斗获得肉鸽属性时为指定属性: 9,5,4
+        if not human.db.isBattleFirst and nBattleType == EliteDefine.COPY_ELITE_NORMAL and (not attrAddData.chosenAttrList or not next(attrAddData.chosenAttrList))
+        and battleRougeCfg[9] and battleRougeCfg[5] and battleRougeCfg[4] then
+            attrAddData.unSelectedAttrList = attrAddData.unSelectedAttrList or {}
+
+            attrAddData.unSelectedAttrList[1] = 9
+            attrAddData.unSelectedAttrList[2] = 5
+            attrAddData.unSelectedAttrList[3] = 4
+
+            human.db.isBattleFirst = true
+        else
+            local totalWeight, randList = generateCfgWeightInfo()
+            if totalWeight > 0 then
+                for i=1, 3 do
+                    local id = getIndexByRand(totalWeight, randList)
+                    -- local cfg = battleRougeCfg[id]
+                    attrAddData.unSelectedAttrList = attrAddData.unSelectedAttrList or {}
+                    -- attrAddData.unSelectedAttrList[id] = cfg.lv
+                    attrAddData.unSelectedAttrList[i] = id
+                end
+            end
+        end
+
+        QueryDiffBattleUnSelectAttr(human)
+    end
 
     if nBattleType == EliteDefine.COPY_ELITE_NORMAL then
         TriggerLogic.PublishEvent(TriggerDefine.BATTLE_NORMAL_MODE_PASS, human.db._id, 1)
@@ -4291,12 +4304,14 @@ function ChooseAttr(human, idx)
         if chosenAttrList[targetId].lv >= 4 then
             local newId = getMaxQualityId(targetId)
 
-            chosenAttrList[newId] = {
-                lv = chosenAttrList[targetId].lv,
-                cfgNum = chosenAttrList[targetId].cfgNum
-            }
+            if newId ~= targetId then
+                chosenAttrList[newId] = {
+                    lv = chosenAttrList[targetId].lv,
+                    cfgNum = chosenAttrList[targetId].cfgNum
+                }
 
-            chosenAttrList[targetId] = nil
+                chosenAttrList[targetId] = nil
+            end
         end
     else
         chosenAttrList[id] = {

+ 2 - 1
script/module/lostTemple/lostTempleLogic.lua

@@ -584,7 +584,7 @@ local function nextDB(human)
     local lostLayer, lostX, lostY, lostRandom = makeLostTempLe(nextLayer)
     if not lostLayer then return end
 
-    TriggerLogic.PublishEvent(TriggerDefine.LOSTTEMPLE_PASS_LAYER, human.db._id, 1)
+    -- TriggerLogic.PublishEvent(TriggerDefine.LOSTTEMPLE_PASS_LAYER, human.db._id, 1)
 
     human.lostTemple.layer = lostLayer
     human.lostTemple.x = lostX
@@ -1203,6 +1203,7 @@ function Lost_Handle_Func.summonBox(human, op, y, grid, arg, elementConfig)
             end
             BagLogic.addItemList(human, item, "lostTemple")
             human.lostTemple.randomReward = nil
+            TriggerLogic.PublishEvent(TriggerDefine.LOSTTEMPLE_PASS_LAYER, human.db._id, 1)
         end
 
         -- 判定有没有下一程

+ 3 - 0
script/module/middle/MiddleConnect.lua

@@ -12,6 +12,7 @@ local JjcLadderMiddle = require("jjcLadder.JjcLadderMiddle")
 local WarZoneConf = require("excel.WarZone")    --- 战区配置
 local ChatHandler = require("chat.Handler")
 local MiddleCommonRank = require("middle.MiddleCommonRank")
+local BanLogic = require("scene.BanLogic")
 
 IS_MIDDLE_CONNECT = IS_MIDDLE_CONNECT or nil -- 是否連上跨服 收到WLhello才認為連上了
 
@@ -189,6 +190,8 @@ function WL_HELLO(fd, msg)
             -- msg.svrIndex = Config.SVR_INDEX
             -- InnerMsg.sendMsg(fd, msg)
         end
+
+        BanLogic.NS_Get_BanData()
     end
 end
 

+ 7 - 3
script/module/present/OnlineAwardLogic.lua

@@ -88,6 +88,10 @@ end
 --是否结束
 local function isOver(human)
     local OnlineRewardData = human.db.OnlineRewardData
+    if not OnlineRewardData then
+        return false
+    end
+
     local targetDay = getDiffDay(OnlineRewardData.haveTime)
     local targetCfg = onlineAardCfg[targetDay]
     --配置错误或者已经超过配置里的天数了都不显示
@@ -240,9 +244,9 @@ end
 -- end
 
 --跨天
-function updateDaily(human, funcID)
-    checkHaveTime(human)
-end
+-- function updateDaily(human, funcID)
+--     checkHaveTime(human)
+-- end
 
 --新跨天函数,这里用新的跨天函数是因为ObjHuman.lua中 重置每日在线时间代码会晚于运营活动中的 updateDaily()执行
 --这个活动中,会用到每日在线时间,所以需要重新定义一个跨天函数,在重置每日在线时间后再执行

+ 250 - 0
script/module/scene/BanLogic.lua

@@ -0,0 +1,250 @@
+local Config = require("Config")
+Json = Json or require("common.Json")
+local InnerMsg = require("core.InnerMsg")
+local CommonDB = require("common.CommonDB")
+local MiddleManager = require("middle.MiddleManager")
+local ObjHuman = require("core.ObjHuman")
+local CommonDefine = require("common.CommonDefine")
+local Util = require("common.Util")
+
+-- 禁止等级
+local BAN_LEVEL1 = 1    --禁角色
+local BAN_LEVEL2 = 2    --禁账号
+local BAN_LEVEL3 = 3    --禁设备
+
+
+------------------------------------------当前服是普通服的处理------------------------------------------
+-- 缓存的禁止登录信息列表
+local all_ban_list = {}
+
+local function generateTag(args)
+    local strTag = ""
+    for _, str in ipairs(args) do
+        if strTag == "" then
+            strTag = str
+        else
+            strTag = strTag .. "|" .. str
+        end
+    end
+    return strTag
+end
+
+
+local function isSame(str, account)
+    local t = Util.split(str, "|")
+    account = tostring(account)
+
+    if t[2] == account then
+        return true
+    end
+    return false
+end
+
+-- 更新本地禁止登录信息缓存
+local function updateBanListCache(banTag, banTime)
+    if banTime == 0 then
+        all_ban_list[banTag] = nil
+    else
+        all_ban_list[banTag] = banTime
+    end
+end
+
+-- 通过uuid踢人
+local function kickPlayerByuuid(uuid)
+    if ObjHuman.onlineUuid[uuid] then
+        ObjHuman.doDisconnect(ObjHuman.onlineUuid[uuid], CommonDefine.DISCONNECT_BAN_ROLE)
+
+        local Handler = require("scene.Handler")
+        Handler.sendDisconnect(ObjHuman.onlineUuid[uuid].fd, CommonDefine.DISCONNECT_BAN_ROLE)
+    end
+end
+
+-- 通过account踢人
+local function kickPlayerByAccount(account)
+    for uTag, h in pairs(ObjHuman.onlineNewUniqueTag) do
+        if isSame(uTag, account) then
+            ObjHuman.doDisconnect(h, CommonDefine.DISCONNECT_BANUSER)
+            local Handler = require("scene.Handler")
+            Handler.sendDisconnect(h.fd, CommonDefine.DISCONNECT_BANUSER)
+            break
+        end
+    end
+end
+
+
+-- 向跨服请求封禁数据
+function NS_Get_BanData()
+    local tMsgData = InnerMsg.lw.LW_QUERY_BAN_INFO
+    tMsgData.nSrcServerID = Config.SVR_INDEX
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
+-- 收到跨服推送的封禁数据
+function NS_Init_BanData(banList)
+    for k ,v in pairs(banList) do
+        updateBanListCache(k, v)
+    end
+end
+
+
+-- 通知跨服更新封禁数据
+function Update_CrossServer_BanData(banTag, banTime, banLevel)
+    local tMsgData = InnerMsg.lw.LW_UPDATE_BAN_INFO
+    tMsgData.nSrcServerID = Config.SVR_INDEX
+    tMsgData.banTag = banTag
+    tMsgData.banTime = banTime
+    tMsgData.banLevel = banLevel
+
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
+-- 收到跨服推送的要更新的封禁数据
+function NS_Update_BanData(banTag, banTime, banLevel)
+    updateBanListCache(banTag, banTime)
+
+    --踢对应账号玩家下线
+    if banLevel == BAN_LEVEL2 then
+        local tbl = Util.split(banTag, "|")
+        kickPlayerByAccount(tbl[2])
+    end
+
+    -- 根据设备踢人
+    -- if banLevel == BAN_LEVEL3 then
+    -- end
+end
+
+
+-- web更新封号数据
+function Update_Ban_Info(banStr)
+    local banInfo = Json.decode(banStr)
+    local banTag, banTime
+    local banLevel = BAN_LEVEL1
+
+    -- 禁角色
+    if banInfo.roleBanInfo then
+        banTime = banInfo.roleBanInfo.banTime
+        -- local banTbl = {banInfo.roleBanInfo.channelTag, banInfo.roleBanInfo.serverTag, banInfo.roleBanInfo.roleTag}
+        banTag = banInfo.roleBanInfo.roleTag --generateTag(banTbl)
+
+        if  banTime > 0 then
+            kickPlayerByuuid(banInfo.roleBanInfo.roleTag)
+        end
+    end
+
+    -- 禁账号
+    if banInfo.accountBanInfo then
+        banTime = banInfo.roleBanInfo.banTime
+        local banTbl = {banInfo.roleBanInfo.channelTag, banInfo.roleBanInfo.accountTag}
+        banTag = generateTag(banTbl)
+        banLevel = BAN_LEVEL2
+
+        if  banTime > 0 then
+            kickPlayerByAccount(banInfo.roleBanInfo.accountTag)
+        end
+    end
+
+    -- 禁设备
+    if banInfo.appBanInfo then
+        banTag = banInfo.appBanInfo.appId
+        banTime = banInfo.roleBanInfo.banTime
+        banLevel = BAN_LEVEL3
+    end
+
+    if banTag and banTime then
+        -- 更新本地缓存
+        updateBanListCache(banTag, banTime)
+
+        -- 更新跨服
+        Update_CrossServer_BanData(banTag, banTime, banLevel)
+    end
+end
+
+-- 是否被禁止登录
+function CheckBan(uuid, channelId, account, appId)
+    local now = os.time()
+    if all_ban_list[uuid] and all_ban_list[uuid] > now then
+        return true
+    end
+
+    local banTag = generateTag({channelId, account})
+    if all_ban_list[banTag] and all_ban_list[banTag] > now then
+        return true
+    end
+
+    if all_ban_list[appId] and all_ban_list[appId] > now then
+        return true
+    end
+    return false
+end
+
+-------------------------------------------------------------------------------------------
+
+
+
+
+
+
+
+------------------------------------------当前服是跨服的处理------------------------------------------
+
+local function getBanData()
+    return CommonDB.getValueByKey(CommonDB.KEY_BAN_DATA)
+end
+
+local function updateBanData(newData)
+    CommonDB.UpdateBanData(CommonDB.KEY_BAN_DATA, newData)
+end
+
+
+
+-- 当前服为跨服, 收到普通服请求封禁数据
+function CS_Get_BanData()
+    local banData = getBanData()
+
+    if banData then
+        local tMsgData = InnerMsg.wl.WL_QUERY_BAN_INFO
+
+        for k, v in pairs(banData) do
+            tMsgData.banList[k] = v
+        end
+
+        local fd = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
+        InnerMsg.sendMsg(fd, tMsgData)
+    end
+
+end
+
+-- 当前服为跨服, 收到普通服请求更新封禁数据
+function CS_Update_BanData(msg)
+    local banTime = msg.banTime
+    local banTag = msg.banTag
+    local banLevel = msg.banLevel
+
+    local banData = getBanData()
+    banData = banData or {}
+
+    banData[banTag] = banTime
+    if banTime == 0 then
+        banData[banTag] = nil
+    end
+
+    --更新数据库
+    updateBanData(banData)
+
+    -- 广播给全部区服
+    if banLevel >= BAN_LEVEL2 then
+        local tMsgData = InnerMsg.wl.WL_UPDATE_BAN_INFO
+        tMsgData.banTag = banTag
+        tMsgData.banTime = banTime
+        tMsgData.banLevel = banLevel
+
+        local fdList = MiddleManager.MiddleManager_GetAllFD()
+        for _, fd in pairs(fdList) do
+            pcall(InnerMsg.sendMsg, fd, tMsgData)
+        end
+    end
+end
+
+
+
+-------------------------------------------------------------------------------------------

+ 40 - 20
script/module/scene/Handler.lua

@@ -17,6 +17,12 @@ local AuthCheck = require("scene.AuthCheck")
 local ApiLogic = require("platform.ApiLogic")
 local CDKLoigc = require("present.CDK")
 local MailManager = require("mail.MailManager")
+local BanLogic = require("scene.BanLogic")
+-- 是否禁止登录
+local function isBan(uuid, channelId, account, appId)
+	return BanLogic.CheckBan(uuid, channelId, account, appId)
+end
+
 
 --在线玩家列表不再从 ObjHuman.onlineAccount 获取, 改为从 ObjHuman.onlineNewUniqueTag 获取
 function CG_TEST_PROTO(fd,msg)
@@ -187,34 +193,43 @@ function CG_ASK_LOGIN(fd, msg)
 	local human = ObjHuman.create(fd, account, human_old and human_old.db, uTag)
 	setLoginParams(human, msg, params) -- 设置登录参数
 
+
+	-- 禁止登录检测
+	-- if isBan(human.db and human.db._id, params.phpChanelID, account, params.appid) then
+	-- 	return
+	-- end
+
+
 	if human.db == nil then
 		-- 新号
-        local ip,time = CommonDB.getBanIp(msg.ip)
-        if (time and time > os.time()) then
-            ObjHuman.doDisconnect(human, CommonDefine.DISCONNECT_BANIP)
-			return
-        else
-            CommonDB.delBanIp(msg.ip)
-        end
+        -- local ip,time = CommonDB.getBanIp(msg.ip)
+        -- if (time and time > os.time()) then
+        --     ObjHuman.doDisconnect(human, CommonDefine.DISCONNECT_BANIP)
+		-- 	return
+        -- else
+        --     CommonDB.delBanIp(msg.ip)
+        -- end
 		
 		Log.write(Log.LOGID_OSS_CREATELOSS,account, "", LogDefine.HUMAN_LOST.ENTRANCE, human.ip, human.pf, human.appid, human.phpChanelID)
 		CreateRole.createNewRole(human)
+		-- HumanLogin_Handle(human, params)
 	else
 		-- 封号
-		if human.db.banUserTime == -1 or 
-			(human.db.banUserTime and human.db.banUserTime > os.time()) then
-			ObjHuman.doDisconnect(human, CommonDefine.DISCONNECT_BANUSER)
-			return
-		end
+		-- if human.db.banUserTime == -1 or 
+		-- 	(human.db.banUserTime and human.db.banUserTime > os.time()) then
+		-- 	ObjHuman.doDisconnect(human, CommonDefine.DISCONNECT_BANUSER)
+		-- 	return
+		-- end
 
-        local ip,time = CommonDB.getBanIp(msg.ip)
-        if (time and time > os.time()) then
-			ObjHuman.doDisconnect(human, CommonDefine.DISCONNECT_BANIP)
-			return
-        else
-            CommonDB.delBanIp(msg.ip)
-        end
+        -- local ip,time = CommonDB.getBanIp(msg.ip)
+        -- if (time and time > os.time()) then
+		-- 	ObjHuman.doDisconnect(human, CommonDefine.DISCONNECT_BANIP)
+		-- 	return
+        -- else
+        --     CommonDB.delBanIp(msg.ip)
+        -- end
 		ObjHuman.onLogin(human, nil)
+		-- HumanLogin_Handle(human, params)
 	end
 	-- -- 单次上报时长设置为登录时间
 	-- human.db.onlineTimeDayReport = os.time()
@@ -277,4 +292,9 @@ function canCharge(human)
 		return
 	end
 	return true
-end
+end
+
+
+function CG_SET_BAN(fd, msg)
+	BanLogic.Update_Ban_Info(msg.banInfo)
+end

+ 5 - 0
script/module/scene/Proto.lua

@@ -117,4 +117,9 @@ LevelGuideData = {
 }
 GC_LEVEL_GUIDE = {
 	{"data",		20,		LevelGuideData},
+}
+
+-- 禁止登录设置,禁角色, 禁账号, 禁设备
+CG_SET_BAN = {
+	{"banInfo",			1,		"string"},
 }

+ 3 - 3
script/module/union/UnionTecLogic.lua

@@ -383,9 +383,9 @@ function techLvUp(human,occu,tier)
         local needMillLv, needOther = getNeedMillOhter(human.db.technology[occu][tier].lv, occu, tier)
         local otherLv = getOtherLv(human, occu)
         -- 公会聚义堂 等级没有达到需求 
-        if millLv < needMillLv then
-            return Broadcast.sendErr(human, Util.format(Lang.UNION_TECH_MILL_ERR,  needMillLv) )
-        end
+        -- if millLv < needMillLv then
+        --     return Broadcast.sendErr(human, Util.format(Lang.UNION_TECH_MILL_ERR,  needMillLv) )
+        -- end
 
         -- 其他科技没有达标
         if otherLv < needOther then