| #!/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 |