Просмотр исходного кода

1.阵法的修改 2.头像对战力加成的修改 3.封号逻辑修改 4.新增渠道返利功能

gitxsm 11 месяцев назад
Родитель
Сommit
2a0cd8f37c

+ 1 - 0
script/common/Log.lua

@@ -72,6 +72,7 @@ function init()
     --[[通用日志]] LOGID_OSS_COMMON = lua_log.reg("log/oss_common","",300)
     --[[合服日志]] LOGID_OSS_MERGE = lua_log.reg("log/oss_merge","",300)
     --[[通用活动日志]] LOGID_OSS_COMMON_ACT = lua_log.reg("log/oss_actcommon","",300)   -- 用于各种活动开启,结束等日志
+    --[[渠道返利日志]] LOGID_OSS_REBATE = lua_log.reg("log/oss_rebate","",300)   -- 用于各种活动开启,结束等日志
 end
 init()
 

+ 4 - 0
script/core/ObjHuman.lua

@@ -97,6 +97,7 @@ local TriggerLogic = require("trigger.TriggerLogic")
 local MainTask = require("dailyTask.MainTask")
 local ClutterDataLogic = require("clutter.ClutterDataLogic")
 local QQBigShot = require("platform.QQBigShot")
+local RebateLogic = require("platform.RebateLogic")
 
 local Json = require("common.Json")
 
@@ -798,6 +799,9 @@ function onLogin(human, isNew)
 	
 	-- 注意 这个函数写在doLogin的最后
 	MiddleLogic.onLogin(human)
+
+	--返利
+	RebateLogic.NS_RebateQuery(human.phpChanelID, human.serverTag, human.db.account)
 end
 
 -- 这里有个潜规则,凡是使用每天都需更新的数据时,都必须先调用这个方法。by cc

+ 2 - 2
script/module/combat/CombatLogic.lua

@@ -1285,8 +1285,8 @@ function combatBegin(human, mapID, param, combatType, cbParam, isSaodang)
  	combatInfo.defHelp = defHelp or {}
  	combatInfo.defFormation = defFormation
 	combatInfo.defJiban = defJiban
-	combatInfo.posAttr[CombatDefine.ATTACK_SIDE] = CombatPosLogic.getPosAttr(attacker)
-	combatInfo.posAttr[CombatDefine.DEFEND_SIDE] = CombatPosLogic.getPosAttr(defender) 
+	combatInfo.posAttr[CombatDefine.ATTACK_SIDE] = CombatPosLogic.getPosAttr(attacker, atkFormation)
+	combatInfo.posAttr[CombatDefine.DEFEND_SIDE] = CombatPosLogic.getPosAttr(defender, defFormation)
 	combatInfo.jiban[CombatDefine.ATTACK_SIDE] = JibanLogic.getJiban(attacker,atkJiban)
 	combatInfo.jiban[CombatDefine.DEFEND_SIDE] = JibanLogic.getJiban(defender,defJiban) 
 	combatInfo.maxRound = getMaxRound(human,combatType)

+ 49 - 2
script/module/combat/CombatPosLogic.lua

@@ -289,6 +289,15 @@ function getCombatHeroZDL(human, combatType)
 	return zhandouli
 end
 
+
+local function getSinglePosAttr(net, attrCfg)
+	for k ,v in ipairs(attrCfg) do
+		net[k].key = v[1]
+		net[k].value = v[2]
+		net[0] = k
+	end
+end
+
 -- 发送阵型信息
 FormationInitFlag = nil
 function formationQuery(human)
@@ -305,6 +314,13 @@ function formationQuery(human)
 				net.list[len1] = v1
 			end
 			net.list[0] = len1
+
+			--阵法属性加成
+			for k2,v2 in ipairs(v.attr) do
+				getSinglePosAttr(net.posAttrLit[k2].posAttr, v2)
+				net.posAttrLit[0] = k2
+			end
+
 			net.id = k
 			net.lv = v.lv
 			net.icon = v.icon
@@ -401,7 +417,28 @@ function posAttrQuery(human)
 	Msg.send(msgRet,human.fd)
 end
 
-function getPosAttr(objList)
+
+local function calcSinglePosAttr(posCfg, pos, obj)
+	local idx = 0
+	for k, v in ipairs(posCfg.pos) do
+		if v == pos then
+			idx = k
+			break
+		end
+	end
+
+	local posAttr = posCfg.attr[idx]
+	for _, v in ipairs(posAttr or {}) do
+		local attrType = v[1]
+		local attrValue = v[2]
+		obj.sysAttr[attrType] = (obj.sysAttr[attrType] or 0) + attrValue
+		obj.isSysAttrChange = true
+	end
+end
+
+
+
+function getPosAttr(objList, formation)
 	local campList = {}
 	for i = 1,CombatDefine.COMBAT_HERO_CNT do
 		local obj = objList[i]
@@ -412,11 +449,21 @@ function getPosAttr(objList)
 	end
 	
 	local attr = {}
-	for k, v in pairs(campList) do 
+	for k, v in pairs(campList) do
 	    local camp = k
 		local cnt = v
 	    caclCampAttr(attr, camp, cnt)
 	end
+
+	--阵法中单个位置的属性加成
+	local posCfg = getFormationConfig(formation)
+	if posCfg then
+		for pos, obj in pairs(objList) do
+			calcSinglePosAttr(posCfg, pos, obj)
+		end
+	end
+
+
 	return attr
 end
 

+ 7 - 0
script/module/combat/Proto.lua

@@ -52,6 +52,12 @@ GC_COMBAT_POS_QUERY = {
     {"totalZdl",	1,	"int"},           --战斗力
 }
 
+POS_ATTR_DATA = {
+	{"posAttr",	2,	Attr},           --战斗力
+}
+
+
+
 CG_COMBAT_FORMATION_QUERY = {}
 CombatFormationNet = {
 	{"id",			1,		"byte"},   -- 阵法id
@@ -59,6 +65,7 @@ CombatFormationNet = {
 	{"icon",		1,		"int"},	   -- 阵法图标
 	{"lv",			1,		"int"},    -- 阵法解锁等级
 	{"list",		9,		"byte"},   -- 阵法可用位置
+	{"posAttrLit",	9,		POS_ATTR_DATA}, --阵法位置属性加成列表
 }
 GC_COMBAT_FORMATION_QUERY = {
 	{"list",	10,	CombatFormationNet},

+ 170 - 0
script/module/platform/RebateLogic.lua

@@ -0,0 +1,170 @@
+--渠道返利逻辑
+local Config = require("Config")
+local InnerMsg = require("core.InnerMsg")
+local ObjHuman = require("core.ObjHuman")
+local RebateCfg = require("excel.rebate")
+local CommonDB = require("common.CommonDB")
+local Util = require("common.Util")
+local MiddleManager = require("middle.MiddleManager")
+local RoleDBLogic = require("role.RoleDBLogic")
+local MailManager = require("mail.MailManager")
+local MailExcel = require("excel.mail")
+local Log = require("common.Log")
+
+-- 返利邮件ID
+local  REBATE_MAIL_ID = 7016
+
+-- 获取玩家总充值金额
+local function getRoleTotalRecharge(account)
+    account = tostring(account)
+    for _, v in ipairs(RebateCfg.rebate) do
+        if v.account == account then
+            return v.totalRecharge
+        end
+    end
+end
+
+-- 检查玩家是否符合返利条件
+local function check(channelId, account)
+    local mainCfg = RebateCfg.main[1]
+    if channelId ~= mainCfg.channelId then
+        return false
+    end
+
+    if getRoleTotalRecharge(account) then
+        return true
+    end
+
+    return false
+end
+
+
+
+----------------------------------------------------普通服-----------------------------------------------------
+
+local function calcRebateItemCnt(account)
+    local roleTotalRecharge = getRoleTotalRecharge(account)
+
+    local rebateDays = RebateCfg.main[1].rebateDays
+
+    return math.ceil(roleTotalRecharge / rebateDays)
+end
+
+
+--玩家登录时
+function NS_RebateQuery(channelId, serverId, account)
+    if not check(channelId, account) then
+        return
+    end
+
+
+    -- 向跨服查询是否返利
+    local tMsgData = InnerMsg.lw.LW_UPDATE_BAN_INFO  --待改
+    tMsgData.nSrcServerID = Config.SVR_INDEX
+    tMsgData.channelId = channelId
+    tMsgData.serverId = serverId
+    tMsgData.account = account
+
+    -- InnerMsg.sendMsg(0, tMsgData)
+end
+
+
+--收到跨服通知给玩家返利
+function NS_Rebate_Do(channelId, serverId, account)
+    local uTag = RoleDBLogic.Generateuuid(channelId, account, serverId)
+
+    local human = ObjHuman.onlineNewUniqueTag[uTag]
+
+    if not human or not human.db or not human.db._id then
+        local logInfo = string.format("channelId: %s, serverId: %s, account: %s, result: %s, time: %s",
+            channelId, serverId, account, "defeat", os.time())
+        Log.write(Log.LOGID_OSS_REBATE, logInfo)
+
+        return
+    end
+
+    -- 发邮件
+    local mailCfg = MailExcel.mail[REBATE_MAIL_ID]
+
+    local itemId = RebateCfg.main[1].rebateItemId
+    local itemCnt = calcRebateItemCnt(account)
+    local itemList = { {itemId, itemCnt } }
+
+    MailManager.add(MailManager.SYSTEM, human.db._id, mailCfg.title, mailCfg.content, itemList, mailCfg.senderName or "GM")
+end
+
+
+----------------------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+----------------------------------------------------跨服-----------------------------------------------------
+
+local function getRebateData()
+    return CommonDB.getValueByKey(CommonDB.KEY_REBATE_DATA)
+end
+
+local function updateRebateData(newData)
+    CommonDB.updateValue(CommonDB.KEY_REBATE_DATA, newData)
+end
+
+
+-- 收到普通服查询是否给玩家返利
+function CS_RebateQuery(msg)
+    local channelId = msg.channelId
+    local serverId = msg.serverId
+    local account = msg.account
+
+    if not check(channelId, account) then
+        return
+    end
+
+    local now = os.time()
+    local rebateData = getRebateData()
+    local mainCfg = RebateCfg.main[1]
+
+    if rebateData and rebateData[account] then
+
+        local roleRebateData = rebateData[account]
+
+        --同账号值返一个区
+        if roleRebateData.serverId ~= serverId then
+            return
+        end
+
+        if roleRebateData.rebateDays >= mainCfg.rebateDays then
+            return
+        end
+
+        -- 一天返一次
+        if Util.isSameDayByTimes(roleRebateData.lastRebateTime, now) then
+            return
+        end
+    end
+
+    rebateData = rebateData or {}
+    rebateData[account] = rebateData[account] or {}
+    local roleRebateData = rebateData[account]
+
+    roleRebateData.serverId = serverId
+    roleRebateData.rebateDays = (roleRebateData.rebateDays or 0) + 1
+    roleRebateData.lastRebateTime = now
+
+    -- 更新数据库
+    updateRebateData(rebateData)
+
+
+    -- 通知游戏服当天可以返利
+    local tMsgData = InnerMsg.wl.WL_UPDATE_BAN_INFO  --待改
+    tMsgData.channelId = channelId
+    tMsgData.serverId = serverId
+    tMsgData.account = account
+    local fd = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
+    InnerMsg.sendMsg(fd, tMsgData)
+end
+
+
+----------------------------------------------------------------------------------------------------------------

+ 8 - 1
script/module/role/RoleHeadLogic.lua

@@ -854,7 +854,14 @@ function doCalcHero(human, attrs)
 	
 	if human.db.headFrameList then
 		for k, v in pairs(human.db.headFrameList) do
-			if isActive(human, HEAD_TYPE_2, k) and human.db.headFrame == k then
+			-- if isActive(human, HEAD_TYPE_2, k) and human.db.headFrame == k then
+			-- 	local config = getConfig(HEAD_TYPE_2, k)
+			-- 	for k1,v1 in ipairs(config.attrs) do
+			-- 		RoleAttr.updateValue(v1[1], v1[2], attrs)
+			-- 	end
+			-- end
+			-- 改为所有头像框加成属性叠加
+			if isActive(human, HEAD_TYPE_2, k) then
 				local config = getConfig(HEAD_TYPE_2, k)
 				for k1,v1 in ipairs(config.attrs) do
 					RoleAttr.updateValue(v1[1], v1[2], attrs)

+ 105 - 80
script/module/scene/BanLogic.lua

@@ -1,3 +1,4 @@
+--封号逻辑
 local Config = require("Config")
 Json = Json or require("common.Json")
 local InnerMsg = require("core.InnerMsg")
@@ -14,9 +15,6 @@ local BAN_LEVEL3 = 3    --禁设备
 
 
 ------------------------------------------当前服是普通服的处理------------------------------------------
--- 缓存的禁止登录信息列表
-local all_ban_list = {}
-
 local function generateTag(args)
     local strTag = ""
     for _, str in ipairs(args) do
@@ -29,33 +27,35 @@ local function generateTag(args)
     return strTag
 end
 
+-- 获取本服缓存的封禁数据
+local function getBanCache()
+    return CommonDB.GetBanCache()
+end
+
+-- 更新本服缓存的封禁数据
+local function updateBanCache(banTag, banTime)
+    CommonDB.UpdateBanCache(banTag, banTime)
+end
+
 
 local function isSame(str, account)
     local t = Util.split(str, "|")
     account = tostring(account)
-
-    if t[2] == account then
+    if t[3] == 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
+        local fd = ObjHuman.onlineUuid[uuid].fd
         ObjHuman.doDisconnect(ObjHuman.onlineUuid[uuid], CommonDefine.DISCONNECT_BAN_ROLE)
 
         local Handler = require("scene.Handler")
-        Handler.sendDisconnect(ObjHuman.onlineUuid[uuid].fd, CommonDefine.DISCONNECT_BAN_ROLE)
+        Handler.sendDisconnect(fd, CommonDefine.DISCONNECT_BAN_ROLE)
     end
 end
 
@@ -63,9 +63,10 @@ end
 local function kickPlayerByAccount(account)
     for uTag, h in pairs(ObjHuman.onlineNewUniqueTag) do
         if isSame(uTag, account) then
+            local fd = h.fd
             ObjHuman.doDisconnect(h, CommonDefine.DISCONNECT_BANUSER)
             local Handler = require("scene.Handler")
-            Handler.sendDisconnect(h.fd, CommonDefine.DISCONNECT_BANUSER)
+            Handler.sendDisconnect(fd, CommonDefine.DISCONNECT_BANUSER)
             break
         end
     end
@@ -82,96 +83,87 @@ end
 -- 收到跨服推送的封禁数据
 function NS_Init_BanData(banList)
     for k ,v in pairs(banList) do
-        updateBanListCache(k, v)
+        print("===========NS_Init_BanData============", k,v)
+        updateBanCache(k, v)
     end
 end
 
 
 -- 通知跨服更新封禁数据
-function Update_CrossServer_BanData(banTag, banTime, banLevel)
+function Update_CrossServer_BanData(banStr)
     local tMsgData = InnerMsg.lw.LW_UPDATE_BAN_INFO
     tMsgData.nSrcServerID = Config.SVR_INDEX
-    tMsgData.banTag = banTag
-    tMsgData.banTime = banTime
-    tMsgData.banLevel = banLevel
+    tMsgData.banStr = banStr
 
     InnerMsg.sendMsg(0, tMsgData)
 end
 
 -- 收到跨服推送的要更新的封禁数据
-function NS_Update_BanData(banTag, banTime, banLevel)
-    updateBanListCache(banTag, banTime)
+function NS_Update_BanData(banStr)
+    print("============NS_Update_BanData==============", banStr)
+    local banInfo = Json.Decode(banStr)
+
+    -- 禁账号
+    if banInfo.accountBanInfo then
+        local banTime = banInfo.accountBanInfo.banTime
+        local banTbl = {banInfo.accountBanInfo.channelTag, banInfo.accountBanInfo.accountTag}
+        local banTag = generateTag(banTbl)
+
+        if  banTime > 0 then
+            kickPlayerByAccount(banInfo.accountBanInfo.accountTag)
+        end
+
+        updateBanCache(banTag, banTime)
+    end
 
-    --踢对应账号玩家下线
-    if banLevel == BAN_LEVEL2 then
-        local tbl = Util.split(banTag, "|")
-        kickPlayerByAccount(tbl[2])
+
+    -- 禁设备
+    if banInfo.appBanInfo then
+        updateBanCache(banInfo.appBanInfo.appId, banInfo.appBanInfo.banTime)
     end
 
-    -- 根据设备踢人
-    -- if banLevel == BAN_LEVEL3 then
-    -- end
 end
 
 
--- web更新封号数据
+-- Web请求普通游戏服更新封号数据
 function Update_Ban_Info(banStr)
-    local banInfo = Json.decode(banStr)
-    local banTag, banTime
-    local banLevel = BAN_LEVEL1
+    local banInfo = Json.Decode(banStr)
 
     -- 禁角色
     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)
+        local banTime = banInfo.roleBanInfo.banTime
+        local banTag = banInfo.roleBanInfo.roleTag
 
-        if  banTime > 0 then
-            kickPlayerByuuid(banInfo.roleBanInfo.roleTag)
+        if banTime > 0 then
+            kickPlayerByuuid(banTag)
         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
+        -- 更新本地
+        updateBanCache(banTag, banTime)
     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
+    Update_CrossServer_BanData(banStr)
 end
 
 -- 是否被禁止登录
 function CheckBan(uuid, channelId, account, appId)
+    print("=============CheckBan0============")
+    local banListCache = getBanCache()
+    for k ,v in pairs(banListCache) do
+        print("=============CheckBan1============", k,v)
+    end
+
     local now = os.time()
-    if all_ban_list[uuid] and all_ban_list[uuid] > now then
+    if banListCache[uuid] and banListCache[uuid] > now then
         return true
     end
 
     local banTag = generateTag({channelId, account})
-    if all_ban_list[banTag] and all_ban_list[banTag] > now then
+    if banListCache[banTag] and banListCache[banTag] > now then
         return true
     end
 
-    if all_ban_list[appId] and all_ban_list[appId] > now then
+    if banListCache[appId] and banListCache[appId] > now then
         return true
     end
     return false
@@ -192,15 +184,16 @@ local function getBanData()
 end
 
 local function updateBanData(newData)
-    CommonDB.UpdateBanData(CommonDB.KEY_BAN_DATA, newData)
+    CommonDB.UpdateBanData(newData)
 end
 
 
 
--- 当前服为跨服, 收到普通服请求封禁数据
-function CS_Get_BanData()
+-- 当前服为跨服, 收到普通服请求获取封禁数据
+function CS_Get_BanData(msg)
     local banData = getBanData()
 
+    print("=============CS_Get_BanData============", type(banData))
     if banData then
         local tMsgData = InnerMsg.wl.WL_QUERY_BAN_INFO
 
@@ -215,28 +208,60 @@ function CS_Get_BanData()
 end
 
 -- 当前服为跨服, 收到普通服请求更新封禁数据
-function CS_Update_BanData(msg)
-    local banTime = msg.banTime
-    local banTag = msg.banTag
-    local banLevel = msg.banLevel
+function CS_Update_BanData(banStr)
+    print("============CS_Update_BanData==============", banStr)
+    local banTag, banTime
+    local banInfo = Json.Decode(banStr)
 
     local banData = getBanData()
     banData = banData or {}
 
-    banData[banTag] = banTime
-    if banTime == 0 then
-        banData[banTag] = nil
+    -- 禁角色
+    if banInfo.roleBanInfo then
+        banTag = banInfo.roleBanInfo.roleTag
+        banTime = banInfo.roleBanInfo.banTime
+
+        banData[banTag] = banTime
+        if banTime == 0 then
+            banData[banTag] = nil
+        end
+    end
+
+
+    -- 禁账号
+    if banInfo.accountBanInfo then
+        banTime = banInfo.accountBanInfo.banTime
+        local banTbl = {banInfo.accountBanInfo.channelTag, banInfo.accountBanInfo.accountTag}
+        banTag = generateTag(banTbl)
+
+        banData[banTag] = banTime
+        if banTime == 0 then
+            banData[banTag] = nil
+        end
+    end
+
+
+    -- 禁设备
+    if banInfo.appBanInfo then
+        banTag = banInfo.appBanInfo.appId
+        banTime = banInfo.appBanInfo.banTime
+
+        banData[banTag] = banTime
+        if banTime == 0 then
+            banData[banTag] = nil
+        end
     end
 
     --更新数据库
     updateBanData(banData)
 
     -- 广播给全部区服
-    if banLevel >= BAN_LEVEL2 then
+    if banInfo.accountBanInfo or banInfo.appBanInfo then
+        banInfo.roleBanInfo = nil
+        banStr = Json.Encode(banInfo)
+
         local tMsgData = InnerMsg.wl.WL_UPDATE_BAN_INFO
-        tMsgData.banTag = banTag
-        tMsgData.banTime = banTime
-        tMsgData.banLevel = banLevel
+        tMsgData.banStr = banStr
 
         local fdList = MiddleManager.MiddleManager_GetAllFD()
         for _, fd in pairs(fdList) do

+ 6 - 3
script/module/scene/Handler.lua

@@ -20,6 +20,7 @@ local MailManager = require("mail.MailManager")
 local QQBigShot = require("platform.QQBigShot")
 local BanLogic = require("scene.BanLogic")
 
+
 local function HumanLogin_Handle(human, params)
 	print("[HumanLogin_Handle] 进入了判断")
 	table.print_lua_table(params)
@@ -41,6 +42,7 @@ function CG_TEST_PROTO(fd,msg)
 	local param = Json.Decode(msg.param)
 	local uTag = RoleDBLogic.Generateuuid(param.channel_id, msg.account, msg.serverTag)
 
+
 	if param.type == "UseCDKV2" then
 		-- local human = ObjHuman.onlineAccount[msg.account]
 		local human = ObjHuman.onlineNewUniqueTag[uTag]
@@ -206,9 +208,10 @@ function CG_ASK_LOGIN(fd, msg)
 
 
 	-- 禁止登录检测
-	-- if isBan(human.db and human.db._id, params.phpChanelID, account, params.appid) then
-	-- 	return
-	-- end
+	if isBan(human.db and human.db._id, params.phpChanelID, account, params.appid) then
+		print("=======================isBan=====================")
+		return
+	end
 
 
 	if human.db == nil then