From a1f053eb420898b323a18b9e260aaec34af2992a Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期日, 08 十月 2023 14:49:30 +0800 Subject: [PATCH] 9896 【BT0.1】【主干】坐骑、灵宠、称号升星 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py | 98 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 97 insertions(+), 1 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py index 8348670..7643d37 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py @@ -28,6 +28,9 @@ import CrossPlayerData import GameFuncComm import ShareDefine +import ChPyNetSendPack +import NetPackCommon +import ItemCommon import time #------------------------------------------------------------- @@ -136,6 +139,10 @@ CrossPlayerData.OnDienstgradChange(curPlayer, dienstgradID, 1) if dienstgradID == IpyGameDataPY.GetFuncCfg("TitleAddPoint"): __DoTitleAddPoint(curPlayer) + + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TitleStar % dienstgradID, 1) + SyncTitleStarInfo(curPlayer, dienstgradID) + #重新刷新角色属性 if isRefreshAttr: CalcAllDienstgradAttr(curPlayer) @@ -393,6 +400,8 @@ curDienstgradMgr = curPlayer.GetDienstgradManager() curDienstgradMgr.Sync_AllDienstgrad() curDienstgradMgr.Notify_PlayerChangeDienstgrad(curDienstgradMgr.GetCurGradID()) + SyncTitleStarInfo(curPlayer) + return #=============================================================================== # //B2 01 使用称号(有属性不显示场景中) #tagPyCMUseDienstgrad @@ -447,6 +456,47 @@ FitOnDienstgrad(index, curGradID) else: TakeOffDienstgrad(index) + +#// A5 36 称号升星 #tagCMTitleStarUp +# +#struct tagCMTitleStarUp +#{ +# tagHead Head; +# DWORD TitleID; //称号ID +#}; +def OnTitleStarUp(index, clientData, tick): + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + playerID = curPlayer.GetPlayerID() + titleID = clientData.TitleID + + curStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TitleStar % titleID) + ipyData = IpyGameDataPY.GetIpyGameData("TitleStarUp", titleID, curStar) + if not ipyData: + return + nextStar = curStar + 1 + nextIpyData = IpyGameDataPY.GetIpyGameData("TitleStarUp", titleID, nextStar) + needItemList = ipyData.GetStarUpNeedItemList() + if not needItemList or not nextIpyData: + GameWorld.DebugLog("称号已满星,无法升星. titleID=%s,curStar=%s" % (titleID, curStar), playerID) + return + itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) + lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack) + if lackItemDict: + GameWorld.DebugLog("称号升星所需物品不足! titleID=%s,curStar=%s,needItemList=%s,lackItemDict=%s" + % (titleID, curStar, needItemList, lackItemDict), playerID) + return + + ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "TitleStarUp") + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TitleStar % titleID, nextStar) + + GameWorld.DebugLog("称号升星. titleID=%s,curStar=%s,nextStar=%s" % (titleID, curStar, nextStar), playerID) + + CalcAllDienstgradAttr(curPlayer) + playerControl = PlayerControl.PlayerControl(curPlayer) + playerControl.RefreshPlayerAttrState() + + SyncTitleStarInfo(curPlayer, titleID) + return #------------------------------------------------------------- ## 获取已激活称号列表 @@ -481,6 +531,8 @@ def CalcAllDienstgradAttr(curPlayer): # 计算全部称号属性 allAttrList = [{} for i in range(4)] + allAttrListStar = [{} for _ in range(4)] + dienstgradManager = curPlayer.GetDienstgradManager() gradCnt = dienstgradManager.GetCount() for i in xrange(gradCnt): @@ -497,8 +549,18 @@ for i, attrID in enumerate(attrTypeList): PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList) + curStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TitleStar % curGradID) + starIpyData = IpyGameDataPY.GetIpyGameData("TitleStarUp", curGradID, curStar) + if starIpyData: + starAttrType = starIpyData.GetStarAttrType() + starAttrValue = starIpyData.GetStarAttrValue() + for i, attrID in enumerate(starAttrType): + attrValue = starAttrValue[i] + PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar) + # 保存计算值 PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Dienstgrad, allAttrList) + PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_TitleStar, allAttrListStar) return ## 称号每日更新处理 @@ -565,4 +627,38 @@ for dienstgradID in dienstgradIDList: PlayerAddDienstgrad(curPlayer, dienstgradID) #PlayerFitOnDienstgrad(curPlayer, dienstgradID) - return \ No newline at end of file + return + +def SyncTitleStarInfo(curPlayer, titleID=None): + if titleID > 0: + syncIDList = [titleID] + else: + syncIDList = [] + ipyDataMgr = IpyGameDataPY.IPY_Data() + for index in range(ipyDataMgr.GetDienstgradCount()): + ipyData = ipyDataMgr.GetDienstgradByIndex(index) + syncIDList.append(ipyData.GetID()) + + if not syncIDList: + return + + titleStarList = [] + for titleID in syncIDList: + curStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TitleStar % titleID) + if not curStar: + continue + starInfo = ChPyNetSendPack.tagMCTitleStar() + starInfo.Clear() + starInfo.TitleID = titleID + starInfo.Star = curStar + titleStarList.append(starInfo) + + if not titleStarList: + return + + clientPack = ChPyNetSendPack.tagMCTitleStarInfo() + clientPack.Clear() + clientPack.TitleStarList = titleStarList + clientPack.Count = len(clientPack.TitleStarList) + NetPackCommon.SendFakePack(curPlayer, clientPack) + return -- Gitblit v1.8.0