From d7415e1acc3cfaae895597d889bf4f5d56d85ad0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 31 七月 2023 16:34:55 +0800
Subject: [PATCH] 9788 【BT9】【后端】成就系统(新增成就类型164~175)

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyParty.py |   69 ++++++++++++++++++++++++----------
 1 files changed, 48 insertions(+), 21 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyParty.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyParty.py
index 43317e3..dea19da 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyParty.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyParty.py
@@ -121,24 +121,31 @@
             PlayerControl.WorldNotify(0, 'Party_TopPlayer', [topHeroName])
             
         #给参与奖励
-        joinReward = IpyGameDataPY.GetFuncEvalCfg('PartyReward')
-        answerRWItemReward = IpyGameDataPY.GetFuncEvalCfg('PartyReward2', 1)
-        for playerID, ansRightCount in PyGameData.g_partyheroAnswerDict.items():
-            if answerRWItemReward and len(answerRWItemReward) == 2:
-                ansTotalCount = len(PyGameData.g_familyAnswerPlayerIDDict.get(playerID, []))
-                ansWrongCount = max(0, ansTotalCount - ansRightCount)
-                isAuctionItem = False
-                rightRewardEx, wrongRewardEx = [], []
-                rightItemID, wrongItemID = answerRWItemReward
-                if rightItemID and ansRightCount:
-                    rightRewardEx = [(rightItemID, ansRightCount, isAuctionItem)]
-                if wrongItemID and ansWrongCount:
-                    wrongRewardEx = [(wrongItemID, ansWrongCount, isAuctionItem)]
-                curJoinReward = joinReward + rightRewardEx + wrongRewardEx
-            else:
-                curJoinReward = joinReward
+        joinPlayerIDList = PyGameData.g_partyheroAnswerDict.keys()
+        if joinPlayerIDList:
+            joinReward = IpyGameDataPY.GetFuncEvalCfg('PartyReward')
             if joinReward:
-                PlayerCompensation.SendMailByKey('FamilyParty', [playerID], curJoinReward)
+                PlayerCompensation.SendMailByKey('FamilyParty', joinPlayerIDList, joinReward)
+        
+        #修改为答完题直接给每题奖励
+#        joinReward = IpyGameDataPY.GetFuncEvalCfg('PartyReward')
+#        answerRWItemReward = IpyGameDataPY.GetFuncEvalCfg('PartyReward2', 1)
+#        for playerID, ansRightCount in PyGameData.g_partyheroAnswerDict.items():
+#            if answerRWItemReward and len(answerRWItemReward) == 2:
+#                ansTotalCount = len(PyGameData.g_familyAnswerPlayerIDDict.get(playerID, []))
+#                ansWrongCount = max(0, ansTotalCount - ansRightCount)
+#                isAuctionItem = False
+#                rightRewardEx, wrongRewardEx = [], []
+#                rightItemID, wrongItemID = answerRWItemReward
+#                if rightItemID and ansRightCount:
+#                    rightRewardEx = [(rightItemID, ansRightCount, isAuctionItem)]
+#                if wrongItemID and ansWrongCount:
+#                    wrongRewardEx = [(wrongItemID, ansWrongCount, isAuctionItem)]
+#                curJoinReward = joinReward + rightRewardEx + wrongRewardEx
+#            else:
+#                curJoinReward = joinReward
+#            if joinReward:
+#                PlayerCompensation.SendMailByKey('FamilyParty', [playerID], curJoinReward)
                 
     return
 
@@ -176,8 +183,14 @@
         for i in xrange(ipyMgr.GetQuestionBankCount()):
             ipyData = ipyMgr.GetQuestionBankByIndex(i)
             questionID = ipyData.GetID()
+            try:
+                eval(ipyData.GetAnswer())
+            except:
+                GameWorld.ErrLog("答题题库答案异常,不处理! questionID=%s,answer=%s" % (questionID, ipyData.GetAnswer()))
+                continue
             allQuestionIDList.append(questionID)
         IpyGameDataPY.SetConfigEx('AllQuestionID', allQuestionIDList)
+        GameWorld.Log("加载仙盟宴会答题题库ID! %s" % str(allQuestionIDList))
     if not allQuestionIDList:
         GameWorld.ErrLog('仙盟宴会题库没有题目!')
         return
@@ -193,9 +206,22 @@
                 ipyData = IpyGameDataPY.GetIpyGameData('QuestionBank', lastQuestionID)
                 if ipyData:
                     answer = ipyData.GetAnswer()
-                    answer = answer.replace('[', '')
-                    answer = answer.replace(']', '')
+                    #不能用replace, 可能导致替换错误, 如 ['望廬山瀑布'] 为 "['\xcd\xfb\x8f]\xc9\xbd\xc6\xd9\xb2\xbc']" 中间有个 ] 替换会导致乱码
+                    #answer = answer.replace('[', '')
+                    #answer = answer.replace(']', '')
+                    answer = answer.strip()
+                    if answer.startswith("[") and answer.endswith("]"):
+                        answer = answer[1:-1]
                     PlayerControl.FamilyNotify(familyID, 'Party_Correct', [maxSecond, GameWorld.GbkToCode(answer)])
+                    
+                for index in xrange(family.GetCount()):
+                    member = family.GetAt(index)
+                    memPlayer = member.GetPlayer()
+                    if memPlayer and memPlayer.GetMapID() == ChConfig.Def_FBMapID_FamilyParty:
+                        rightPlayerID = 0
+                        answerInfo = str([rightPlayerID])
+                        memPlayer.MapServer_QueryPlayerResult(0, 0, "FamilyPartyAnswer", answerInfo, len(answerInfo))
+                        break
             else:
                 continue
         answerTick = gameWorld.GetDictByKey(FamilyPartyFB_AnswerTick % familyID)
@@ -294,7 +320,8 @@
             PyGameData.g_familyPartyTopInfo = [playerID, playerName]
         msgList = [__GetFamilyAnswerRankList(), PyGameData.g_familyPartyTopInfo[1], PyGameData.g_partyheroAnswerDict[PyGameData.g_familyPartyTopInfo[0]]]
         GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FamilyPartyInfo, msgList)
-        #通知玩家可获得贡献
-        curPlayer.MapServer_QueryPlayerResult(0, 0, "FamilyPartyAnswer", '', 0)
+        #通知答题结果
+        answerInfo = str([playerID])
+        curPlayer.MapServer_QueryPlayerResult(0, 0, "FamilyPartyAnswer", answerInfo, len(answerInfo))
         
     return

--
Gitblit v1.8.0