gitxsm 1 год назад
Родитель
Сommit
3bf3142bb9
32 измененных файлов с 1008 добавлено и 145 удалено
  1. 343 0
      script/Main1.lua
  2. 2 1
      script/common/DB.lua
  3. 3 0
      script/common/Log.lua
  4. 51 21
      script/core/ObjHuman.lua
  5. 3 3
      script/core/RoleDel.lua
  6. 98 0
      script/merge/MergeServerDefine.lua
  7. 248 0
      script/merge/MergeServerLogic.lua
  8. 2 1
      script/module/absAct/AbsJifenDrawLogic.lua
  9. 3 1
      script/module/absAct/HeroComeLogic.lua
  10. 2 1
      script/module/absAct/PerpleHeroLogic.lua
  11. 127 69
      script/module/battle/BattleLogic.lua
  12. 1 1
      script/module/billboard/BillboardDB.lua
  13. 3 1
      script/module/chat/ChatLogic.lua
  14. 5 2
      script/module/chat/Gm.lua
  15. 6 3
      script/module/copy/CopyLogic.lua
  16. 2 1
      script/module/dailyTask/DailyShareTaskLogic.lua
  17. 4 2
      script/module/drawCard/DrawCardLogic.lua
  18. 13 5
      script/module/fuwen/FuwenLogic.lua
  19. 6 3
      script/module/guide/GuideLogic.lua
  20. 9 3
      script/module/hero/HeroLogic.lua
  21. 2 0
      script/module/mail/MailManager.lua
  22. 3 0
      script/module/middle/MiddleCommonLogic.lua
  23. 4 2
      script/module/moshou/MoshouLogic.lua
  24. 13 5
      script/module/platform/ApiLogic.lua
  25. 2 1
      script/module/present/LimitPerpleHeroLogic.lua
  26. 28 10
      script/module/role/CreateRole.lua
  27. 2 1
      script/module/role/Handler.lua
  28. 3 0
      script/module/role/RoleDBLogic.lua
  29. 12 4
      script/module/scene/Handler.lua
  30. 4 2
      script/module/topup/BuyLogic.lua
  31. 2 1
      script/module/union/UnionTecLogic.lua
  32. 2 1
      script/module/yjTreasure/YjTreasureLogic.lua

+ 343 - 0
script/Main1.lua

@@ -0,0 +1,343 @@
+if jit then
+    jit.off()
+    jit.flush()
+    print("jit close")
+end
+
+real_os_time = real_os_time or os.time 
+local Timer   
+function os.time(tb) 
+    if tb then      
+        return real_os_time(tb)    
+    end    
+    Timer = Timer or require("core.Timer")    
+    local t = Timer.now          
+    return 0 < t and (t - t % 1000) / 1000 or real_os_time()         
+end
+
+real_os_date = real_os_date or os.date
+
+local tb = {}     
+for i = 1, 64 do                
+    tb[i] = {}                  
+end
+
+
+local tblen = 0                                 
+function os.date(fmt, t)                          
+    t = t or os.time()                    
+    if fmt == "*t" then                  
+        tblen = tblen + 1   
+        if #tb < tblen then                  
+            tblen = 1                      
+        end            
+        local d = tb[tblen]       
+        d.year, d.month, d.day, d.hour, d.min, d.sec, d.wday,d.yday = global.date(t)        
+        return d             
+    else
+        return real_os_date(fmt, t) 
+    end 
+end
+
+adj = adj or {}
+envs = envs or {}
+file_last_modify_time = file_last_modify_time or {}
+loaded = loaded or {}
+str2filename = str2filename or {}
+local sta = {}
+tb_loadfile = tb_loadfile or {} 
+local function hot_dfs(a)
+    if loaded[a] then
+        print("hot=====", a)  
+        loaded[a] = nil
+        for b in pairs(adj[a]) do 
+            hot_dfs(b)  
+        end   
+    end
+end 
+
+local function hot()
+    for k, v in pairs(str2filename) do
+        local a = global.get_file_last_modify_time(v)   
+        if a ~= file_last_modify_time[k] then
+            file_last_modify_time[k] = a 
+            tb_loadfile[k] = nil    
+            hot_dfs(k)
+        end
+    end 
+end
+
+collectgarbage("step", 100000)
+hot()
+collectgarbage("step", 100000)
+
+local path = {
+    "script/",
+    "script/module/", 
+}  
+
+local require_cnt = 0 
+_G.old_require =  _G.old_require or require
+
+threadID = threadID or nil
+function _G.get_tid() 
+    if not threadID then  
+        threadID = _G.get_thread_id(_G.logic_id) 
+    end  
+    return threadID
+end
+
+ConfigLoadFile = ConfigLoadFile or nil
+
+function require(str, not_need_exist) 
+    
+    if not ConfigLoadFile then
+        ConfigLoadFile = {}
+        ConfigLoadFile = require("Config") 
+        print("load excel project:", ConfigLoadFile.PROJECT_NAME)
+    end
+    require_cnt = require_cnt + 1 
+    adj[str] = adj[str] or {} 
+    if sta[#sta] then   
+        adj[str][sta[#sta]] = true 
+    end 
+    sta[#sta + 1] = str    
+    if not loaded[str] then  
+        loaded[str] = true  
+        envs[str] = envs[str] or {  
+            _G = _G,  
+            assert = assert, 
+            error = error, 
+            getfenv = getfenv,  
+            ipairs = ipairs,  
+            load = load,   
+            next = next,   
+            pairs = pairs,
+            pcall = pcall,   
+            print = print,  
+            require = require,    
+            setmetatable = setmetatable,
+            tonumber = tonumber,  
+            tostring = tostring, 
+            type = type,  
+
+            debug = debug,  
+            io = io,  
+            math = math, 
+            string = string,   
+            table = table,  
+            os = os, 
+        } 
+        envs[str]._ENV = envs[str]   
+        if not str2filename[str] then    
+            local filename = string.gsub(str, "%.", "/") .. ".lua"  
+            local _, excelPos = string.find(filename, "excel/", 1, true)
+            if excelPos then
+                local prename = string.sub(filename, 1, excelPos)
+                local lastname = string.sub(filename, excelPos+1, #filename) 
+                filename = prename .. ConfigLoadFile.PROJECT_NAME .. "/" .. lastname
+            end              
+            local ac  
+            for _, v in ipairs(path) do  
+                local pre_filename = v .. filename    
+                local a = global.get_file_last_modify_time(pre_filename)   
+                if a ~= 0 then 
+                    str2filename[str] = pre_filename   
+                    file_last_modify_time[str] = a     
+                    ac = true  
+                    break  
+                end
+            end             
+            if not ac then  
+                if not_need_exist then
+                    return
+                else
+                    assert(nil, str .. " not exist") 
+                end   
+            end 
+        end 
+        local fun = tb_loadfile[str] 
+        if not fun then   
+            local err  
+            fun, err = loadfile(str2filename[str], nil, envs[str])  
+
+            if not fun then 
+                assert(nil, err) 
+            end  
+        end    
+        local require_cnt_old = require_cnt   
+        fun()    
+        if require_cnt_old < require_cnt then   
+            tb_loadfile[str] = fun    
+        end   
+    end  
+    sta[#sta] = nil   
+    return envs[str]  
+end
+
+modtb = modtb or nil
+
+local function cmd2str(cmd)
+    if modtb then  
+    return
+    end  
+    local f = io.popen(cmd) 
+    local str = f:read("*a")   
+    assert(io.close(f)) 
+    return str
+end
+
+local function get_modules(str)
+    if modtb then
+        return modtb   
+    end  
+    modtb = {}
+    local i = 1  
+    while true do 
+        local j = string.find(str, "\n", i)
+        if not j then  
+            break
+        end 
+        modtb[#modtb + 1] = string.sub(str, i, j - 1)
+        i = j + 1
+    end 
+    table.sort(modtb)
+    return modtb
+end
+
+local cmd = os.getenv("OS") == "Windows_NT" and "dir/b script\\module" or "ls script/module"
+local m = get_modules(cmd2str(cmd))
+local Msg = require("core.Msg") 
+local InnerMsg = require("core.InnerMsg")
+local Config = require("Config")  
+
+if Config.IS_MIDDLE == true then
+    _G['is_middle'] = true
+end
+
+-- function init_proto_id()  
+--     if has_init_proto_id then 
+--         return  
+--     end  
+--     local protoIDS = require("common.ProtoID")  
+--     has_init_proto_id = true  
+--     Msg.proto_id = {}      
+
+--     for k,v in pairs(protoIDS) do 
+--         if type(k) == "number" then 
+--             Msg.proto_id[v] = k 
+--         end
+--     end
+
+--     protoIDS = require("common.InnerProtoID")
+--     InnerMsg.proto_id = {}   
+--     for k,v in pairs(protoIDS) do
+--         if type(k) == "number" then  
+--             InnerMsg.proto_id[v] = k    
+--         end
+--     end 
+-- end 
+-- init_proto_id() 
+-- require("core.PKLimit")
+
+-- local function requireModule(module_name) 
+--     local proto = require(module_name .. ".Proto", true)
+--     if not proto then
+--         return
+--     end
+--     local handler = require(module_name .. ".Handler", true)
+--     for k, v in pairs(proto) do
+--         local sub = string.sub(k, 1, 2)
+--         if sub == "CG" or sub == "GC" then
+--             if sub == "CG" and not handler[k] then
+--                 assert(nil, k .. " not exist in HandlerL.lua")
+--             end
+--             local pid = Msg.proto_id[k] 
+--             Msg.register(k, pid, v, handler and handler[k])
+--         elseif sub == "WL" or sub == "LW" then
+--             assert(nil, k.." can't define here")            
+--         end
+--     end
+-- end
+
+-- for _, v in pairs(m) do
+--     requireModule(v)
+-- end
+
+-- local function initInnerProto()
+--     local proto = require("common.InnerProto")
+--     if not proto then
+--         return 
+--     end
+--     local handler = require("common.InnerHandler", true)
+--     for k, v in pairs(proto) do
+--         local sub = string.sub(k, 1, 2)
+--         local pid = InnerMsg.proto_id[k]
+--         if sub == "LW" or sub == "WL" then
+--             if sub == "LW" and not handler[k] then
+--                 assert(nil, k .. " not exist in handler.lua")
+--             end     
+--             InnerMsg.register(k, pid, v, handler and handler[k])     
+--         elseif sub == "CG" or sub == "GC" then
+--             assert(nil, k.." can't define here")
+--         end
+--     end
+-- end
+
+-- initInnerProto()
+
+local Log = require("common.Log") 
+local Timer = require("core.Timer")
+local Monitor = require("core.Monitor") 
+local AdminLogic = require("AdminLogic") 
+local ObjHuman = require("core.ObjHuman")   
+local Obj = require("core.Obj")
+local msg_ex = _G.msg_ex 
+-- function handlerMsg(fd, protoId) 
+--     local container = Msg.cg[protoId] 
+--     if msg_ex.read(protoId, container) then 
+--         print("err handlerMsg msg_ex.read", protoId, Msg.proto_name[protoId])
+--         local mm = Msg.gc.GC_DISCONNECT  
+--         mm.code = 0
+--         mm.msg = "proto err" 
+--         Msg.send(mm, fd)    
+--         return
+--     end  
+--     local id = ObjHuman.fds[fd]
+--     if id then
+--         local human = Obj.objs[id] 
+--         if not human then 
+--             assert() 
+--         end 
+--         if protoId == Msg.proto_id.CG_ASK_LOGIN then 
+--             assert()    
+--         end
+--         Monitor.handlePacket(human, container, protoId)  
+--     else        
+--         if protoId ~= Msg.proto_id.CG_AA_DISCONNECT and 
+--             protoId ~= Msg.proto_id.CG_ASK_LOGIN and
+--             protoId ~= Msg.proto_id.CG_MIDDLE_LOGIN and 
+--             protoId ~= Msg.proto_id.CG_TEST_PROTO then
+--             --如果登录了两个相同的帐号,第二个帐号把第一个帐号踢掉后,第一个帐号在收到断开的消息之前,可能继续发包,就会跑到这里来 
+--             return
+--         end
+--         Monitor.handlePacket(fd, container, protoId)
+--     end
+-- end
+
+Timer.now = global.get_msec() --当前时间 
+function handlerTime(msec)    
+    Timer.handlerTime(msec) 
+end
+
+
+--合服开始
+local MergeServerLogic = require("merge.MergeServerLogic")
+MergeServerLogic.StartMergeServer()
+
+
+
+
+
+collectgarbage("collect")
+print("logic:"..collectgarbage("count"))--, jit.status()) 

+ 2 - 1
script/common/DB.lua

@@ -43,7 +43,8 @@ function init()
 	lua_mongo.client(Config.DB_IP)
 	lua_mongo.auth(Config.DB_NAME, Config.DB_USER, Config.DB_PASS)
 	lua_mongo.index(db_char, "name")
-	lua_mongo.index(db_char, "account")	
+	lua_mongo.index(db_char, "account")
+	lua_mongo.index(db_char, "newUniqueTag")
 	lua_mongo.index(db_char, "zhandouli")	
 	lua_mongo.index(db_char, "identity")
 	lua_mongo.index(db_char, "lv")

+ 3 - 0
script/common/Log.lua

@@ -1,6 +1,8 @@
 local lua_log = _G.lua_log
 local LogDefine = require("common.LogDefine")
 
+
+--日志中的 uuid 由原来的 account 改为 newUniqueTag
 function init()
     if has_init then
         return
@@ -68,6 +70,7 @@ function init()
     --[[代金券]] LOGID_OSS_VOUCHERSHOP = lua_log.reg("log/vouchershop","",300)
     --[[埋点]] LOGID_OSS_MAIDIAN = lua_log.reg("log/oss_maidian","",300)
     --[[通用日志]] LOGID_OSS_COMMON = lua_log.reg("log/oss_common","",300)
+    --[[合服日志]] LOGID_OSS_MERGE = lua_log.reg("log/oss_merge","",300)
 end
 init()
 

+ 51 - 21
script/core/ObjHuman.lua

@@ -96,23 +96,28 @@ local RoleHeadLogic = require("role.RoleHeadLogic")
 local Json = require("common.Json")
 
 fds				= fds or {}				-- fd->obj_id,包括创角中+游戏中
-onlineAccount 	= onlineAccount or {} 	-- account->human,包括创角中+游戏中
+onlineAccount 	= onlineAccount or {} 	-- account->human,包括创角中+游戏中(弃用, 没删掉是防止有些有些暂时没修改的地方访问时报错)
+onlineNewUniqueTag = onlineNewUniqueTag or {} -- NewUniqueTag->human, 合服后可能存在多个角色account相同情况,所以用NewUniqueTag 
 onlineHuman		= onlineHuman or {} 	-- name->human,仅包括游戏中
 onlineUuid		= onlineUuid or {} 		-- uuid->human,仅包括游戏中
 
-function create(fd, account, db)
+function create(fd, account, db, serverTag)
 	local human = {}
 	Obj.create(human, Obj.TYPE_HUMAN)
 	
 	fds[fd] = human.id
 	
 	human.fd = fd
-	human.db = db or RoleDBLogic.loadRole(account)
+	-- human.db = db or RoleDBLogic.loadRole(account)
+
+	local uTag = RoleDBLogic.generateuuid(account, serverTag)
+	human.db = db or RoleDBLogic.loadRole(uTag)
 
 	if human.db ~= nil then
 		initHuman(human)
 	else
 		human.account = account
+		human.serverTag = serverTag
 	end	
 	return human
 end
@@ -125,29 +130,34 @@ function initHuman(human)
 	human.firstEnter = true										-- 首次进入场景
 
 	-- 角色信息初始化
-	onlineAccount[human.db.account] = human
+	--onlineAccount[human.db.account] = human
+	onlineNewUniqueTag[human.db.newUniqueTag] = human
+
 	onlineHuman[human.db.name] = human
 	onlineUuid[human.db._id] = human
 end
 
 function destroy(human)
-	local account = human.account or human.db.account	
+	--local account = human.account or human.db.account
+	local newUniqueTag = human.newUniqueTag or human.db.newUniqueTag
 	if human.fd then fds[human.fd] = nil end
 	if human.db then	-- 已创角
-		onlineAccount[account] = nil	
-		onlineHuman[human.db.name] = nil		
+		--onlineAccount[account] = nil
+		onlineNewUniqueTag[newUniqueTag] = nil
+		onlineHuman[human.db.name] = nil
 		onlineUuid[human.db._id] = nil
 	end
 	Obj.destroy(human)
 end
 
 function doDisconnect(human, code)
-	print("doDisconnect account:", human.account or human.db.account, " code:", code)
+	print("doDisconnect newUniqueTag:", human.newUniqueTag or human.db.newUniqueTag, " code:", code)
 
 	if human.db then
 		local now = os.time()
 		if human.db.changeNameCnt ~= nil then
-			Log.write(Log.LOGID_OSS_LOGOUT, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip, code, now - human.db.lastLoginTime)
+			--Log.write(Log.LOGID_OSS_LOGOUT, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip, code, now - human.db.lastLoginTime)
+			Log.write(Log.LOGID_OSS_LOGOUT, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, human.db.ip, code, now - human.db.lastLoginTime)
 		end
 		if human.fd then 	
 			onLogout(human)
@@ -178,7 +188,8 @@ function doDisconnect(human, code)
 				else
 					local ret, err = pcall(save, human)
 					if not ret then
-						Log.write(Log.LOGID_ERR_PCALL, "destroy account=" .. human.db.account, err)
+						--Log.write(Log.LOGID_ERR_PCALL, "destroy account=" .. human.db.account, err)
+						Log.write(Log.LOGID_ERR_PCALL, "destroy newUniqueTag=" .. human.db.newUniqueTag, err)
 					end
 				end
 			end
@@ -238,10 +249,18 @@ end
 function humanOfflineCheck()
 	if _G.is_middle == true then
 		local now = os.time()
-		for account, human in pairs(onlineAccount) do
+		-- for account, human in pairs(onlineAccount) do
+		-- 	if human.fd == nil then
+		-- 		if human.f5 == nil or Timer.now - human.f5 > 30000 then 
+		-- 			doDisconnect(human, CommonDefine.DISCONNECT_NORMAL_AFTER)
+		-- 		end
+		-- 	end
+		-- end
+
+		for _, human in pairs(onlineNewUniqueTag) do
 			if human.fd == nil then
 				if human.f5 == nil or Timer.now - human.f5 > 30000 then 
-					doDisconnect(human, CommonDefine.DISCONNECT_NORMAL_AFTER, "")
+					doDisconnect(human, CommonDefine.DISCONNECT_NORMAL_AFTER)
 				end
 			end
 		end
@@ -275,9 +294,13 @@ end
 -- 获得在线人数(包含停留在创角页)
 function getOnlineCnt()
 	local onlineCnt = 0
-	for _ in pairs(onlineAccount) do
+	-- for _ in pairs(onlineAccount) do
+	-- 	onlineCnt = onlineCnt + 1
+	-- end
+	for _ in pairs(onlineNewUniqueTag) do
 		onlineCnt = onlineCnt + 1
 	end
+
 	return onlineCnt
 end
 
@@ -431,7 +454,8 @@ function onLvUpCB(human, oldLv, newLv)
 	MainDianLogic.MaiDian_Begin(human, MaiDianDefine.MAIDIAN_TYPE_LV, {nValue = newLv})
 	
 	--升级日志
-	Log.write(Log.LOGID_OSS_LEVELUP, human.db._id, human.db.account, human.db.name, oldLv, newLv)  	
+	--Log.write(Log.LOGID_OSS_LEVELUP, human.db._id, human.db.account, human.db.name, oldLv, newLv)
+	Log.write(Log.LOGID_OSS_LEVELUP, human.db._id, human.db.newUniqueTag, human.db.name, oldLv, newLv)
 end
 
 function addExp(human, addExp)
@@ -490,7 +514,9 @@ function updateJinbi(human, d, logType,item_id, num)
 	--金币使用日志
 	if item_id == nil then item_id = 0 end
 	if num == nil then num = 0 end
-	Log.write(Log.LOGID_OSS_JINBI, human.db._id, human.db.account, human.db.name, human.db.lv, d, LogDefine.DEFINE[logType] + LogDefine.TYPE["jinbi"], item_id or 0, num or 0, val)
+	--Log.write(Log.LOGID_OSS_JINBI, human.db._id, human.db.account, human.db.name, human.db.lv, d, LogDefine.DEFINE[logType] + LogDefine.TYPE["jinbi"], item_id or 0, num or 0, val)
+
+	Log.write(Log.LOGID_OSS_JINBI, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, d, LogDefine.DEFINE[logType] + LogDefine.TYPE["jinbi"], item_id or 0, num or 0, val)
 	human.db.jinbi = val
 	if human.fd then
 		human.attr[RoleDefine.JINBI] = human.db.jinbi
@@ -514,8 +540,8 @@ function addZuanshi(human, d, logType, item_id, num)
 	local val = human.db.zuanshi + d
 
 	--钻石使用日志
-	Log.write(Log.LOGID_OSS_GOLD, human.db._id, human.db.account, human.db.name, human.db.lv, d, LogDefine.DEFINE[logType] + LogDefine.TYPE["zuanshi"] , item_id or 0, num or 0, val)
-	
+	--Log.write(Log.LOGID_OSS_GOLD, human.db._id, human.db.account, human.db.name, human.db.lv, d, LogDefine.DEFINE[logType] + LogDefine.TYPE["zuanshi"] , item_id or 0, num or 0, val)
+	Log.write(Log.LOGID_OSS_GOLD, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, d, LogDefine.DEFINE[logType] + LogDefine.TYPE["zuanshi"] , item_id or 0, num or 0, val)
 	human.db.zuanshi = val
 	if human.fd then
 		human.attr[RoleDefine.ZUANSHI] = human.db.zuanshi
@@ -541,7 +567,8 @@ function decZuanshi(human, d, logType, item_id, num, noSend)
 		assert()
 	end
 	human.db.zuanshi = val
-	Log.write(Log.LOGID_OSS_GOLD, human.db._id, human.db.account, human.db.name, human.db.lv, d, LogDefine.DEFINE[logType] + LogDefine.TYPE["zuanshi"] , item_id or 0, num or 0, val)
+	--Log.write(Log.LOGID_OSS_GOLD, human.db._id, human.db.account, human.db.name, human.db.lv, d, LogDefine.DEFINE[logType] + LogDefine.TYPE["zuanshi"] , item_id or 0, num or 0, val)
+	Log.write(Log.LOGID_OSS_GOLD, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, d, LogDefine.DEFINE[logType] + LogDefine.TYPE["zuanshi"] , item_id or 0, num or 0, val)
 	if human.fd then
 		human.attr[RoleDefine.ZUANSHI] = human.db.zuanshi
 		sendAttr(human, RoleDefine.ZUANSHI)
@@ -593,7 +620,9 @@ function updateFriendHeart(human, d, logType,item_id, num)
 	--好友爱心使用日志
 	if item_id == nil then item_id = 0 end
 	if num == nil then num = 0 end
-	Log.write(Log.LOGID_OSS_FRIENDHEART, human.db._id, human.db.account, human.db.name, human.db.lv, d, LogDefine.DEFINE[logType] + LogDefine.TYPE["friendheart"], item_id or 0, num or 0, val)
+	--Log.write(Log.LOGID_OSS_FRIENDHEART, human.db._id, human.db.account, human.db.name, human.db.lv, d, LogDefine.DEFINE[logType] + LogDefine.TYPE["friendheart"], item_id or 0, num or 0, val)
+	Log.write(Log.LOGID_OSS_FRIENDHEART, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, d, LogDefine.DEFINE[logType] + LogDefine.TYPE["friendheart"], item_id or 0, num or 0, val)
+	
 	human.db.friendHeart = val
 	if human.fd then
 		human.attr[RoleDefine.FRIENDHEART] = human.db.friendHeart
@@ -674,7 +703,8 @@ function onLogin(human, isNew)
 	human.db.phpChanelID = human.phpChanelID
 
 	if human.db.changeNameCnt ~= nil then
-		Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip)
+		--Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip)
+		Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, human.db.ip)
 	end
 	
 	updateDaily(human)
@@ -732,7 +762,7 @@ function onLogin(human, isNew)
 	-- 红点 检测   需要放在通用的onLogin 后面  保持数据的正确性 再检测红点
 	local pcallRet, pcallErr = pcall(RoleSystemLogic.onLogin, human) 
 	if not pcallRet then
-		Log.write(Log.LOGID_ERR_PCALL, "RoleSystemLogic.onLogin err=" .. human.db.account, pcallErr)
+		Log.write(Log.LOGID_ERR_PCALL, "RoleSystemLogic.onLogin err=" .. human.db.newUniqueTag, pcallErr)
 	end
 
     enterCity(human)

+ 3 - 3
script/core/RoleDel.lua

@@ -298,7 +298,7 @@ end
 local QueryCreateRoleLog = {changeNameCnt=0}
 local function handleCreateRoleLog()
     _G.collectgarbage("step", 1000000)
-	LuaMongo.find(DB.db_char, QueryCreateRoleLog, {_id="1", account=1, name=1, lv = 1, ip=1})
+	LuaMongo.find(DB.db_char, QueryCreateRoleLog, {_id="1", newUniqueTag=1, name=1, lv = 1, ip=1})
 	local list = {}
 	RoleList = {}
 	local allCnt = 0
@@ -309,8 +309,8 @@ local function handleCreateRoleLog()
 		if not LuaMongo.next(data) then
 			break
 		end
-        Log.write(Log.LOGID_OSS_REGISTER, data._id, data.account, data.name, data.ip,"","")
-		Log.write(Log.LOGID_OSS_CREATELOSS,data.account, data.name, LogDefine.HUMAN_LOST.CREATE_NAME_FINISH, data.ip, data.pf or "", data.appid or "", data.phpChanelID or 0)
+        Log.write(Log.LOGID_OSS_REGISTER, data._id, data.newUniqueTag, data.name, data.ip,"","")
+		Log.write(Log.LOGID_OSS_CREATELOSS,data.newUniqueTag, data.name, LogDefine.HUMAN_LOST.CREATE_NAME_FINISH, data.ip, data.pf or "", data.appid or "", data.phpChanelID or 0)
 	end
     _G.collectgarbage("step", 1000000)
 end

+ 98 - 0
script/merge/MergeServerDefine.lua

@@ -0,0 +1,98 @@
+--合服
+
+
+
+--[=[
+    --1.使用 newUniqueTag 代替 account
+    --2. 合并数据逻辑
+]=]--
+
+
+
+
+
+
+
+
+
+
+
+
+--_G.lua_mongo 提供的接口
+--[=[
+
+    find()
+    md5()
+    id()
+    next()
+    client()
+    remove()
+    index()
+    auth()
+    count()
+    update()
+]=]--
+
+
+
+
+--要进行数据合并的数据库,第一个为目标数据库,其他为源数据库
+MERGEDBTB = {"ckwy_fy_S350078", "ckwy_fy_S350077"}
+
+--所有要处理的集合
+COLLECTIONS = {
+    ".char",                    -- 角色表, 可以直接插入
+    ".mail"	,					-- 邮件,可以直接插入
+    ".common",					-- 通用数据(开服时间)
+    ".friend",					-- 好友数据库表, 可以直接插入
+    ".boss_data",		    	-- boss记录表,	可以直接插入
+    ".union",             		-- 工会数据表,	可以直接插入
+    ".jjc",						-- 单人竞技场, 可以直接插入
+    ".combat_video",			-- 战斗录像[本地记录 个人记录 单人竞技场 通天塔 王者争霸 战役记录],可以直接插入
+    ".drill_data",        		-- 圣树试炼/过关斩将,可以直接插入
+    ".union_war",   			-- 公会战,可以直接插入
+    ".union_war_record",   		-- 公会战记录,	可以直接插入
+    ".the_stars",          		-- 星空争霸,	可以直接插入
+    ".abs_billboard",			-- 绝对时间排行榜记录,	可以直接插入
+    ".middle_act_group",		-- 跨服活动分组记录, 暂时没使用,不管
+    ".battle_shark",	    	-- 战役通关战报,		可以直接插入
+    ".tower",	   				-- 全服通天塔 信息,	可以直接插入
+    ".hero_pingfen",	   		-- 英雄评分信息用于排名, 可以直接插入           
+    ".jjcGodWar",				-- 众神之战				,可以直接插入
+    ".jjcGodWar_record",		-- 众神之战记录			,可以直接插入
+    ".chat_record",        		-- 好友聊天记录			,可以直接插入
+    ".jjcLadder",    	    	-- 天梯争霸				,可以直接插入
+    ".jjcLadder_record",   		-- 天梯争霸记录			,可以直接插入
+    ".yjTreasure",   			-- 遗迹探宝				, 可以直接插入
+    ".yjTreasure_rank",   	    -- 遗迹探宝排行
+    ".yjTreasure_role",   		-- 遗迹探宝角色信息		, 可以直接插入
+    ".valley",   				-- 荣耀峡谷/龙族战场	,可以直接插入
+    ".valley_record",   		-- 荣耀峡谷/龙族战场记录, 可以直接插入
+    ".war_report",   	    	-- 战报[跨服记录 冠军联赛 王者争霸 天梯 切磋 系列排名存储记录], 可以直接插入
+    ".openServer_billboard",	-- 开服排行类活动,可以直接插入
+    ".lost_temple",             -- 神庙
+    ".common_rank",				-- 通用排行榜,可以直接插入
+}
+
+--源数据库中不需要插入目标数据库的集合列表
+--[=[
+    common                  只用目标数据库的集合
+    middle_act_group        暂时没用到这个集合,所以也只用目标数据库的集合
+    the_stars               战神殿, 只保留宿主服的记录
+]=]--
+NOINSERTCOLLECTIONS = {
+    [".common"] = 1,
+    [".middle_act_group"] = 1,
+    [".the_stars"] = 1,
+}
+
+
+--用到char 集合中的 _id 字段的集合, 如果 char 集合中的 _id 有修改, 则这些集合中的 _id 也需要修改
+NEEDCHANGECOLLECTIONS = {
+    [".friend"] = '1',
+    [".mail"] = '1',
+    [".union"] = '1',
+    [".the_stars"] = '1',
+    [".jjc"] = '1',
+    [".combat_video"] = '1',
+}

+ 248 - 0
script/merge/MergeServerLogic.lua

@@ -0,0 +1,248 @@
+--合服逻辑
+
+--[=[
+    0. --创建一个mongo连接实例
+
+
+]=]--
+
+
+
+
+local DB = require("common.DB")
+local LuaMongo = _G.lua_mongo
+local Config = require("Config")
+local Log = require("common.Log")
+local MergeServerDefine = require("merge.MergeServerDefine")
+
+
+local primaryKeyTable = {}
+
+local dbcache = {}
+
+--重复_id缓存表
+local repeatIdTb = {}
+
+
+--创建一个mongo连接实例
+local function clientMongoDb()
+    LuaMongo.client(Config.DB_IP)
+end
+
+--切换数据库
+local function chooseMongoDb(dbName)
+    if not dbName or dbName == "" then
+        print(string.format("数据库名错误, dbName = %s\n", dbName))
+        return
+    end
+	LuaMongo.auth(dbName, Config.DB_USER, Config.DB_PASS)
+end
+
+--生成新的 _id
+local function generateNewId()
+    local newId = LuaMongo.id()
+    return newId
+end
+
+
+
+---------------------------------------优化-----------------------------
+
+
+local function processCollection(sourceDb, targetDb, collectionName)
+    local finalName = sourceDb .. collectionName
+    local targetCollection = targetDb .. collectionName
+
+
+    LuaMongo.find(finalName, nil, {})
+    while true do
+        local data = {}
+        if not LuaMongo.next(data) then
+            break
+        end
+
+        --直接插入目标库
+        local ok, err = pcall(LuaMongo.insert, targetCollection, data)
+        if not ok then
+            print(string.format("=================插入失败, sourceDb = %s, collectionName = %s, _id = %s, err = %s\n", sourceDb, collectionName, data._id, err))
+            --Log.write(Log.LOGID_OSS_MERGE, finalName, data._id, err)
+        end
+    end
+end
+
+
+local writeQueue = {}
+local function flushWriteQueue()
+    for _, task in ipairs(writeQueue) do
+        local ok, err = pcall(LuaMongo.insert, task.collection, task.data)
+        if not ok then
+            Log.error("插入失败", task)
+        end
+    end
+    writeQueue = {}
+end
+
+-- 每积累100条数据批量写入
+local function bufferedInsert(collection, data)
+    table.insert(writeQueue, {collection=collection, data=data})
+    if #writeQueue >= 100 then
+        flushWriteQueue()
+    end
+end
+
+
+
+----------------------------------------------------------------
+
+
+-----------------------------------------------------char集合中_id的重复检测和处理-------------------------------------------------
+
+--用于检测不同数据库的char集合中的_id是否有重复, 一般来说通过mongo生成的_id基本不会重复,但是还是检测下
+local function primaryKeyRepeatCheck(dbName)
+    if not dbName or dbName == "" then
+        print(string.format("数据库名错误, dbName = %s\n", dbName))
+        return
+    end
+
+    local collectionName = MergeServerDefine.COLLECTIONS[1]
+    local finalName = dbName .. collectionName
+
+    LuaMongo.find(finalName, nil, {newUniqueTag = 1, _id = 1})
+    while true do
+		local data = {}
+		if not LuaMongo.next(data) then
+			break
+		end
+        if primaryKeyTable[data._id] then
+            print(string.format("重复的_id, dbName = %s, _id = %s\n", dbName, data._id))
+        end
+        primaryKeyTable[data._id] = '1'
+    end
+end
+
+--好友集合
+local function handleFriend(data)
+    if repeatIdTb[data.uuid1] then
+        data.uuid1 = repeatIdTb[data.uuid1]
+    end
+
+    if repeatIdTb[data.uuid2] then
+        data.uuid2 = repeatIdTb[data.uuid2]
+    end
+end
+
+--邮件集合
+local function handleMail(data)
+    if repeatIdTb[data.receiverUuid] then
+        data.receiverUuid = repeatIdTb[data.receiverUuid]
+    end
+end
+
+--公会集合
+local function handleUnion(data)
+    local tb = {}
+    for id, v in pairs(data.member) do
+        if repeatIdTb[id] then
+            tb[id] = v
+        end
+    end
+
+    for id, v in pairs(tb) do
+        data.member[id] = nil
+        data.member[repeatIdTb[id]] = v
+    end
+
+
+    tb = {}
+    for id, v in pairs(data.apply) do
+        if repeatIdTb[id] then
+            tb[id] = v
+        end
+    end
+
+    for id, v in pairs(tb) do
+        data.apply[id] = nil
+        data.apply[repeatIdTb[id]] = v
+    end
+
+    if data.presidentUuid and repeatIdTb[data.presidentUuid] then
+        data.presidentUuid = repeatIdTb[data.presidentUuid]
+    end
+end
+
+--星空争霸集合
+local function handleStar(data)
+    if repeatIdTb[data.uuid] then
+        data.uuid = repeatIdTb[data.uuid]
+    end
+end
+
+--单人竞技场集合
+local function handleJJC(data)
+    if not data.monsterOutID and repeatIdTb[data._id] then
+        data._id = repeatIdTb[data._id]
+    end
+end
+
+--战斗视频集合
+local function handleVideo(data)
+    local uuid = data.combatInfo.attacker.uuid
+    if repeatIdTb[uuid] then
+        data.combatInfo.attacker.uuid = repeatIdTb[uuid]
+    end
+end
+
+---------------------------------------------------------------------------------------------------------------------------
+
+local tblList = { "ckwy_fy_S350064", "ckwy_fy_S350004" }
+local collName = ".middle_act_group"
+
+
+--合服开始函数
+function StartMergeServer()
+    print("========================合服开始=====================\n")
+    --连接数据库
+    clientMongoDb()
+
+    local targetDb = MergeServerDefine.MERGEDBTB[1]
+
+    for i = 2, #MergeServerDefine.MERGEDBTB do
+        local sourceDb = MergeServerDefine.MERGEDBTB[i]
+        LuaMongo.auth(sourceDb, Config.DB_USER, Config.DB_PASS)
+
+        for _, coll in ipairs(MergeServerDefine.COLLECTIONS) do
+            if not MergeServerDefine.NOINSERTCOLLECTIONS[coll] then
+                print(string.format("=====================开始合并集合: %s\n", coll))
+                processCollection(sourceDb, targetDb, coll)
+            end
+        end
+    end
+
+    -- for _, db in ipairs(tblList) do
+    --     LuaMongo.auth(db, Config.DB_USER, Config.DB_PASS)
+    --     local coll = db .. collName
+    --     LuaMongo.find(coll)
+    --     while true do
+    --         local data = {}
+    --         if not LuaMongo.next(data) then
+    --             break
+    --         end
+    --         print(string.format("================[StartMergeServer], _id : %s, startIdx :%s, endIdx :%s\n", data._id, data.startIdx, data.endIdx))
+    --     end
+    -- end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 2 - 1
script/module/absAct/AbsJifenDrawLogic.lua

@@ -121,6 +121,7 @@ function buy(human, id, actID)
    ChatPaoMaLogic.broadcast(human, ChatPaoMaLogic.PAOMA_TYPE_BROAD_TYPE4, drawConfig.grade, heroID)
    local isNew = not HeroBook.isGet(human, drawConfig.id, drawConfig.star)
    local heroIndex, fenjielist = HeroLogic.addHero(human, heroID, nil, 1, "abs_jifenDraw")
-   Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.account, human.db.name, human.db.lv, DrawCardLogic.DRAWCARD_ID4, heroID, 0, 0, 0, DrawCardLogic.getJifen(human))
+   --Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.account, human.db.name, human.db.lv, DrawCardLogic.DRAWCARD_ID4, heroID, 0, 0, 0, DrawCardLogic.getJifen(human))
+   Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, DrawCardLogic.DRAWCARD_ID4, heroID, 0, 0, 0, DrawCardLogic.getJifen(human))
    DrawCardLogic.sendDrawOp(human, DrawCardLogic.DRAWCARD_ID4, 0, {heroID}, fenjielist, {isNew}, {heroIndex}, AbsActDefine.ABS_ACT_TYPE_7)
 end

+ 3 - 1
script/module/absAct/HeroComeLogic.lua

@@ -266,7 +266,9 @@ function onDrawCardActive(human, id, op, actConfig, skip,isAct)
     DrawCardLogic.sendDrawOp(human, id, op, heroList, fenjielist, heroNewList, heroIndexList, isAct)
     YunYingLogic.updateIcon(YYInfo[id], human)
     YunYingLogic.sendGroupUpdate(YYInfo[id], human, PanelDefine.PANEL_ID_5012)
-    Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.account, human.db.name, human.db.lv, id, heroIDs, itemID or 0, cnt or 0, zuanshi or 0, 0)
+    --Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.account, human.db.name, human.db.lv, id, heroIDs, itemID or 0, cnt or 0, zuanshi or 0, 0)
+
+    Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, id, heroIDs, itemID or 0, cnt or 0, zuanshi or 0, 0)
 
     absAct.drawCardCnt = absAct.drawCardCnt or 0
     absAct.drawCardCnt = absAct.drawCardCnt + heroCnt

+ 2 - 1
script/module/absAct/PerpleHeroLogic.lua

@@ -243,7 +243,8 @@ function onDrawCardActive(human, id, op, actConfig, skip,isAct)
 
     DrawCardLogic.sendDrawOp(human, id, op, heroList, fenjielist, heroNewList,heroIndexList,isAct)
     YunYingLogic.sendGroupUpdate(YYInfo[id], human, PanelDefine.PANEL_ID_3704)
-    Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.account, human.db.name, human.db.lv, id, heroIDs, itemID or 0, cnt or 0, zuanshi or 0, 0)
+    --Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.account, human.db.name, human.db.lv, id, heroIDs, itemID or 0, cnt or 0, zuanshi or 0, 0)
+    Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, id, heroIDs, itemID or 0, cnt or 0, zuanshi or 0, 0)
 
     absAct.drawCardCnt = absAct.drawCardCnt or 0
     absAct.drawCardCnt = absAct.drawCardCnt + heroCnt

+ 127 - 69
script/module/battle/BattleLogic.lua

@@ -183,7 +183,7 @@ local function BattleLogic_GetBattleBattleID(human)
 
     if EliteDefine.COPY_ELITE_ERROR >= nBattleType or EliteDefine.COPY_ELITE_DIFFICULTY < nBattleType then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleBattleID 获取到的战斗类型不正确 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return -1
     end
 
@@ -195,7 +195,7 @@ local function BattleLogic_GetBattleBattleID(human)
         return human.db.battleID_hard
     else
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleBattleID 未处理的战斗类型 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return -1
     end
 end
@@ -204,7 +204,7 @@ end
 local function BattleLogic_GetBattleIDByType(human, nBattleType)
     if not human or EliteDefine.COPY_ELITE_ERROR >= nBattleType or EliteDefine.COPY_ELITE_DIFFICULTY < nBattleType then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleIDByType 传入的参数不正确 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return -1
     end
 
@@ -229,7 +229,7 @@ local function BattleLogic_SetBattleBattleID(human, nValue)
     local nBattleType = BattleLogic_GetBattleType(human)
     if EliteDefine.COPY_ELITE_ERROR >= nBattleType or EliteDefine.COPY_ELITE_DIFFICULTY < nBattleType then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_SetBattleBattleID 获取到的战斗类型不正确 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return false
     end
 
@@ -241,7 +241,7 @@ local function BattleLogic_SetBattleBattleID(human, nValue)
         human.db.battleID_hard = nValue
     else
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleGuaJiID 未处理的战斗类型 id = "
-        ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+        ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return false
     end
 
@@ -260,7 +260,7 @@ local function BattleLogic_GetBattleGuaJiID(human)
 
     if EliteDefine.COPY_ELITE_ERROR >= nBattleType or EliteDefine.COPY_ELITE_DIFFICULTY < nBattleType then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleGuaJiID 获取到的战斗类型不正确 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return -1
     end
 
@@ -272,7 +272,7 @@ local function BattleLogic_GetBattleGuaJiID(human)
         return human.db.guajiID_hard
     else
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleGuaJiID 未处理的战斗类型 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return -1
     end
 end
@@ -281,7 +281,7 @@ end
 local function BattleLogic_GetBattleGuaJiIDByType(human, nBattleType)
     if not human or EliteDefine.COPY_ELITE_ERROR >= nBattleType or EliteDefine.COPY_ELITE_DIFFICULTY < nBattleType then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleGuaJiIDByType 传入的参数不正确 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return -1
     end
 
@@ -293,7 +293,7 @@ local function BattleLogic_GetBattleGuaJiIDByType(human, nBattleType)
         return human.db.guajiID_hard
     else
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleGuaJiIDByType 未处理的战斗类型 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return -1
     end
 end
@@ -308,7 +308,7 @@ local function BattleLogic_SetBattleGuaJiID(human, nValue)
     local nBattleType = BattleLogic_GetBattleType(human)
     if EliteDefine.COPY_ELITE_ERROR >= nBattleType or EliteDefine.COPY_ELITE_DIFFICULTY < nBattleType then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_SetBattleGuaJiID 获取到的战斗类型不正确 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return false
     end
 
@@ -320,7 +320,7 @@ local function BattleLogic_SetBattleGuaJiID(human, nValue)
         human.db.guajiID_hard = nValue
     else
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleGuaJiID 未处理的战斗类型 id = "
-        ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+        ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return false
     end
 
@@ -337,7 +337,7 @@ local function BattleLogic_GetBattleRewards(human)
     local nBattleType = BattleLogic_GetBattleType(human)
     if EliteDefine.COPY_ELITE_ERROR >= nBattleType or EliteDefine.COPY_ELITE_DIFFICULTY < nBattleType then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleRewards 获取到的战斗类型不正确 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return nil
     end
 
@@ -345,7 +345,7 @@ local function BattleLogic_GetBattleRewards(human)
     if EliteDefine.COPY_ELITE_NORMAL == nBattleType then
         if not human.db.battleRewards then
             Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleRewards 玩家普通奖励未初始化进行初始化 id = "
-                ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
             human.db.battleRewards = {}
         end
 
@@ -353,7 +353,7 @@ local function BattleLogic_GetBattleRewards(human)
     elseif EliteDefine.COPY_LEVEL_ELITE == nBattleType then
         if not human.db.battleRewards_elite then
             Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleRewards 玩家精英奖励未初始化进行初始化 id = "
-                ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
             human.db.battleRewards_elite = {}
         end
 
@@ -361,14 +361,14 @@ local function BattleLogic_GetBattleRewards(human)
     elseif EliteDefine.COPY_ELITE_DIFFICULTY == nBattleType then
         if not human.db.battleRewards_hard then
             Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleRewards 玩家困难奖励未初始化进行初始化 id = "
-                ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
             human.db.battleRewards_hard = {}
         end
 
         tRewards = human.db.battleRewards_hard
     else
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleRewards 未处理的战斗类型 id = "
-            ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+            ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
     end
 
     return tRewards
@@ -385,7 +385,7 @@ local function BattleLogic_GetBattleRewardsByType(human, nBattleType)
     if EliteDefine.COPY_ELITE_NORMAL == nBattleType then
         if not human.db.battleRewards then
             Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "[BattleLogic_GetBattleRewardsByType] 玩家普通奖励未初始化进行初始化 id = "
-                ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
             human.db.battleRewards = {}
         end
 
@@ -394,7 +394,7 @@ local function BattleLogic_GetBattleRewardsByType(human, nBattleType)
     elseif EliteDefine.COPY_LEVEL_ELITE == nBattleType then
         if not human.db.battleRewards_elite then
             Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "[BattleLogic_GetBattleRewardsByType] 玩家精英奖励未初始化进行初始化 id = "
-                ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
             human.db.battleRewards_elite = {}
         end
 
@@ -403,7 +403,7 @@ local function BattleLogic_GetBattleRewardsByType(human, nBattleType)
     elseif EliteDefine.COPY_ELITE_DIFFICULTY == nBattleType then
         if not human.db.battleRewards_hard then
             Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "[BattleLogic_GetBattleRewardsByType] 玩家困难奖励未初始化进行初始化 id = "
-                ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
             human.db.battleRewards_hard = {}
         end
 
@@ -411,7 +411,7 @@ local function BattleLogic_GetBattleRewardsByType(human, nBattleType)
         tRewards = human.db.battleRewards_hard
     else
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "[BattleLogic_GetBattleRewardsByType] 未处理的战斗类型 id = "
-            ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+            ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
     end
 
     return tRewards
@@ -429,7 +429,7 @@ local function BattleLogic_SetBattleRewards(human, id)
     local tRewards = BattleLogic_GetBattleRewards(human)
     if not tRewards then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_SetBattleRewards 获取到的奖励为空 id = "
-            ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+            ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         return false
     end
 
@@ -451,7 +451,7 @@ local function BattleLogic_GetBattleOut(human)
     local nBattleType = BattleLogic_GetBattleType(human)
     if EliteDefine.COPY_ELITE_ERROR >= nBattleType or EliteDefine.COPY_ELITE_DIFFICULTY < nBattleType then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleOut 获取到的战斗类型不正确 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return nil
     end
 
@@ -460,7 +460,7 @@ local function BattleLogic_GetBattleOut(human)
     -- if EliteDefine.COPY_ELITE_NORMAL == nBattleType then
     --     -- if not human.db.battleRewards then
     --     --     Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleRewards 玩家普通奖励未初始化进行初始化 id = "
-    --     --         ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+    --     --         ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
     --     --     human.db.battleOut = {}
     --     -- end
 
@@ -468,7 +468,7 @@ local function BattleLogic_GetBattleOut(human)
     -- elseif EliteDefine.COPY_LEVEL_ELITE == nBattleType then
     --     -- if not human.db.battleRewards_elite then
     --     --     Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleRewards 玩家精英奖励未初始化进行初始化 id = "
-    --     --         ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+    --     --         ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
     --     --     human.db.battleRewards_elite = {}
     --     -- end
 
@@ -476,14 +476,14 @@ local function BattleLogic_GetBattleOut(human)
     -- elseif EliteDefine.COPY_ELITE_DIFFICULTY == nBattleType then
     --     -- if not human.db.battleRewards_hard then
     --     --     Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleRewards 玩家困难奖励未初始化进行初始化 id = "
-    --     --         ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+    --     --         ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
     --     --     human.db.battleRewards_hard = {}
     --     -- end
 
     --     tRewards = human.db.battleOut_hard
     -- else
     --     Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleOut 未处理的战斗类型 id = "
-    --         ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+    --         ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
     -- end
 end
 
@@ -544,7 +544,7 @@ local function BattleLogic_GetBattleConfig(human)
     local nBattleType = BattleLogic_GetBattleType(human)
     if EliteDefine.COPY_ELITE_ERROR >= nBattleType or EliteDefine.COPY_ELITE_DIFFICULTY < nBattleType then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleConfig 获取到的战斗类型不正确 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return nil
     end
 
@@ -556,7 +556,7 @@ local function BattleLogic_GetBattleConfig(human)
         return BattleExcel_Hard
     else
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetBattleGuaJiID 未处理的战斗类型 id = "
-        ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+        ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return nil
     end
 end
@@ -591,7 +591,7 @@ local function BattleLogic_GetChapterReward(human)
 
     if EliteDefine.COPY_ELITE_ERROR >= nBattleType or EliteDefine.COPY_ELITE_DIFFICULTY < nBattleType then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetChapterReward 获取到的战斗类型不正确 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return nil
     end
 
@@ -615,7 +615,7 @@ local function BattleLogic_GetChapterReward(human)
         return human.db.chapterReward_Hard
     else
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "BattleLogic_GetChapterReward 未处理的战斗类型 id = "
-        ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name.." nBattleType = "..nBattleType)
+        ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name.." nBattleType = "..nBattleType)
         return nil
     end
 end
@@ -779,21 +779,49 @@ function initAfterStart()
     end
 end
 
+--计算当前关卡能获得多少次小游戏次数
+local function calcGameTimes(config, levelId)
+    local gameTimes = 0
+
+    local allCfg = config
+    for i=1, levelId-1 do
+        local cfg = allCfg[i]
+        if cfg and cfg and type(cfg.gameType) == "number" and cfg.gameType == 1 then
+            gameTimes = gameTimes + 1
+        end
+    end
+    return gameTimes
+end
+
+
 function onLogin(human)
     --处理老号已经在小游戏玩法上线前已经推过图没有获得小游戏次数
     if not human.db.battleGameTimes then
-        local gameTimes = 0
-        local battleID = human.db.battleID
-        local allCfg = BattleExcel.node
-        for i=1, battleID-1 do
-            local cfg = allCfg[i]
-            if cfg and cfg and type(cfg.gameType) == "number" and cfg.gameType == 1 then
-                gameTimes = gameTimes + 1
-            end
-        end
-        human.db.battleGameTimes = gameTimes
+        -- local gameTimes = 0
+        -- local battleID = human.db.battleID
+        -- local allCfg = BattleExcel.node
+        -- for i=1, battleID-1 do
+        --     local cfg = allCfg[i]
+        --     if cfg and cfg and type(cfg.gameType) == "number" and cfg.gameType == 1 then
+        --         gameTimes = gameTimes + 1
+        --     end
+        -- end
+        human.db.battleGameTimes = calcGameTimes(BattleExcel.node, human.db.battleID)
+    end
+
+
+    --新增精英次数补偿
+    if not human.db.eliteBattleGameTimes then
+        human.db.eliteBattleGameTimes = calcGameTimes(BattleExcel_Elite.node, human.db.battleID_elite)
+    end
+
+    --新增困难次数补偿
+    if not human.db.hardBattleGameTimes then
+        human.db.hardBattleGameTimes = calcGameTimes(BattleExcel_Hard.node, human.db.battleID_hard)
     end
 
+
+
     if human.db.lv >= BATTLE_LOGIN_LEV_TIPS then
         return
     end
@@ -811,7 +839,7 @@ function onLogin(human)
         end
     else
         print("[BattleLogic_onLogin] 获取不到奖励数据 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
     end
 end
 
@@ -1442,7 +1470,7 @@ function query(human)
     fontVideoInfo(human, msgRet.videoInfo, monsterConfig)
     fontExtraDataSSZH(msgRet.extraDataSSZH, nowNodeConfig.mapID, nNowBattleID, human)
 
-    msgRet.battleGameTimes = human.db.battleGameTimes or 0
+    msgRet.battleGameTimes = (human.db.battleGameTimes or 0) + (human.db.eliteBattleGameTimes or 0) + (human.db.hardBattleGameTimes or 0)
     -- Msg.trace(msgRet)
     Msg.send(msgRet, human.fd)
 
@@ -1737,7 +1765,7 @@ function initBattleOut(human, now)
 
     if false == BattleLogic_InitAllBattleOut(human, now) then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "initBattleOut 初始化挂机奖励表失败 id = "
-            ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+            ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         return
     end
     
@@ -1774,7 +1802,7 @@ function calcBattleOut(human,isDiamond)
         local tBattleOut = BattleLogic_GetBattleOut(human)
         if not tBattleOut then
             Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "calcBattleOut 获取挂机奖励列表失败 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
             return
         end
 
@@ -1861,7 +1889,7 @@ function calcBattleExpOut(human, now)
     local tBattleOut = BattleLogic_GetBattleOut(human)
     if not tBattleOut then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "calcBattleExpOut 获取挂机奖励列表失败 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         return
     end
 
@@ -1882,7 +1910,7 @@ function calcBattleExpOut(human, now)
 
     if not tBattleNodeConfig or 0 > nGuaJiID then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "calcBattleExpOut 获取到的配置表不正确或挂机ID不正确 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         return
     end
 
@@ -2024,7 +2052,7 @@ function calcBattleItemOut(human, now,isDiamond)
     local tBattleOut = BattleLogic_GetBattleOut(human)
     if not tBattleOut then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "calcBattleItemOut 获取挂机奖励列表失败 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         return
     end
 
@@ -2045,7 +2073,7 @@ function calcBattleItemOut(human, now,isDiamond)
 
     if not tBattleNodeConfig or 0 > nGuaJiID then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "calcBattleItemOut 获取到的配置表不正确或挂机ID不正确 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         return
     end
 
@@ -2090,7 +2118,7 @@ local function hangExpGet(human,isDiamond)
     local tBattleOut = BattleLogic_GetBattleOut(human)
     if not tBattleOut then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "hangExpGet 获取挂机奖励列表失败 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         return
     end
 
@@ -2232,7 +2260,7 @@ function nodeSet(human, battleID)
     local nNowBattleID = BattleLogic_GetBattleBattleID(human)
     if not tBattleConfig or -1 >= nNowBattleID then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "hangExpGet 获取挂机奖励列表失败 id = "
-            ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+            ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         print("[nodeSet] 获取不到战斗配置")
         return
     end
@@ -2270,7 +2298,7 @@ function nodeDetailQuery(human, battleID)
     local nNowBattleID = BattleLogic_GetBattleBattleID(human)
     if not tBattleConfig or -1 >= nNowBattleID then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "nodeDetailQuery 获取挂机奖励列表失败 id = "
-            ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+            ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         print("[nodeDetailQuery] 获取不到战斗配置")
         return
     end
@@ -2330,7 +2358,7 @@ function fight(human)
     local tBattleConfig = BattleLogic_GetBattleConfig(human)
     if not tBattleConfig or -1 >= battleID then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "nodeDetailQuery 获取挂机奖励列表失败 id = "
-            ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+            ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         print("[nodeDetailQuery] 获取不到战斗配置")
         return
     end
@@ -2377,7 +2405,7 @@ function onFightEnd(human, result, fightTypeID, param1, combatInfo)
     local battleID = BattleLogic_GetBattleBattleID(human)
     if EliteDefine.COPY_ELITE_ERROR == nBattleType or -1 >= guajiID or -1 >= battleID then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "onFightEnd 获取战斗类型、挂机ID、战斗关卡ID失败 id = "
-            ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+            ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         print("[onFightEnd] 获取战斗类型、挂机ID、战斗关卡ID失败")
         return
     end
@@ -2385,7 +2413,7 @@ function onFightEnd(human, result, fightTypeID, param1, combatInfo)
     local tBattleConfig = BattleLogic_GetBattleConfig(human)
     if not tBattleConfig then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "onFightEnd 获取战斗配置失败 id = "
-            ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+            ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         print("[onFightEnd] 获取战斗配置失败")
         return
     end
@@ -2474,12 +2502,23 @@ function onFightEnd(human, result, fightTypeID, param1, combatInfo)
     BattleLogic_SetBattleBattleID(human, nextBattleID)
 
     --增加小游戏次数
-    if EliteDefine.COPY_ELITE_NORMAL == nBattleType then
-        if config and type(config.gameType) == "number" and config.gameType == 1 then
+    -- if EliteDefine.COPY_ELITE_NORMAL == nBattleType then
+    --     if config and type(config.gameType) == "number" and config.gameType == 1 then
+    --         human.db.battleGameTimes = (human.db.battleGameTimes or 0) + 1
+    --     end
+    -- end
+
+    if config and type(config.gameType) == "number" and config.gameType == 1 then
+        if EliteDefine.COPY_ELITE_NORMAL == nBattleType then
             human.db.battleGameTimes = (human.db.battleGameTimes or 0) + 1
+        elseif EliteDefine.COPY_LEVEL_ELITE == nBattleType then
+            human.db.eliteBattleGameTimes = (human.db.eliteBattleGameTimes or 0) + 1
+        elseif EliteDefine.COPY_ELITE_DIFFICULTY == nBattleType then
+            human.db.hardBattleGameTimes = (human.db.hardBattleGameTimes or 0) + 1
         end
     end
 
+
     -- human.db.battleID = battleID + 1
     -- 通过第10关,默认开启二倍速
     if nextBattleID == 10 and EliteDefine.COPY_ELITE_NORMAL == nBattleType then
@@ -2503,7 +2542,7 @@ function onFightEnd(human, result, fightTypeID, param1, combatInfo)
     human.getEquip = nil
 
     -- TODO:记录主线关卡
-    Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, human.db._id, human.db.account, human.db.name, human.db.battleID)
+    Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, human.db._id, human.db.newUniqueTag, human.db.name, human.db.battleID)
 
     if nBattleType ==  EliteDefine.COPY_ELITE_NORMAL then
 
@@ -2644,7 +2683,7 @@ function setBattleByGm(human, val, maxBattleID)
     end
 
     local nBattleType = BattleLogic_GetBattleType(human)
-    if EliteDefine.COPY_ELITE_NORMAL == nBattleType then
+    if EliteDefine.COPY_ELITE_NORMAL == nBattleType or  EliteDefine.COPY_LEVEL_ELITE == nBattleType or EliteDefine.COPY_ELITE_DIFFICULTY == nBattleType then
         local gameTimes = 0
         local battleID = BattleLogic_GetBattleGuaJiID(human)
         local allCfg = BattleExcel.node
@@ -2654,7 +2693,14 @@ function setBattleByGm(human, val, maxBattleID)
                 gameTimes = gameTimes + 1
             end
         end
-        human.db.battleGameTimes = (human.db.battleGameTimes or 0) + gameTimes
+        if EliteDefine.COPY_ELITE_NORMAL == nBattleType then
+            human.db.battleGameTimes = (human.db.battleGameTimes or 0) + gameTimes
+        elseif EliteDefine.COPY_LEVEL_ELITE == nBattleType then
+            human.db.eliteBattleGameTimes = (human.db.eliteBattleGameTimes or 0) + gameTimes
+        elseif EliteDefine.COPY_ELITE_DIFFICULTY == nBattleType then
+            human.db.hardBattleGameTimes = (human.db.hardBattleGameTimes or 0) + gameTimes
+        end
+
     end
 
 
@@ -2674,7 +2720,7 @@ function gmSetHangTime(human, hourVal)
     local tBattleOut = BattleLogic_GetBattleOut(human)
     if not tBattleOut then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "gmSetHangTime  func  calcBattleExpOut 获取挂机奖励列表失败 id = "
-                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+                    ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         return
     end
 
@@ -2706,7 +2752,7 @@ function mopupQuery(human)
     local tBattleConfig = BattleExcel
     if -1 >= nNowGuaJiID or not tBattleConfig then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "mopupQuery 获取战斗配置、挂机ID 失败 id = "
-                ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+                ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         print("[mopupQuery] 获取战斗配置、挂机ID 失败")
         return
     end
@@ -2826,7 +2872,7 @@ function mopupFight(human)
     local tBattleConfig = BattleExcel
     if -1 >= nNowGuaJiID or not tBattleConfig then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "mopupFight 获取战斗配置、挂机ID 失败 id = "
-                ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+                ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         print("[mopupFight] 获取战斗配置、挂机ID 失败")
         return
     end
@@ -2995,7 +3041,7 @@ function getTongGuanReward(human, id)
     local nBattleID = BattleLogic_GetBattleBattleID(human)
     if not tBattleConfig or -1 >= nNowGuaJiID or -1 >= nBattleID then
         Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "[getTongGuanReward] 获取战斗配置、挂机ID、战斗节点ID 失败 id = "
-                ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
+                ..human.db._id.. "newUniqueTag = "..human.db.newUniqueTag.." name = "..human.db.name)
         print("[getTongGuanReward] 获取战斗配置、挂机ID 失败")
         return
     end
@@ -3802,9 +3848,12 @@ end
 
 --获取小游戏奖励
 function GetGameReward(human, indexStr)
-    local battleGameTimes = human.db.battleGameTimes
-    
-    if not battleGameTimes or battleGameTimes <= 0 then
+    local battleGameTimes = human.db.battleGameTimes or 0
+    local eliteBattleGameTimes = human.db.eliteBattleGameTimes or 0
+    local hardBattleGameTimes = human.db.hardBattleGameTimes or 0
+
+
+    if battleGameTimes <= 0 and eliteBattleGameTimes <= 0 and hardBattleGameTimes <= 0 then
         return Broadcast.sendErr(human, Lang.JINBI_EXCHANGE_ERR_CNT)
     end
 
@@ -3852,11 +3901,20 @@ function GetGameReward(human, indexStr)
         return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
     end
 
-    battleGameTimes = battleGameTimes - 1
-    human.db.battleGameTimes = battleGameTimes
+    if battleGameTimes > 0 then
+        battleGameTimes = battleGameTimes - 1
+        human.db.battleGameTimes = battleGameTimes
+    elseif eliteBattleGameTimes > 0 then
+        eliteBattleGameTimes = eliteBattleGameTimes - 1
+        human.db.eliteBattleGameTimes = eliteBattleGameTimes
+    elseif hardBattleGameTimes > 0 then
+        hardBattleGameTimes = hardBattleGameTimes - 1
+        human.db.hardBattleGameTimes = hardBattleGameTimes
+    end
+
     BagLogic.addItemList(human, { {itemId, itemCnt} }, "battle")
 
     local msgRet = Msg.gc.GC_BATTLE_GETGAMEREWARD
-    msgRet.battleGameTimes = battleGameTimes
+    msgRet.battleGameTimes = battleGameTimes + eliteBattleGameTimes + hardBattleGameTimes
     Msg.send(msgRet, human.fd)
 end

+ 1 - 1
script/module/billboard/BillboardDB.lua

@@ -6,7 +6,7 @@ local JjcLadderMiddle = require("jjcLadder.JjcLadderMiddle")
 
 fields = {zhandouli=1,guajiID=1,lv=1,tower=1,combatHero=1,heroBag =1, lianyu = 1 , dragonCopy = 1, absAct = 1}
 
-local newFiles = {zhandouli=1,guajiID=1,lv=1,tower=1,combatHero=1,heroBag =1, lianyu = 1 , dragonCopy = 1, absAct = 1, maxBattleTime = 1}
+newFiles = {zhandouli=1,guajiID=1,lv=1,tower=1,combatHero=1,heroBag =1, lianyu = 1 , dragonCopy = 1, absAct = 1, maxBattleTime = 1}
 
 unionFields = {lv=1,zhandouli=1}
 

+ 3 - 1
script/module/chat/ChatLogic.lua

@@ -136,7 +136,9 @@ function chat(human, recvMsg, isJson)
 
     human.db.banSay = nil
     human.db.banSayTime = nil
-	Log.write(Log.LOGID_OSS_CHAT, human.db._id, human.db.account, human.db.name, human.db.ip, recvMsg.msgType, recvMsg.msg)
+	--Log.write(Log.LOGID_OSS_CHAT, human.db._id, human.db.account, human.db.name, human.db.ip, recvMsg.msgType, recvMsg.msg)
+    Log.write(Log.LOGID_OSS_CHAT, human.db._id, human.db.newUniqueTag, human.db.name, human.db.ip, recvMsg.msgType, recvMsg.msg)
+
 
     -- 发送聊天数据
 	local msgRet = Msg.gc.GC_CHAT

+ 5 - 2
script/module/chat/Gm.lua

@@ -50,7 +50,8 @@ end
 -- 直接调用gm命令
 function execGm(human, cmd,pos)
 	print("直接调用gm命令",cmd,pos)
-	Log.write(Log.LOGID_OSS_GM_CODE, human.db._id, human.db.account, human.db.name, cmd, pos)
+	--Log.write(Log.LOGID_OSS_GM_CODE, human.db._id, human.db.account, human.db.name, cmd, pos)
+	Log.write(Log.LOGID_OSS_GM_CODE, human.db._id, human.db.newUniqueTag, human.db.name, cmd, pos)
 
 	d3[cmd](human, tonumber(pos) or pos)
 	return true
@@ -77,7 +78,9 @@ function checkGm(human, str)
 		return
 	end
 	local arg = string.sub(str, #cmd + 2)
-	Log.write(Log.LOGID_OSS_GM_CODE, human.db._id, human.db.account, human.db.name, cmd, arg)
+	--Log.write(Log.LOGID_OSS_GM_CODE, human.db._id, human.db.account, human.db.name, cmd, arg)
+
+	Log.write(Log.LOGID_OSS_GM_CODE, human.db._id, human.db.newUniqueTag, human.db.name, cmd, arg)
 	
 	d3[cmd](human, tonumber(arg) or arg)
 	return true

+ 6 - 3
script/module/copy/CopyLogic.lua

@@ -211,17 +211,20 @@ function doFightEnd(human,copyID,combatInfo, touch)
 
 	--  金币挑战
 	if copyType == COPY_TYPE_JINBI then
-		Log.write(Log.LOGID_OSS_BATTLE_GOLD, human.db._id, human.db.account, human.db.name, human.db.lv)
+		--Log.write(Log.LOGID_OSS_BATTLE_GOLD, human.db._id, human.db.account, human.db.name, human.db.lv)
+		Log.write(Log.LOGID_OSS_BATTLE_GOLD, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv)
 	end
 	
 	--  经验挑战
 	if copyType == COPY_TYPE_EXP	 then
-        Log.write(Log.LOGID_OSS_BATTLE_EXP, human.db._id, human.db.account, human.db.name, human.db.lv)		
+        --Log.write(Log.LOGID_OSS_BATTLE_EXP, human.db._id, human.db.account, human.db.name, human.db.lv)		
+		Log.write(Log.LOGID_OSS_BATTLE_EXP, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv)
 	end
 	
 	--  碎片挑战
 	if copyType == COPY_TYPE_SUIPIAN then
-		Log.write(Log.LOGID_OSS_BATTLE_HERO, human.db._id, human.db.account, human.db.name, human.db.lv)
+		--Log.write(Log.LOGID_OSS_BATTLE_HERO, human.db._id, human.db.account, human.db.name, human.db.lv)
+		Log.write(Log.LOGID_OSS_BATTLE_HERO, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv)
 	end
 
     local leftCnt = getLeftCnt(human, copyType)

+ 2 - 1
script/module/dailyTask/DailyShareTaskLogic.lua

@@ -82,7 +82,8 @@ function recordDailyTaskFinishCnt(human, msg)
 	human.db.dailyShareTask[taskID].finishCnt = human.db.dailyShareTask[taskID].finishCnt + addCnt
 	
 	--'1:微信好友分享,2:微信朋友圈,3:微博,4:QQ,5:QQ好友,6:其他'
-	Log.write(Log.LOGID_OSS_SHARE, human.db._id, human.db.account, human.db.name, pf, appid, shareType)
+	--Log.write(Log.LOGID_OSS_SHARE, human.db._id, human.db.account, human.db.name, pf, appid, shareType)
+	Log.write(Log.LOGID_OSS_SHARE, human.db._id, human.db.newUniqueTag, human.db.name, pf, appid, shareType)
 	
 	-- 领奖品
 	BagLogic.addItemList(human, dailyTaskConfig.reward, "daily_task")     	

+ 4 - 2
script/module/drawCard/DrawCardLogic.lua

@@ -369,7 +369,8 @@ local function jifenDraw(human, isAct)
 	ChatPaoMaLogic.broadcast(human, ChatPaoMaLogic.PAOMA_TYPE_BROAD_TYPE4, heroConfig.grade, heroID)
     local isNew = not HeroBook.isGet(human, heroConfig.id, heroConfig.star)
     local heroIndex, fenjielist = HeroLogic.addHero(human, heroID,nil, 1, "draw_card")
-    Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.account, human.db.name, human.db.lv, DRAWCARD_ID4, heroID, 0, 0, 0, db.jifen)
+    --Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.account, human.db.name, human.db.lv, DRAWCARD_ID4, heroID, 0, 0, 0, db.jifen)
+    Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, DRAWCARD_ID4, heroID, 0, 0, 0, db.jifen)
     sendDrawOp(human, DRAWCARD_ID4, 0, {heroID}, fenjielist, {isNew}, {heroIndex}, isAct)
 end
 
@@ -697,7 +698,8 @@ local function draw(human, id, op, actConfig, skip,isAct)
 
     sendDrawOp(human, id, op, heroList, fenjielist, heroNewList,heroIndexList,isAct)
     RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_401)
-    Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.account, human.db.name, human.db.lv, id, heroIDs, itemID or 0, cnt or 0, zuanshi or 0, getJifen(human))
+    --Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.account, human.db.name, human.db.lv, id, heroIDs, itemID or 0, cnt or 0, zuanshi or 0, getJifen(human))
+    Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, id, heroIDs, itemID or 0, cnt or 0, zuanshi or 0, getJifen(human))
 
     DailyTaskLogic.recordDailyTaskFinishCnt(human, DailyTaskLogic.DAILY_TASK_ID_3, heroCnt)
 

+ 13 - 5
script/module/fuwen/FuwenLogic.lua

@@ -143,7 +143,9 @@ function add(human, itemID, itemCnt, logType)
         if index ~= nil then
             human.db.fuwenBag[index] = gridTemp		
             sendFuwenItemChange(human, index, gridTemp, FuwenDefine.FUWEN_BAG_OP_ADD)
-            Log.write(Log.LOGID_OSS_FUWEN, human.db._id, human.db.account, human.db.name, human.db.lv, LogDefine.DEFINE[logType] + LogDefine.TYPE["fuwen"] , itemID, 1)
+            --Log.write(Log.LOGID_OSS_FUWEN, human.db._id, human.db.account, human.db.name, human.db.lv, LogDefine.DEFINE[logType] + LogDefine.TYPE["fuwen"] , itemID, 1)
+
+            Log.write(Log.LOGID_OSS_FUWEN, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, LogDefine.DEFINE[logType] + LogDefine.TYPE["fuwen"] , itemID, 1)
         else
             -- 没有空格子了
             break
@@ -175,7 +177,9 @@ function addByGrid(human, fuwenGrid, logType)
 
     human.db.fuwenBag[index] = fuwenGrid		
     sendFuwenItemChange(human, index, fuwenGrid, FuwenDefine.FUWEN_BAG_OP_ADD)
-    Log.write(Log.LOGID_OSS_FUWEN, human.db._id, human.db.account, human.db.name, human.db.lv, LogDefine.DEFINE[logType] + LogDefine.TYPE["fuwen"] , fuwenGrid.id, 1)		
+    --Log.write(Log.LOGID_OSS_FUWEN, human.db._id, human.db.account, human.db.name, human.db.lv, LogDefine.DEFINE[logType] + LogDefine.TYPE["fuwen"] , fuwenGrid.id, 1)
+
+    Log.write(Log.LOGID_OSS_FUWEN, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, LogDefine.DEFINE[logType] + LogDefine.TYPE["fuwen"] , fuwenGrid.id, 1)
     return index
 end
 
@@ -188,7 +192,9 @@ function del(human, index, logType)
 	
 	human.db.fuwenBag[index] = nil
 	
-	Log.write(Log.LOGID_OSS_FUWEN, human.db._id, human.db.account, human.db.name, human.db.lv, LogDefine.DEFINE[logType] + LogDefine.TYPE["fuwen"] , fuwenGrid.id, -1)	
+	--Log.write(Log.LOGID_OSS_FUWEN, human.db._id, human.db.account, human.db.name, human.db.lv, LogDefine.DEFINE[logType] + LogDefine.TYPE["fuwen"] , fuwenGrid.id, -1)
+    
+    Log.write(Log.LOGID_OSS_FUWEN, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, LogDefine.DEFINE[logType] + LogDefine.TYPE["fuwen"] , fuwenGrid.id, -1)	
 	
 	sendFuwenItemChange(human, index, nil, FuwenDefine.FUWEN_BAG_OP_DEL)
 end
@@ -815,13 +821,15 @@ function fuwenRefreshSave(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
             fuwen.attr = fuwen.attrTemp
             fuwen.attrTemp = {}
         else
-            Log.write(Log.LOGID_DEBUG, human.db._id, human.db.account, human.db.name, human.db.lv, fuwen.id,"refreshsave attrTemp is empty")	
+            --Log.write(Log.LOGID_DEBUG, human.db._id, human.db.account, human.db.name, human.db.lv, fuwen.id,"refreshsave attrTemp is empty")
+            Log.write(Log.LOGID_DEBUG, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, fuwen.id,"refreshsave attrTemp is empty")
         end
         if next(fuwen.skillTemp) then
             fuwen.skill = fuwen.skillTemp
             fuwen.skillTemp = nil
         else
-            Log.write(Log.LOGID_DEBUG, human.db._id, human.db.account, human.db.name, human.db.lv, fuwen.id,"refreshsave skillTemp is empty")	
+            --Log.write(Log.LOGID_DEBUG, human.db._id, human.db.account, human.db.name, human.db.lv, fuwen.id,"refreshsave skillTemp is empty")
+            Log.write(Log.LOGID_DEBUG, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, fuwen.id,"refreshsave skillTemp is empty")
         end
     end
 

+ 6 - 3
script/module/guide/GuideLogic.lua

@@ -152,8 +152,10 @@ function setGuide(human, id, state, skipType)
     end
     
     if state == STATE_FINISH then
-        Log.write(Log.LOGID_OSS_GUIDE_MAIN, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip, 
-            human.pf or "", human.appid, id, skipType or 0)
+        -- Log.write(Log.LOGID_OSS_GUIDE_MAIN, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip, 
+        --     human.pf or "", human.appid, id, skipType or 0)
+        Log.write(Log.LOGID_OSS_GUIDE_MAIN, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, human.db.ip, 
+        human.pf or "", human.appid, id, skipType or 0)
     end
 end
 
@@ -186,7 +188,8 @@ function setGuideStep(human, step, sid)
     end
     human.db.guide.step = step
     if sid then
-        Log.write(Log.LOGID_OSS_GUIDE_SUB, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip, human.pf or "", human.appid, sid)
+        --Log.write(Log.LOGID_OSS_GUIDE_SUB, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip, human.pf or "", human.appid, sid)
+        Log.write(Log.LOGID_OSS_GUIDE_SUB, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, human.db.ip, human.pf or "", human.appid, sid)
     end
 end
 

+ 9 - 3
script/module/hero/HeroLogic.lua

@@ -459,13 +459,18 @@ end
 
 -- 英雄添加日志
 function writeLogHeroAdd(human, logType, heroGrid)
-	Log.write(Log.LOGID_OSS_HERO, human.db._id, human.db.account, human.db.name, human.db.lv, 
+	-- Log.write(Log.LOGID_OSS_HERO, human.db._id, human.db.account, human.db.name, human.db.lv, 
+	-- 	LogDefine.DEFINE[logType] + LogDefine.TYPE["hero"] , heroGrid.id, 1, heroGrid.uuid, heroGrid.star)
+
+	Log.write(Log.LOGID_OSS_HERO, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, 
 		LogDefine.DEFINE[logType] + LogDefine.TYPE["hero"] , heroGrid.id, 1, heroGrid.uuid, heroGrid.star)
 end
 
 -- 英雄删除日志
 function writeLogHeroDel(human, logType, heroGrid)
-	Log.write(Log.LOGID_OSS_HERO, human.db._id, human.db.account, human.db.name, human.db.lv, 
+	-- Log.write(Log.LOGID_OSS_HERO, human.db._id, human.db.account, human.db.name, human.db.lv, 
+	-- 	LogDefine.DEFINE[logType] + LogDefine.TYPE["hero"] , heroGrid.id, -1, heroGrid.uuid, heroGrid.star)
+	Log.write(Log.LOGID_OSS_HERO, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, 
 		LogDefine.DEFINE[logType] + LogDefine.TYPE["hero"] , heroGrid.id, -1, heroGrid.uuid, heroGrid.star)
 end
 
@@ -636,7 +641,8 @@ function heroLvUp(human, heroID, heroIndex)
     end
 	
 	XingYaoGongMing.onHeroLvUp(human,heroGrid,heroIndex)
-    Log.write(Log.LOGID_OSS_HEROLVUP, human.db._id, human.db.account, human.db.name, heroGrid.uuid, nowLv, heroGrid.lv)
+    --Log.write(Log.LOGID_OSS_HEROLVUP, human.db._id, human.db.account, human.db.name, heroGrid.uuid, nowLv, heroGrid.lv)
+	Log.write(Log.LOGID_OSS_HEROLVUP, human.db._id, human.db.newUniqueTag, human.db.name, heroGrid.uuid, nowLv, heroGrid.lv)
 	checkChangeMaxZDL(human, heroGrid)
 end
 

+ 2 - 0
script/module/mail/MailManager.lua

@@ -18,6 +18,7 @@ MAIL_MAX_CNT = 100			-- 
 local FIELD_ID = {_id = nil}
 local FIELD_RECEIVER = {uuid = nil,type = nil}
 
+--后面如果fbAccount有值应该把区服id一起
 function add(type,receiverUuid,title,content,items,senderName,sender,time,fbTime,fbContent,fbAccount,expireTime) 
 	if _G.is_middle == true or type == GONGGAO then
 		return
@@ -34,6 +35,7 @@ function add(type,receiverUuid,title,content,items,senderName,sender,time,fbTime
     mail.fbTime = fbTime
     mail.fbContent = fbContent
     
+	--后面用到
     local fields = {head = 1,lv = 1}
     if fbAccount ~= nil then
         local db = RoleDBLogic.getDbByAccount(fbAccount,fields)

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

@@ -18,6 +18,7 @@ local Lang = require("common.Lang")
 local CombatLogic = require("combat.CombatLogic")
 local CombatPosLogic = require("combat.CombatPosLogic")
 local MiddleDefine = require("middle.MiddleDefine")
+local YunYingLogic = require("yunying.YunYingLogic")
 
 local MIDDLE_FRIEND_FIGHT_MAP = 1001
 
@@ -254,6 +255,8 @@ function MiddleCommonLogic_CombatBegin_SendWL(fd, msg)
         defJiban = msg.tJiBan,
     }
 
+    YunYingLogic.onCallBack(human, "friendCombat", 1)
+
     print("[MiddleCommonLogic_CombatBegin_SendWL] 开始进行战斗")
 
     CombatLogic.combatBegin(human, MIDDLE_FRIEND_FIGHT_MAP, args, tCombatCache.nCombatType, tCombatCache.nDesUID)

+ 4 - 2
script/module/moshou/MoshouLogic.lua

@@ -323,7 +323,8 @@ function CG_MOSHOU_LVUP_UP(human, upType)
 		human.db.moshou.lvAttrsAdd = nil
         lvUpState = true
         -- 守护之龙的等级记录
-        Log.write(Log.LOGID_OSS_DRAGON_LEVEL, human.db._id, human.db.account, human.db.name, human.db.moshou.lv, getMoShouSkillLv(human))
+        --Log.write(Log.LOGID_OSS_DRAGON_LEVEL, human.db._id, human.db.account, human.db.name, human.db.moshou.lv, getMoShouSkillLv(human))
+        Log.write(Log.LOGID_OSS_DRAGON_LEVEL, human.db._id, human.db.newUniqueTag, human.db.name, human.db.moshou.lv, getMoShouSkillLv(human))
 	else
 		human.db.moshou.lvAttrsAdd = human.db.moshou.lvAttrsAdd or {}
 		for i=1,#lvAttrsAddCnf do
@@ -484,7 +485,8 @@ function CG_MOSHOU_SKILL_UP(human, moshouID)
 
     human.db.moshou = human.db.moshou or {}
     human.db.moshou.skillLV = nextSkillLv
-    Log.write(Log.LOGID_OSS_DRAGON_LEVEL, human.db._id, human.db.account, human.db.name, human.db.moshou.lv, getMoShouSkillLv(human))
+    --Log.write(Log.LOGID_OSS_DRAGON_LEVEL, human.db._id, human.db.account, human.db.name, human.db.moshou.lv, getMoShouSkillLv(human))
+    Log.write(Log.LOGID_OSS_DRAGON_LEVEL, human.db._id, human.db.newUniqueTag, human.db.name, human.db.moshou.lv, getMoShouSkillLv(human))
 
     Broadcast.sendErr(human, Lang.MOSHOU_SKILL_LV_UP)
 

+ 13 - 5
script/module/platform/ApiLogic.lua

@@ -38,6 +38,7 @@ function deliver(oJsonInput,ret)
 	oJsonInput.money = tonumber(oJsonInput.money)
 	oJsonInput.price = oJsonInput.money
 	ret.account = oJsonInput.account
+	ret.serverTag = oJsonInput.serverTag
 	ret.order = oJsonInput.order
 	--ret.type = oJsonInput.type
 	ret.id = oJsonInput.id
@@ -47,7 +48,7 @@ function deliver(oJsonInput,ret)
 	ret.price = oJsonInput.price
 	--ret.region = oJsonInput.region
 	ret.err = ""
-	if not (ret.account and ret.order  and ret.id and ret.cnt ) then -- and ret.type and ret.region
+	if not (ret.account and ret.order  and ret.id and ret.cnt and  ret.serverTag ) then -- and ret.type and ret.region
 		ret.result = 6
 		ret.err = "param empty"
 		return ret
@@ -60,10 +61,14 @@ function deliver(oJsonInput,ret)
 	end
 	DELIVER_CODE_HIS[oJsonInput.order] = os.time()
 
-	local human = ObjHuman.onlineAccount[ret.account]
+	-- local human = ObjHuman.onlineAccount[ret.account]
+
+	local uTag = RoleDBLogic.generateuuid(ret.account, ret.serverTag)
+	local human = ObjHuman.onlineNewUniqueTag[uTag]
+
 	local online = true
 	if not human then
-		local humanDb = RoleDBLogic.loadRole(ret.account)
+		local humanDb = RoleDBLogic.loadRole(uTag)
 		human = {}
 		human.db = humanDb
 		online = false
@@ -87,7 +92,8 @@ function deliver(oJsonInput,ret)
 		else
 			local pcallRet, pcallErr = pcall(BuyLogic.buy, human,ret)
 			if not pcallRet then
-				Log.write(Log.LOGID_ERR_PCALL, "BuyLogic.buy err=" .. human.db.account, pcallErr)
+				--Log.write(Log.LOGID_ERR_PCALL, "BuyLogic.buy err=" .. human.db.account, pcallErr)
+				Log.write(Log.LOGID_ERR_PCALL, "BuyLogic.buy err=" .. human.db.newUniqueTag, pcallErr)
 				ret.result = -1
 				ret.err = pcallErr
 				return Broadcast.sendErr(human, "BuyLogic.buy "..Lang.PCALL_ERR) 
@@ -100,7 +106,8 @@ function deliver(oJsonInput,ret)
 
 	RoleDBLogic.saveRole(human.db)
 	ret.result = 1
-	Log.write(Log.LOGID_OSS_DELIVER, human.db._id, human.db.account, human.db.name, human.db.lv,oJsonInput.order,oJsonInput.money,oJsonInput.type,oJsonInput.id,oJsonInput.cnt,online and 1 or 0,oJsonInput.region)	
+	--Log.write(Log.LOGID_OSS_DELIVER, human.db._id, human.db.account, human.db.name, human.db.lv,oJsonInput.order,oJsonInput.money,oJsonInput.type,oJsonInput.id,oJsonInput.cnt,online and 1 or 0,oJsonInput.region)
+	Log.write(Log.LOGID_OSS_DELIVER, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv,oJsonInput.order,oJsonInput.money,oJsonInput.type,oJsonInput.id,oJsonInput.cnt,online and 1 or 0,oJsonInput.region)
 	return ret
 end
 
@@ -117,6 +124,7 @@ end
 -1:未知错误
 --]]
 CHARGE_CODE_HIS = CHARGE_CODE_HIS or {}
+--如果后续用到该接口时,需要参照deliver修改用到account的地方
 function charge(oJsonInput,ret)
 	oJsonInput.gold = tonumber(oJsonInput.gold)
 	oJsonInput.money = tonumber(oJsonInput.money)

+ 2 - 1
script/module/present/LimitPerpleHeroLogic.lua

@@ -279,7 +279,8 @@ function onDrawCardActive(human, id, op, actConfig, skip,isAct)
 	    YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3608)
         break
     end
-    Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.account, human.db.name, human.db.lv, id, heroIDs, itemID or 0, cnt or 0, zuanshi or 0, 0)
+    --Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.account, human.db.name, human.db.lv, id, heroIDs, itemID or 0, cnt or 0, zuanshi or 0, 0)
+    Log.write(Log.LOGID_OSS_DRAWCARD, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, id, heroIDs, itemID or 0, cnt or 0, zuanshi or 0, 0)
 
     perpleHero.drawCardCnt = perpleHero.drawCardCnt or 0
     perpleHero.drawCardCnt = perpleHero.drawCardCnt + heroCnt

+ 28 - 10
script/module/role/CreateRole.lua

@@ -84,17 +84,23 @@ function creatFakeDb(account, serverTag)
 end
 
 
-function createNewRole(human, serverTag)
+function createNewRole(human)
 	if _G.is_middle == true then
 		return
 	end
 	
-	if human.db or RoleDBLogic.isAccountExistInDB(human.account) then
+	-- if human.db or RoleDBLogic.isAccountExistInDB(human.account, human.serverTag) then
+	-- 	assert(nil)
+	-- 	return
+	-- end
+
+
+	if human.db or RoleDBLogic.isNewUniqueTagExistInDB(human.account, human.serverTag) then
 		assert(nil)
 		return
 	end
 	
-	human.db = RoleDBLogic.createDefaultRole(human.account, serverTag)
+	human.db = RoleDBLogic.createDefaultRole(human.account, human.serverTag)
 	
 	-- 保存数据
 	human.db.name = human.account
@@ -156,10 +162,15 @@ function changeName(human, roleName)
 	Msg.send(msgRet, human.fd)
     	
 	if human.db.changeNameCnt == 1 then
-		Log.write(Log.LOGID_OSS_REGISTER, human.db._id, human.db.account, human.db.name, human.ip,human.pf or "",human.appid, human.db.changeNameCnt)
-		Log.write(Log.LOGID_OSS_CREATELOSS,human.db.account, human.db.name, LogDefine.HUMAN_LOST.CREATE_NAME_FINISH, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
+		-- Log.write(Log.LOGID_OSS_REGISTER, human.db._id, human.db.account, human.db.name, human.ip,human.pf or "",human.appid, human.db.changeNameCnt)
+		-- Log.write(Log.LOGID_OSS_CREATELOSS,human.db.account, human.db.name, LogDefine.HUMAN_LOST.CREATE_NAME_FINISH, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
+		-- ReportManager.create(human)
+		-- Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip)
+
+		Log.write(Log.LOGID_OSS_REGISTER, human.db._id, human.db.newUniqueTag, human.db.name, human.ip,human.pf or "",human.appid, human.db.changeNameCnt)
+		Log.write(Log.LOGID_OSS_CREATELOSS,human.db.newUniqueTag, human.db.name, LogDefine.HUMAN_LOST.CREATE_NAME_FINISH, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
 		ReportManager.create(human)
-		Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip)		
+		Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, human.db.ip)
 	end
 end
 
@@ -168,7 +179,9 @@ function changeNameQuery(human)
 	local msgRet = Msg.gc.GC_ROLE_CHANGE_NAME_QUERY
 	if human.db.changeNameCnt == nil then
 		msgRet.price = 0
-		Log.write(Log.LOGID_OSS_CREATELOSS,human.db.account, human.db.name, LogDefine.HUMAN_LOST.SHOW_NAME_PANEL, human.db.ip,human.pf or "",human.appid, human.phpChanelID)		
+		--Log.write(Log.LOGID_OSS_CREATELOSS,human.db.account, human.db.name, LogDefine.HUMAN_LOST.SHOW_NAME_PANEL, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
+		
+		Log.write(Log.LOGID_OSS_CREATELOSS,human.db.newUniqueTag, human.db.name, LogDefine.HUMAN_LOST.SHOW_NAME_PANEL, human.db.ip,human.pf or "",human.appid, human.phpChanelID)		
 	else
 		msgRet.price = CHANGE_NAME_COST
 	end
@@ -238,10 +251,15 @@ function createRoleChangeInfo(human,name,sex,firendCode)
 
     -- 记录流失日志
     if human.db.changeNameCnt == 0 then
-		Log.write(Log.LOGID_OSS_REGISTER, human.db._id, human.db.account, human.db.name, human.ip,human.pf or "",human.appid, human.db.changeNameCnt)
-		Log.write(Log.LOGID_OSS_CREATELOSS,human.db.account, human.db.name, LogDefine.HUMAN_LOST.CREATE_NAME_FINISH, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
+		-- Log.write(Log.LOGID_OSS_REGISTER, human.db._id, human.db.account, human.db.name, human.ip,human.pf or "",human.appid, human.db.changeNameCnt)
+		-- Log.write(Log.LOGID_OSS_CREATELOSS,human.db.account, human.db.name, LogDefine.HUMAN_LOST.CREATE_NAME_FINISH, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
+		-- ReportManager.create(human)
+		-- Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip)
+
+		Log.write(Log.LOGID_OSS_REGISTER, human.db._id, human.db.newUniqueTag, human.db.name, human.ip,human.pf or "",human.appid, human.db.changeNameCnt)
+		Log.write(Log.LOGID_OSS_CREATELOSS,human.db.newUniqueTag, human.db.name, LogDefine.HUMAN_LOST.CREATE_NAME_FINISH, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
 		ReportManager.create(human)
-		Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.account, human.db.name, human.db.lv, human.db.ip)		
+		Log.write(Log.LOGID_OSS_LOGIN, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv, human.db.ip)
 	end
 end
 

+ 2 - 1
script/module/role/Handler.lua

@@ -41,7 +41,8 @@ function CG_CREATE_LOST_OSS(human, msg)
 		return
 	end
 
-	Log.write(Log.LOGID_OSS_CREATELOSS,human.db.account, human.db.name, step, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
+	--Log.write(Log.LOGID_OSS_CREATELOSS,human.db.account, human.db.name, step, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
+	Log.write(Log.LOGID_OSS_CREATELOSS,human.db.newUniqueTag, human.db.name, step, human.db.ip,human.pf or "",human.appid, human.phpChanelID)
 end
 
 function CG_ROLE_COMBATHERO_QUERY(human, msg)

+ 3 - 0
script/module/role/RoleDBLogic.lua

@@ -223,6 +223,9 @@ function createDefaultRole(account, serverTag)
 		shop = nil,                             -- 商店购买物品次数记录 shop[shopType][itemID] = cnt
 		
 		battleGameTimes = nil,					-- 普通闯关的获得的游戏次数
+		eliteBattleGameTimes = nil,				-- 精英闯关的获得的游戏次数
+		hardBattleGameTimes = nil,				-- 困难闯关的获得的游戏次数
+
 		battleType = 1,							-- 战役类型(1、普通,2、精英,3、困难)
 		maxBattleTime = nil,					-- 最新关卡通关时间
 		guajiID = 0,						    -- 已通关关卡/挂机关卡

+ 12 - 4
script/module/scene/Handler.lua

@@ -123,6 +123,7 @@ function CG_ASK_LOGIN(fd, msg)
 			cnt=payParams.cnt, --数量
 			money=payParams.money, -- 金额
 			account=payParams.account, --账号
+			serverTag = msg.serverTag, --区服标识
 			order=payParams.order,--订单号
 			region="cn",
 		}
@@ -148,21 +149,28 @@ function CG_ASK_LOGIN(fd, msg)
 		return sendDisconnect(fd, CommonDefine.DISCONNECT_MAX_ONLINE)
 	end
 
+	--目前暂未校验,返回的都是true,后续如果需要校验,再看看是否需要把区服标识传入
     local retAuth = AuthCheck.authCheck(msg.account, msg.authkey, msg.timestamp, msg.ip)
 	if retAuth ~= true then
 		return sendDisconnect(fd, CommonDefine.DISCONNECT_AUTH_FAIL)
 	end
 
 	local account = msg.account
-	local params = Json.Decode(msg.params)	
+	local serverTag = msg.serverTag
+	local params = Json.Decode(msg.params)
+
 	--如果是已经登录的,也断开连接
-	local human_old = ObjHuman.onlineAccount[account]
+	--local human_old = ObjHuman.onlineAccount[account]
+
+	local uTag = RoleDBLogic.generateuuid(account, serverTag)
+	local human_old = ObjHuman.onlineNewUniqueTag[uTag]
 	if human_old then
 		ObjHuman.doDisconnect(human_old, CommonDefine.DISCONNECT_DUPLICATE)
 	end		
 
 	--创建新角色
-	local human = ObjHuman.create(fd, account, human_old and human_old.db, nil)
+	-- local human = ObjHuman.create(fd, account, human_old and human_old.db, nil)
+	local human = ObjHuman.create(fd, account, human_old and human_old.db, serverTag)
 	setLoginParams(human, msg, params) -- 设置登录参数
 
 	if human.db == nil then
@@ -176,7 +184,7 @@ function CG_ASK_LOGIN(fd, msg)
         end
 		
 		Log.write(Log.LOGID_OSS_CREATELOSS,account, "", LogDefine.HUMAN_LOST.ENTRANCE, human.ip, human.pf, human.appid, human.phpChanelID)
-		CreateRole.createNewRole(human, msg.serverTag)
+		CreateRole.createNewRole(human)
 	else
 		-- 封号
 		if human.db.banUserTime == -1 or 

+ 4 - 2
script/module/topup/BuyLogic.lua

@@ -353,7 +353,8 @@ function buy(human, arg, nolog)
 	end
 
 	if not nolog and type(arg) == "table" and arg.order ~= "transaction_id1"then
-		Log.write(Log.LOGID_OSS_PAY, human.db._id, human.db.account, human.db.name, human.db.lv,arg.order or "" ,buyID or 0,arg.amt or arg.money or 0,arg.gold or 0,2,arg.region or "")
+		--Log.write(Log.LOGID_OSS_PAY, human.db._id, human.db.account, human.db.name, human.db.lv,arg.order or "" ,buyID or 0,arg.amt or arg.money or 0,arg.gold or 0,2,arg.region or "")
+		Log.write(Log.LOGID_OSS_PAY, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv,arg.order or "" ,buyID or 0,arg.amt or arg.money or 0,arg.gold or 0,2,arg.region or "")
 	end
 
 	if type(arg) == "table" then
@@ -396,7 +397,8 @@ function charge(human,oJsonInput)
 		ObjHuman.addZuanshi(human, gold, "buyTopup")
 	end
     if oJsonInput.order ~= 'transaction_id1' then
-        Log.write(Log.LOGID_OSS_PAY, human.db._id, human.db.account, human.db.name, human.db.lv,oJsonInput.order,buyID or 0,oJsonInput.amt or oJsonInput.money,oJsonInput.gold,2,oJsonInput.region)
+        --Log.write(Log.LOGID_OSS_PAY, human.db._id, human.db.account, human.db.name, human.db.lv,oJsonInput.order,buyID or 0,oJsonInput.amt or oJsonInput.money,oJsonInput.gold,2,oJsonInput.region)
+		Log.write(Log.LOGID_OSS_PAY, human.db._id, human.db.newUniqueTag, human.db.name, human.db.lv,oJsonInput.order,buyID or 0,oJsonInput.amt or oJsonInput.money,oJsonInput.gold,2,oJsonInput.region)
     end
 end
 

+ 2 - 1
script/module/union/UnionTecLogic.lua

@@ -406,7 +406,8 @@ function techLvUp(human,occu,tier)
         if tier == TEC_TIER_CNT then
             human.db.technology[occu].lv = human.db.technology[occu][tier].lv
             -- 公会科技等级记录
-            Log.write(Log.LOGID_OSS_UNION_TECH, human.db._id, human.db.account, human.db.name, occu, human.db.technology[occu].lv or 0)
+            --Log.write(Log.LOGID_OSS_UNION_TECH, human.db._id, human.db.account, human.db.name, occu, human.db.technology[occu].lv or 0)
+            Log.write(Log.LOGID_OSS_UNION_TECH, human.db._id, human.db.newUniqueTag, human.db.name, occu, human.db.technology[occu].lv or 0)
         end
     end
 

+ 2 - 1
script/module/yjTreasure/YjTreasureLogic.lua

@@ -901,7 +901,8 @@ function yjTreasure2NextLayer(human)
 
     MengxinLogic.onCallBack(human, MengxinLogic.MX_TASK_TYPE_16, nowLayer + 1)
     --TODO:记录遗迹探险
-    Log.write(Log.LOGID_OSS_BATTLE_RELIC, human.db._id, human.db.account, human.db.name, nowLayer + 1)
+    --Log.write(Log.LOGID_OSS_BATTLE_RELIC, human.db._id, human.db.account, human.db.name, nowLayer + 1)
+    Log.write(Log.LOGID_OSS_BATTLE_RELIC, human.db._id, human.db.newUniqueTag, human.db.name, nowLayer + 1)
 
     YunYingLogic.onCallBack(human, "YJTreasurePass", 1)