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