hxp
2025-06-30 388823edfe6308cba6f76ca6dc4f20022c5cb2be
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