#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package PlayerFamilyZhenfa # # @todo:ÏÉÃËÕó·¨ # @author hxp # @date 2023-10-11 # @version 1.0 # # ÏêϸÃèÊö: ÏÉÃËÕó·¨ # #------------------------------------------------------------------------------- #"""Version = 2023-10-11 16:30""" #------------------------------------------------------------------------------- import ShareDefine import IpyGameDataPY import GameWorld ActionType_FamilyZhenfa = ShareDefine.Def_ActionType_FamilyZhenfa def GetZhenfaType(actionData): return actionData.GetValue1() def SetZhenfaType(actionData, zhenfaType): actionData.SetValue1(zhenfaType) def GetZhenfaLV(actionData): return actionData.GetValue2() def SetZhenfaLV(actionData, lv): actionData.SetValue2(lv) def GetZhenfaExp(actionData): return actionData.GetValue3() def SetZhenfaExp(actionData, exp): actionData.SetValue3(exp) ## Íæ¼ÒµÇ¼ # @param None # @return None def OnPlayerLogin(curPlayer): return def GetFamilyZhenfaData(familyID, zhenfaType): ## »ñÈ¡ÏÉÃËÕó·¨Êý¾Ý findActionData = None zhenfaAction = GameWorld.GetFamilyActionManager().GetFamilyAction(familyID, ActionType_FamilyZhenfa) for index in range(zhenfaAction.Count()): actionData = zhenfaAction.At(index) if zhenfaType == GetZhenfaType(actionData): findActionData = actionData break if not findActionData: findActionData = zhenfaAction.AddAction() findActionData.SetFamilyId(familyID) findActionData.SetActionType(ActionType_FamilyZhenfa) SetZhenfaType(findActionData, zhenfaType) return findActionData def MapServer_FamilyZhenfa(curPlayer, msgList): familyID, playerID, msgType, msgData = msgList # ¼Ó¾­Ñé if msgType == "AddExp": __DoFamilyZhenfa_AddExp(familyID, playerID, msgType, msgData) return def __DoFamilyZhenfa_AddExp(familyID, playerID, msgType, msgData): zhenfaType, addTotalExp = msgData actionData = GetFamilyZhenfaData(familyID, zhenfaType) zhenfaLV = GetZhenfaLV(actionData) zhenfaExp = GetZhenfaExp(actionData) ipyData = IpyGameDataPY.GetIpyGameData("FamilyZhenfa", zhenfaType, zhenfaLV) if not ipyData: return LVUpNeedExp = ipyData.GetLVUpNeedExp() if not LVUpNeedExp: GameWorld.DebugLog("¸ÃÕó·¨ÒÑÂú¼¶:familyID=%s,zhenfaType=%s,zhenfaLV=%s" % (familyID, zhenfaType, zhenfaLV), playerID) return curExp = zhenfaExp + addTotalExp GameWorld.DebugLog("Ö´ÐÐÕó·¨Éý¼¶: familyID=%s,zhenfaType=%s,zhenfaLV=%s,zhenfaExp=%s,addTotalExp=%s,curExp=%s" % (familyID, zhenfaType, zhenfaLV, zhenfaExp, addTotalExp, curExp), playerID) isLVUP = False # °²È«ÎªÖ÷²»ÓÃwhile for _ in xrange(100): if not LVUpNeedExp or curExp < LVUpNeedExp: break ipyData = IpyGameDataPY.GetIpyGameData("FamilyZhenfa", zhenfaType, zhenfaLV + 1) if not ipyData: break curExp = curExp - LVUpNeedExp zhenfaLV += 1 isLVUP = True GameWorld.DebugLog(" Õó·¨Éý¼¶: LVUpNeedExp=%s,zhenfaLV=%s,curExp=%s" % (LVUpNeedExp, zhenfaLV, curExp), playerID) LVUpNeedExp = ipyData.GetLVUpNeedExp() SetZhenfaLV(actionData, zhenfaLV) SetZhenfaExp(actionData, curExp) GameWorld.DebugLog(" ¸üÐÂÕó·¨: familyID=%s,zhenfaType=%s,zhenfaLV=%s,curExp=%s" % (familyID, zhenfaType, zhenfaLV, curExp), playerID) # ͬ²½µØÍ¼ SyncMap_FamilyZhenfaInfo(familyID, msgType, {"playerID":playerID, "refreshAttr":isLVUP}) return def GetSyncMapFamilyZhenfaInfo(familyID): info = {} zhenfaAction = GameWorld.GetFamilyActionManager().GetFamilyAction(familyID, ActionType_FamilyZhenfa) for index in range(zhenfaAction.Count()): actionData = zhenfaAction.At(index) zhenfaType = GetZhenfaType(actionData) info[zhenfaType] = {"LV":GetZhenfaLV(actionData), "Exp":GetZhenfaExp(actionData)} return info def SyncMap_FamilyZhenfaInfo(familyID, msgType, dataEx={}): ## ͬ²½µ¥¸öÏÉÃËËùÓÐÕó·¨ÐÅÏ¢µ½µØÍ¼ zhenfaInfo = {familyID:GetSyncMapFamilyZhenfaInfo(familyID)} syncDict = {"zhenfaInfo":zhenfaInfo, "msgType":msgType, "familyID":familyID} syncDict.update(dataEx) GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FamilyZhenfaInfo, syncDict) return def SyncMap_AllFamilyZhenfaInfo(): ## ͬ²½ËùÓÐÏÉÃËÕó·¨ÐÅÏ¢µ½µØÍ¼ zhenfaInfo = {} familyManager = GameWorld.GetFamilyManager() for i in range(familyManager.GetCount()): family = familyManager.GetAt(i) familyID = family.GetID() if not familyID: continue info = GetSyncMapFamilyZhenfaInfo(familyID) if info: zhenfaInfo[familyID] = info syncDict = {"zhenfaInfo":zhenfaInfo, "msgType":"allFamily"} GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FamilyZhenfaInfo, syncDict) return def OnMapServerInitOK(): SyncMap_AllFamilyZhenfaInfo() return