#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- # ##@package GameWorldLogic.FBProcess.GameLogic_FamilyParty # # @todo:Õ½ÃËÊ¢Ñç # @author xdh # @date 2018-04-16 # @version 1.0 # # ÏêϸÃèÊö: Õ½ÃËÊ¢Ñç # #--------------------------------------------------------------------- """Version = 2018-04-16 17:20""" import ShareDefine import FBCommon import ChConfig import IPY_GameWorld import PlayerControl import GameWorld import PlayerFamily import IpyGameDataPY import GameWorldProcess import PlayerFairyCeremony import EventReport import PyGameData import ItemCommon import ItemControler import Item_AddLV #µ±Ç°¸±±¾µØÍ¼µÄ״̬ ( FB_Step_Open, # µØÍ¼¿ªÆô FB_Step_Fighting, # Õ½¶·ÖÐ FB_Step_Over, # ¸±±¾¹Ø±Õ ) = range(3) #---Õ½Ã˸±±¾--- Map_FamilyPartyFB_StartTick = "Map_FamilyPartyFB_StartTick" # ¸±±¾¿ªÊ¼Ê±¼ä GameFBDict_LastEnterFbDay = 'LastEnterFbDay_%s' #ÉϴνøÈë»î¶¯µÄ¿ª·þÌì FBPlayerDict_TotalExp = 'XMYH_TotalExp%s' # »ñµÃµÄ×ܾ­Ñé FBPlayerDict_TotalExpPoint = 'XMYH_TotalExpPoint%s' # »ñµÃµÄ×ܾ­Ñéµã FBPlayerDict_TotalPoint = 'XMYH_TotalPoint%s' # »ñµÃµÄ×ÜÏÉÃ˹±Ï×Öµ FBPlayerDict_HasCollect = 'XMYH_HasCollect%s' # ÊÇ·ñÒѲɼ¯ FBPlayerDict_HasSit = 'XMYH_HasSit%s' # ÊÇ·ñÒÑ´«¹¦ g_familyMapPlayerIDDict = {}#{lineid:[playerid,..]} def OnFBPlayerOnDay(curPlayer): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyPartyAnswerCnt, 0) return ##¿ªÆô¸±±¾ # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¿ªÆô¸±±¾ def OnOpenFB(tick): gameFB = GameWorld.GetGameFB() gameFB.ClearAllPlayerGameFBDict() # Çå³ýËùÓÐÍæ¼Ò¶ÔÓ¦µÄ¸±±¾×ÖµäÐÅÏ¢ gameFB.SetGameFBDict(ChConfig.Map_FBDict_NotifyStart, 0) return ##¹Ø±Õ¸±±¾ # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks def OnCloseFB(tick): #¸±±¾Ìß³öÍæ¼Ò FBCommon.DoLogic_FBKickAllPlayer() return ## ÊÇ·ñÄܹ»Í¨¹ý»î¶¯²éѯ½øÈë # @param curPlayer Íæ¼ÒʵÀý # @param mapID µØÍ¼ID # @param lineID Ïß·id # @param tick ʱ¼ä´Á # @return ²¼¶ûÖµ def OnEnterFBEvent(curPlayer, mapID, lineID, tick): return __CheckEnter(curPlayer, mapID) ##½øÈ븱±¾¼ì²é # @param curPlayer Íæ¼ÒʵÀý # @param mapID µØÍ¼ID # @param lineID Ïß·id # @return None def __CheckEnter(curPlayer, mapID): # ÊÇ·ñÓÐÕ½ÃË if curPlayer.GetFamilyID() <= 0: GameWorld.DebugLog("ûÓÐÕ½ÃË£¬²»ÄܽøÈëÕ½ÃËboss¸±±¾£¡") return False return True ##¸±±¾Íæ¼Ò½øÈëµã # @param curPlayer Íæ¼ÒʵÀý # @param mapID µØÍ¼ID # @param lineId ·ÖÏßID # @param ipyEnterPosInfo ¹¦ÄÜÏß·IPYÅäÖÃ×ø±êÐÅÏ¢ # @param tick ʱ¼ä´Á # @return posX, posY, Ëæ»ú°ë¾¶(¿ÉÑ¡) def OnGetFBEnterPos(curPlayer, mapID, lineId, ipyEnterPosInfo, tick): return ipyEnterPosInfo ##ÊÇ·ñ¿ÉÒÔ½øÈë # @param ask ÇëÇó½á¹¹Ìå # @param tick ʱ¼ä´Á # @return def OnChangeMapAsk(ask, tick): GameWorld.DebugLog("OnChangeMapAsk CopyMapID=%s" % (ask.GetCopyMapID())) playerIDStr = ask.GetMsg() GameWorld.DebugLog("OnChangeMapAsk playerIDStr=%s" % playerIDStr) #Я´øÍæ¼ÒIDÈ볡 if playerIDStr in ['', '0']: return IPY_GameWorld.cmeCustom playerID = int(playerIDStr) # # # ÅжÏÊÇ·ñÒѾ­½ø³¡¹ý # gameFB = GameWorld.GetGameFB() # fbStep = gameFB.GetFBStep() # # GameWorld.DebugLog("OnChangeMapAsk fbStep=%s" % fbStep) # # ³¬¹ý×¼±¸½×¶Î£¬Èç¹ûÒѾ­½øÈ¥¹ý²»ÈÃÔÙ½ø # openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) # isEnter = GameWorld.GetGameWorld().GetGameWorldDictByKey(GameFBDict_LastEnterFbDay % playerID) == openServerDay + 1 # GameWorld.DebugLog("OnChangeMapAsk isEnter=%s" % isEnter) # if isEnter: # return IPY_GameWorld.cmeCustom, "GeRen_liubo_676165" #¿É½øÈë return IPY_GameWorld.cmeAccept ##Íæ¼Ò½øÈ븱±¾ # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks Íæ¼Ò½øÈ븱±¾ def DoEnterFB(curPlayer, tick): global g_familyMapPlayerIDDict mapID = GameWorld.GetGameWorld().GetMapID() playerID = curPlayer.GetPlayerID() if not __CheckEnter(curPlayer, mapID): PlayerControl.PlayerLeaveFB(curPlayer) return gameFB = GameWorld.GetGameFB() gameWorld = GameWorld.GetGameWorld() closeFB_RemainTick = __GetRemainTick(tick) if not closeFB_RemainTick: PlayerControl.PlayerLeaveFB(curPlayer) return curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, closeFB_RemainTick, True) GameWorld.DebugLog('closeFB_RemainTick=%s' % closeFB_RemainTick) openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) if gameWorld.GetGameWorldDictByKey(GameFBDict_LastEnterFbDay % playerID) != openServerDay + 1: gameWorld.SetGameWorldDict(GameFBDict_LastEnterFbDay % playerID, openServerDay + 1) gameWorld.SetGameWorldDict(FBPlayerDict_TotalExp % playerID, 0) gameWorld.SetGameWorldDict(FBPlayerDict_TotalExpPoint % playerID, 0) gameWorld.SetGameWorldDict(FBPlayerDict_TotalPoint % playerID, 0) gameWorld.SetGameWorldDict(FBPlayerDict_HasCollect % playerID, 0) gameWorld.SetGameWorldDict(FBPlayerDict_HasSit % playerID, 0) FBCommon.ClearAreaRewardRecord(playerID) FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_FBMapID_FamilyParty) PlayerFamily.AddFamilyActivity(curPlayer, ShareDefine.FamilyActive_Party) EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_FamilyParty, 0, ChConfig.CME_Log_Start) PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_FamilyParty, 1) lineID = GameWorld.GetGameWorld().GetLineID() if lineID not in g_familyMapPlayerIDDict: g_familyMapPlayerIDDict[lineID] = [] if playerID not in g_familyMapPlayerIDDict[lineID]: g_familyMapPlayerIDDict[lineID].append(playerID) playerManager = GameWorld.GetMapCopyPlayerManager() for index in xrange(playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(index) if not curPlayer: continue DoFBHelp(curPlayer, tick, True) return def __GetRemainTick(tick): ##»î¶¯Ê£ÓàºÁÃë mapID = GameWorld.GetMap().GetMapID() startTick = GameWorld.GetGameWorld().GetGameWorldDictByKey(Map_FamilyPartyFB_StartTick) closeFB_RemainTick = max(0, FBCommon.GetFBLineStepTime(mapID)[0] * 1000 - (tick - startTick)) return closeFB_RemainTick ##¸±±¾¶¨Ê±Æ÷ # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¸±±¾¶¨Ê±Æ÷ def OnProcess(tick): familyID = GameWorld.GetGameWorld().GetPropertyID() if not familyID: return gameFB = GameWorld.GetGameFB() fbStep = gameFB.GetFBStep() #GameWorld.DebugLog(" OnProcess...") if fbStep == FB_Step_Open: if FBCommon.GetFBFuncOpenState(ChConfig.Def_FBMapID_FamilyParty): FBCommon.SetFBStep(FB_Step_Fighting, tick) elif fbStep == FB_Step_Fighting: if not FBCommon.GetFBFuncOpenState(ChConfig.Def_FBMapID_FamilyParty): FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 0) PyGameData.g_familyPartyInfo = [] FBCommon.SetFBStep(FB_Step_Over, tick) FBCommon.DoLogic_FBKickAllPlayer() GameWorldProcess.CloseFB(tick) else: #FBCommon.DoLogicAreaReward("FamilyPartyAreaAward", tick) FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 10000) mapID = GameWorld.GetMap().GetMapID() notifyIndex = gameFB.GetGameFBDictByKey(ChConfig.Map_FBDict_NotifyStart) notifySecondList = FBCommon.GetFBLineStepTime(mapID)[1] if notifyIndex < len(notifySecondList): notifySecond = notifySecondList[notifyIndex] remaindTick = max(0, __GetRemainTick(tick) - 1000) if remaindTick <= (notifySecond + 1) * 1000: #remaindSecond = remaindTick / 1000 PlayerControl.FamilyNotify(familyID, "Party_OverTime", [notifySecond]) GameWorld.GetGameFB().SetGameFBDict(ChConfig.Map_FBDict_NotifyStart, notifyIndex + 1) return def FamilyPartyAnswerRight(curPlayer): #»Ø´ðÕýÈ·£¬¸ø½±Àø # mapID = GameWorld.GetMap().GetMapID() # if mapID != ChConfig.Def_FBMapID_FamilyParty: # return # addPoint, addExp = IpyGameDataPY.GetFuncEvalCfg('PartyReward', 2) #ÏÉÃ˹±Ï×¶È PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, addPoint, True, ShareDefine.Def_AddFAVReason_FamilyParty, True) #´ðÌâ¾­Ñé¸üРPlayerControl.PlayerControl(curPlayer).AddExp(addExp) curAnswerCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyPartyAnswerCnt) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyPartyAnswerCnt, curAnswerCnt + 1) if GameWorld.GetMap().GetMapID() == ChConfig.Def_FBMapID_FamilyParty: DoFBHelp(curPlayer, 0) return def OnFamilyPartyStateChange(state, tick): #»î¶¯×´Ì¬±ä¸ü GameWorld.DebugLog(' ÏÉÃËÑç»á»î¶¯×´Ì¬±ä¸ü state=%s' % state) # if state == 0: # playerManager = GameWorld.GetPlayerManager() # for i in xrange(playerManager.GetPlayerCount()): # curPlayer = playerManager.GetPlayerByIndex(i) # if not curPlayer or curPlayer.IsEmpty(): # continue # #´ð¶ÔÌâ»òÕß½ø¹ýͼµÄ¸ø²ÎÓë½±Àø # curAnswerCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyPartyAnswerCnt) # if FBCommon.GetEnterFBCount(curPlayer, ChConfig.Def_FBMapID_FamilyParty) or curAnswerCnt: # GiveJoinPrize(curPlayer) mapID = GameWorld.GetMap().GetMapID() if mapID != ChConfig.Def_FBMapID_FamilyParty: return if state: if not GameWorld.GetGameWorld().GetGameWorldDictByKey(Map_FamilyPartyFB_StartTick): GameWorld.GetGameWorld().SetGameWorldDict(Map_FamilyPartyFB_StartTick, tick) else: GameWorld.GetGameWorld().SetGameWorldDict(Map_FamilyPartyFB_StartTick, 0) return # #def GiveJoinPrize(curPlayer): # #²ÎÓë½± # joinAward = IpyGameDataPY.GetFuncCfg('PartyReward') # if not joinAward: # return # # PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, joinAward, True, ShareDefine.Def_AddFAVReason_FamilyParty) # return ##»ñµÃÍæ¼Ò´«È븱±¾ÐèҪЯ´øµÄÐÅÏ¢ # @param curPlayer Íæ¼ÒʵÀý # @param lineId ·ÖÏßID # @return ×Ö·û´® # @remarks def GetPlayerResetWorldPosFBMsg(curPlayer, lineId): return '%s' % (curPlayer.GetPlayerID()) ##Íæ¼ÒÍ˳ö¼Ò×å´¦Àí # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå def OnLeaveFamily(curPlayer, tick): #GameWorld.DebugLog("OnLeaveFamily...") curPlayerID = curPlayer.GetPlayerID() PlayerControl.PlayerLeaveFB(curPlayer) return ## ÊÇ·ñ¸±±¾¸´»î # @param None # @return ÊÇ·ñ¸±±¾¸´»î def OnPlayerReborn(): return True ##»ñµÃ¸±±¾°ïÖúÐÅÏ¢ # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks ÓÃÓÚ֪ͨÕóÓª±È·ÖÌõ def DoFBHelp(curPlayer, tick, isSyncPlayerID=False): #gameFB = GameWorld.GetGameFB() gameWorld = GameWorld.GetGameWorld() playerID = curPlayer.GetPlayerID() totalExp = FBCommon.GetFBAreaRewardExp(gameWorld, playerID) curAnswerCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyPartyAnswerCnt) addPoint, addExp = IpyGameDataPY.GetFuncEvalCfg('PartyReward', 2) exp = gameWorld.GetGameWorldDictByKey(FBPlayerDict_TotalExp % playerID) expPoint = gameWorld.GetGameWorldDictByKey(FBPlayerDict_TotalExpPoint % playerID) totalExp = totalExp + expPoint * ChConfig.Def_PerPointValue + exp + addExp * curAnswerCnt exp = totalExp % ChConfig.Def_PerPointValue expPoint = totalExp / ChConfig.Def_PerPointValue totalPoint = gameWorld.GetGameWorldDictByKey(FBPlayerDict_TotalPoint % playerID) #totalPoint += IpyGameDataPY.GetFuncCfg('PartyReward') #¼Ó²ÎÓë½± totalPoint += addPoint * curAnswerCnt hasCollect = gameWorld.GetGameWorldDictByKey(FBPlayerDict_HasCollect % playerID) hasSit = gameWorld.GetGameWorldDictByKey(FBPlayerDict_HasSit % playerID) getCnt = gameWorld.GetGameWorldDictByKey(ChConfig.Map_Player_AreaReward_GetCnt % playerID) isFull = 1 if getCnt >= IpyGameDataPY.GetFuncCfg('FamilyPartyAreaAward', 3) else 0 helpDict = {FBCommon.Help_exp:exp, FBCommon.Help_expPoint:expPoint, FBCommon.Help_score:totalPoint, "hasCollect":hasCollect, "isFullExp":isFull, "hasSit":hasSit} if PyGameData.g_familyPartyInfo: rankList = [] for i, info in enumerate(PyGameData.g_familyPartyInfo[0], 1): rankList.append({"rank":i, "name":info[1], "cnt":info[2]}) helpDict['familyPartyRank'] = rankList helpDict['familyPartyTop'] = {'name':PyGameData.g_familyPartyInfo[1], "cnt":PyGameData.g_familyPartyInfo[2]} if isSyncPlayerID: lineID = GameWorld.GetGameWorld().GetLineID() helpDict['familyPartyPlayer'] = g_familyMapPlayerIDDict.get(lineID, []) GameWorld.DebugLog("DoFBHelp %s" % helpDict, playerID) FBCommon.Notify_FBHelp(curPlayer, helpDict) return ##ÊÇ·ñ¿ÉÒԲɼ¯ # @param curPlayer Íæ¼ÒʵÀý # @param curNPC NPCʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks def OnCanCollect(curPlayer, curNPC, tick): hasCollect = GameWorld.GetGameWorld().GetGameWorldDictByKey(FBPlayerDict_HasCollect % curPlayer.GetID()) if hasCollect: PlayerControl.NotifyCode(curPlayer, 'Party_HadCollected') return needSpace = len(IpyGameDataPY.GetFuncEvalCfg('FamilyPartyDesk', 3)) packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace) if needSpace > packSpace: PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371") return return True ##¸±±¾ÖÐ,²É¼¯ÎïÐèÒªLoadingʱ¼ä. # @param curPlayer Íæ¼ÒʵÀý # @param curNPC NPCʵÀý # @return ·µ»ØÖµ, Loadingʱ¼ä # @remarks ¸±±¾ÖÐ,²É¼¯ÎïÐèÒªLoadingʱ¼ä def GetFBPrepareTime(curPlayer, curNPC): return IpyGameDataPY.GetFuncCfg('FamilyPartyDesk', 2) * 1000 ##Íæ¼ÒÊÕ¼¯³É¹¦(Ëþ, Æì) # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks def OnCollectOK(curPlayer, npcID, tick): playerID = curPlayer.GetID() gameWorld = GameWorld.GetGameWorld() gameWorld.SetGameWorldDict(FBPlayerDict_HasCollect % playerID, 1) GameWorld.DebugLog(' Ñç»á²É¼¯³É¹¦£¡', playerID) #¸ø½±Àø itemAward = IpyGameDataPY.GetFuncEvalCfg('FamilyPartyDesk', 3) for itemID, itemCount, isBind in itemAward: ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem]) addPoint = IpyGameDataPY.GetFuncCfg('FamilyPartyDesk') PlayerControl.NotifyCode(curPlayer, 'Party_CollectSuccess', [addPoint]) PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, addPoint, True, ShareDefine.Def_AddFAVReason_FamilyParty) totalPoint = gameWorld.GetGameWorldDictByKey(FBPlayerDict_TotalPoint % playerID) updPoint = totalPoint + addPoint gameWorld.SetGameWorldDict(FBPlayerDict_TotalPoint % playerID, updPoint) DoFBHelp(curPlayer, 0) return ##Íæ¼ÒÍ˳ö¸±±¾ # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå def DoExitFB(curPlayer, tick): global g_familyMapPlayerIDDict __GiveSitAward(curPlayer) lineID = GameWorld.GetGameWorld().GetLineID() playerID = curPlayer.GetID() if playerID in g_familyMapPlayerIDDict.get(lineID, []): g_familyMapPlayerIDDict[lineID].remove(playerID) if g_familyMapPlayerIDDict[lineID]: playerManager = GameWorld.GetMapCopyPlayerManager() for index in xrange(playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(index) if not curPlayer: continue DoFBHelp(curPlayer, tick, True) return ## ¸±±¾ÐÐΪ # @param curPlayer Íæ¼Ò # @param actionType ÐÐΪÀàÐÍ # @param actionInfo ÐÐΪÐÅÏ¢ # @param tick µ±Ç°Ê±¼ä # @return None def DoFBAction(curPlayer, actionType, actionInfo, tick): gameWorld = GameWorld.GetGameWorld() playerID = curPlayer.GetID() if actionType == 0: #ÑûÇë´ò×ø tagPlayerID = actionInfo if curPlayer.GetPlayerAction() in [IPY_GameWorld.paSit, IPY_GameWorld.paPreparing]: GameWorld.DebugLog('ÑûÇë´ò×ø,Íæ¼ÒÒÑ´¦ÓÚ´ò×ø»ò²É¼¯×´Ì¬', playerID) return hasSit = gameWorld.GetGameWorldDictByKey(FBPlayerDict_HasSit % playerID) if hasSit: GameWorld.Log('ÑûÇë´ò×ø,Íæ¼ÒÒÑ´ò×ø¹ýÒ»´Î', playerID) return copyMapPlayerManager = GameWorld.GetMapCopyPlayerManager() tagPlayer = copyMapPlayerManager.FindPlayerByID(tagPlayerID) if not tagPlayer: GameWorld.DebugLog('ÑûÇë%s´ò×ø,¸ÃÍæ¼Ò²»ÔÚ¸±±¾Àï' % tagPlayerID, playerID) PlayerControl.NotifyCode(curPlayer, 'PartySitFail') return curPlayer.StopMove() curPlayer.Sit() # if not gameWorld.GetGameWorldDictByKey(FBPlayerDict_HasSit % tagPlayerID): # if tagPlayer.GetPlayerAction() not in [IPY_GameWorld.paSit, IPY_GameWorld.paPreparing]: # tagPlayer.StopMove() # tagPlayer.Sit() elif actionType == 1: #´ò×ø½áÊø¸ø½±Àø if not __GiveSitAward(curPlayer): return DoFBHelp(curPlayer, 0) return def __GiveSitAward(curPlayer): #¸ø´ò×ø½±Àø gameWorld = GameWorld.GetGameWorld() playerID = curPlayer.GetID() hasSit = gameWorld.GetGameWorldDictByKey(FBPlayerDict_HasSit % playerID) if hasSit: GameWorld.Log('´ò×ø½áÊø¸ø½±Àø,Íæ¼ÒÒÑ´ò×ø¹ýÒ»´Î', playerID) return if curPlayer.GetPlayerAction() != IPY_GameWorld.paSit: GameWorld.Log('´ò×ø½áÊø¸ø½±Àø,Íæ¼Ò²»ÔÚ´ò×ø×´Ì¬', playerID) return curPlayer.Stand() reLV = curPlayer.GetLV() worldlv = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv) giveLV = eval(IpyGameDataPY.GetFuncCompileCfg('FamilyPartySitAward', 2)) addExp = 0 if giveLV: addExp = Item_AddLV.DoAddLVEx(curPlayer, giveLV, True, True, 0) reLV = curPlayer.GetLV() reExp = PlayerControl.GetPlayerReExp(curPlayer) giveExp = eval(IpyGameDataPY.GetFuncCompileCfg('FamilyPartySitAward')) if giveExp: PlayerControl.PlayerControl(curPlayer).AddExp(giveExp) exp = gameWorld.GetGameWorldDictByKey(FBPlayerDict_TotalExp % playerID) expPoint = gameWorld.GetGameWorldDictByKey(FBPlayerDict_TotalExpPoint % playerID) newTotalExp = expPoint*ChConfig.Def_PerPointValue+exp+giveExp+addExp gameWorld.SetGameWorldDict(FBPlayerDict_TotalExp % playerID, newTotalExp%ChConfig.Def_PerPointValue) gameWorld.SetGameWorldDict(FBPlayerDict_TotalExpPoint % playerID, newTotalExp/ChConfig.Def_PerPointValue) gameWorld.SetGameWorldDict(FBPlayerDict_HasSit % playerID, 1) GameWorld.DebugLog(' ´«¹¦½áÊø£¬giveLV=%s, giveExp=%s, worldlv=%s' % (giveLV, giveExp, worldlv)) return True