소스 검색

修复置换后皮肤切换问题

SCFC 1 년 전
부모
커밋
3396929643
1개의 변경된 파일55개의 추가작업 그리고 34개의 파일을 삭제
  1. 55 34
      script/module/skin/SkinLogic.lua

+ 55 - 34
script/module/skin/SkinLogic.lua

@@ -365,20 +365,25 @@ function skinQuery(human)
        
     end
     msgRet.data[0] = cnt
+    msgRet.isEnd = 1
+    local bSend = false
     local maxLen = #msgRet.list -- 每次最多只能传30个
     cnt = 0
     for id in pairs(SkinExcel) do
         cnt = cnt + 1
         skinNetGen(human,msgRet.list[cnt],id)
-        --[[if cnt >= maxLen then
+        if cnt >= maxLen then
             msgRet.list[0] = maxLen
             cnt = 0
-            msgRet.isEnd = 1
             Msg.send(msgRet,human.fd)
-        end]]
+            msgRet.isEnd = 2
+            bSend = true
+        end
     end
     msgRet.list[0] = cnt
-    msgRet.isEnd = 2
+    if bSend then
+        msgRet.isEnd = 3
+    end
     Msg.send(msgRet,human.fd)
 end
 
@@ -509,51 +514,67 @@ function OnLoginCheckEquipSkin(human, bSyncClient)
     for i = 1,#skinBag do 
         local data = skinBag[i]
         local nSkinID = data.id
+
         local tConfig = SkinExcel[nSkinID]
+        if not tConfig then
+            print("[OnLoginCheckEquipSkin] 严重问题, 找不到对应皮肤的配置 nSkinID = "..nSkinID)
+            break
+        end
+
+        local nHeroID = tConfig.heroId
+        tCheckHero[nHeroID] = tCheckHero[nHeroID] or {}
+
+        -- 找所有皮肤中是否有装备着的
+        local bEquip, nNowSkinID = false, 0
+        for nHaveSkinID, v in pairs(tCheckHero[nHeroID]) do
+            if v == 1 then
+                bEquip = true
+                nNowSkinID = nHaveSkinID
+                break
+            end
+        end
+
         if data.state == 1 then
-            if tConfig then
-                local nHeroID = tConfig.heroId
-                if tCheckHero[nHeroID] then
-                    data.state = 0
-                    print("[OnLoginCheckEquipSkin] 同一个英雄穿上了两个皮肤!! 进行修正 nHeroID = "
-                            .. nHeroID.." nNowSkinID = "..tCheckHero[nHeroID] .. " nSkinID = "..nSkinID)
-                else
-                    tCheckHero[nHeroID] = {nSkinID = nSkinID, bOK = true}
-                    local heroIdxList = HeroLogic.getHeroListById(human, nHeroID)
-                    for _,idx in ipairs(heroIdxList) do
-                        human.db.heroBag[idx].skinOn = nSkinID
-                        RoleHeadLogic.setHead(human,tConfig.head,RoleHeadLogic.HEAD_TYPE_1)
-                        if tConfig.body ~= 0 then
-                            RoleHeadLogic.setHead(human,tConfig.body,RoleHeadLogic.HEAD_TYPE_3)
-                        end
+            if false == bEquip then
+                tCheckHero[nHeroID][nSkinID] = 1            -- 装备标识
+
+                -- 所有英雄进行装备皮肤
+                local heroIdxList = HeroLogic.getHeroListById(human, nHeroID)
+                for _,idx in ipairs(heroIdxList) do
+                    human.db.heroBag[idx].skinOn = nSkinID
+                    RoleHeadLogic.setHead(human,tConfig.head,RoleHeadLogic.HEAD_TYPE_1)
+                    if tConfig.body ~= 0 then
+                        RoleHeadLogic.setHead(human,tConfig.body,RoleHeadLogic.HEAD_TYPE_3)
                     end
-                    print("[OnLoginCheckEquipSkin] 对玩家英雄设置了皮肤 nSkinID = "..nSkinID)
                 end
+                print("[OnLoginCheckEquipSkin] 对玩家英雄设置了皮肤 nSkinID = "..nSkinID.." nHeroID = "..nHeroID)
             else
-                print("[OnLoginCheckEquipSkin] 不存在对应的皮肤配置 nSkinID = ".. nSkinID)
+                tCheckHero[nHeroID][nSkinID] = 0            -- 未装备标识
+                data.state = 0
+                print("[OnLoginCheckEquipSkin] 同一个英雄穿上了两个皮肤!! 进行修正 nHeroID = "
+                .. nHeroID.." nNowSkinID = "..nNowSkinID .. " nSkinID = "..nSkinID)
             end
         else
-            if tConfig then
-                local nHeroID = tConfig.heroId
-                if not tCheckHero[nHeroID] then
-                    tCheckHero[nHeroID] =  {nSkinID = 1, bOK = true}
-                    local heroIdxList = HeroLogic.getHeroListById(human, nHeroID)
-                    local heroCfg = HeroExcel[nHeroID]
+            tCheckHero[nHeroID][nSkinID] = 0            -- 未装备标识
+            if false == bEquip then
+                local heroIdxList = HeroLogic.getHeroListById(human, nHeroID)
+                local heroCfg = HeroExcel[nHeroID]
     
-                    for _,idx in ipairs(heroIdxList) do
-                        -- 脱下皮肤 并且还原默认身体 icon和head
-                        human.db.heroBag[idx].skinOn = nil
-                        --local defaultHead = RoleHeadLogic.getDefaultHead(human)
-                        RoleHeadLogic.setHead(human,heroCfg.head,RoleHeadLogic.HEAD_TYPE_1)
+                for _,idx in ipairs(heroIdxList) do
+                    -- 脱下皮肤 并且还原默认身体 icon和head
+                    human.db.heroBag[idx].skinOn = nil
+                    --local defaultHead = RoleHeadLogic.getDefaultHead(human)
+                    RoleHeadLogic.setHead(human,heroCfg.head,RoleHeadLogic.HEAD_TYPE_1)
     
-                        RoleHeadLogic.setHead(human,heroCfg.body,RoleHeadLogic.HEAD_TYPE_3)
-                    end
+                    RoleHeadLogic.setHead(human,heroCfg.body,RoleHeadLogic.HEAD_TYPE_3)
                 end
+                print("[OnLoginCheckEquipSkin] 对玩家英雄设置取消了皮肤 nHeroID = "..nHeroID.." nSkinID = "..nSkinID)
             end
         end
     end
 
     if bSyncClient then
         skinQuery(human)
+        print("[OnLoginCheckEquipSkin] 同步数据结束")
     end
 end