#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerPreset # # @todo:Á÷ÅÉÔ¤Éè # @author hxp # @date 2026-01-16 # @version 1.0 # # ÏêϸÃèÊö: Á÷ÅÉÔ¤Éè # #------------------------------------------------------------------------------- #"""Version = 2026-01-16 20:00""" #------------------------------------------------------------------------------- import DBDataMgr import ShareDefine import PlayerControl import IpyGameDataPY import ChPyNetSendPack import IPY_GameWorld import NetPackCommon import PlayerOnline import GameWorld import ChConfig PresetKey_Name = "Name" # Ô¤ÉèÃüÃûÐÅÏ¢ {"funcPresetType":{"presetID":Ãû×Ö, ...}, ...} def GetPresetRecDict(playerID, isAddNew=False): ## »ñȡԤÉè¼Ç¼´æ´¢µÄ×Öµä gameRecMgr = DBDataMgr.GetGameRecMgr() preSetRecMgr = gameRecMgr.GetRecTypeIDMgr(ShareDefine.Def_GameRecType_BatPreset, playerID) recData = preSetRecMgr.GetOneRecData(isAddNew) if not recData: return {} return recData.GetUserDict() def OnPlayerLogin(curPlayer): # ¼ì²éÔ¤ÉèĬÈϽâËø Sync_FuncPresetInfo(curPlayer) Sync_FuncPresetSwitchInfo(curPlayer) Sync_BatPresetSwitchInfo(curPlayer) return def GetFuncPresetIDState(curPlayer, presetID, funcPresetType=ShareDefine.FuncPreset_Battle): ## »ñÈ¡¹¦ÄÜÔ¤ÉèIDÊÇ·ñ¿ÉÓà # @param presetID: Ô¤ÉèID # @param funcPresetType: Ô¤ÉèÀàÐÍ presetState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PresetState % funcPresetType) if presetState & pow(2, presetID): return True ipyDataList = IpyGameDataPY.GetIpyGameDataList("PresetUnlock", funcPresetType) if not ipyDataList: return if presetID > len(ipyDataList): return ipyData = ipyDataList[presetID - 1] if ipyData.GetUnlockType(): # ·ÇĬÈϽâËøµÄ return presetState |= pow(2, presetID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PresetState % funcPresetType, presetState) return True #// B2 60 ¹¦ÄÜÔ¤Éè½âËø #tagCSFuncPresetUnlock # #struct tagCSFuncPresetUnlock #{ # tagHead Head; # BYTE FuncPresetType; //Ô¤ÉèÀàÐÍ£¬1-È«¾Ö£»2-ÕóÈÝ£»3-Ãü¸ñ£» # BYTE PresetID; //Ô¤ÉèID #}; def OnFuncPresetUnlock(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) funcPresetType = clientData.FuncPresetType presetID = clientData.PresetID if GetFuncPresetIDState(curPlayer, presetID, funcPresetType): GameWorld.DebugLog("¸ÃÔ¤ÉèÒѽâËø! funcPresetType=%s,presetID=%s" % (funcPresetType, presetID)) return ipyDataList = IpyGameDataPY.GetIpyGameDataList("PresetUnlock", funcPresetType) if not ipyDataList: return if presetID > len(ipyDataList): GameWorld.DebugLog("¸ÃÔ¤Éè²»´æÔÚ! funcPresetType=%s,presetID=%s" % (funcPresetType, presetID)) return ipyData = ipyDataList[presetID - 1] unlockType = ipyData.GetUnlockType() unlockValue = ipyData.GetUnlockValue() # Ôª±¦½âËø if unlockType == 1: needGold = unlockValue infoDict = {"funcPresetType":funcPresetType, "presetID":presetID} if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold, "FuncPresetUnlock", infoDict): return else: return presetState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PresetState % funcPresetType) presetState |= pow(2, presetID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PresetState % funcPresetType, presetState) GameWorld.DebugLog("¹¦ÄÜÔ¤Éè½âËø: funcPresetType=%s,presetID=%s,presetState=%s" % (funcPresetType, presetID, presetState)) Sync_FuncPresetInfo(curPlayer, funcPresetType, presetID) # È«¾ÖÔ¤Éèпª·½°¸£¬³õʼ»¯Ô¤ÉèĬÈÏ£¬Ö±½ÓʹÓÃÖ÷ÏßÔ¤É追±´ # ×Ó¹¦Äܵķ½°¸½âËøÔݲ»´¦Àí£¬ÓÉÍæ¼ÒÊÖ¶¯±à¼­ if funcPresetType == ShareDefine.FuncPreset_Battle: mainBatPresetID = GetBatPresetID(curPlayer, ShareDefine.BatPreset_Main) GameWorld.DebugLog("ÐÂÔöÈ«¾ÖÔ¤ÉèÖ±½ÓʹÓÃÖ÷ÏßÔ¤É追±´×Ó¹¦ÄÜÔ¤Éè! mainBatPresetID=%s" % mainBatPresetID) for funcPresetType in ShareDefine.FuncPresetList: if funcPresetType == ShareDefine.FuncPreset_Battle: continue funcPresetID = GetFuncPresetID(curPlayer, mainBatPresetID, funcPresetType) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PresetFuncID % (presetID, funcPresetType), funcPresetID) GameWorld.DebugLog(" funcPresetType=%s,funcPresetID=%s" % (funcPresetType, funcPresetID)) Sync_FuncPresetSwitchInfo(curPlayer, presetID) return #// B2 61 ¹¦ÄÜÔ¤Éè¸ÄÃû #tagCSFuncPresetUpdName # #struct tagCSFuncPresetUpdName #{ # tagHead Head; # BYTE FuncPresetType; //Ô¤ÉèÀàÐÍ£¬1-È«¾Ö£»2-ÕóÈÝ£»3-Ãü¸ñ£» # BYTE PresetID; //Ô¤ÉèID # BYTE NameLen; # char PresetName[NameLen]; //Ô¤ÉèÃû³Æ #}; def OnFuncPresetUpdName(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerID = curPlayer.GetPlayerID() funcPresetType = clientData.FuncPresetType presetID = clientData.PresetID presetName = clientData.PresetName if not GetFuncPresetIDState(curPlayer, presetID, funcPresetType): return # ¸üÐÂÃû³Æ {"funcPresetType":{"presetID":Ãû×Ö, ...}, ...} userDict = GetPresetRecDict(playerID, True) if PresetKey_Name not in userDict: userDict[PresetKey_Name] = {} presetNameDict = userDict[PresetKey_Name] if str(funcPresetType) not in presetNameDict: presetNameDict[str(funcPresetType)] = {} funcPresetNameDict = presetNameDict[str(funcPresetType)] funcPresetNameDict[str(presetID)] = presetName Sync_FuncPresetInfo(curPlayer, funcPresetType, presetID) return #// B2 62 ¹¦ÄÜÔ¤ÉèÇл» #tagCSFuncPresetSwitch # #struct tagCSFuncPresetSwitch #{ # tagHead Head; # BYTE BatPresetID; //ËùÊôÕ½¶·Ô¤ÉèID # BYTE FuncPresetType; //Ô¤ÉèÀàÐÍ£¬2-ÕóÈÝ£»3-Ãü¸ñ£» # BYTE PresetID; //±¾¹¦ÄÜÇл»ÖÁÄ¿±êÔ¤ÉèID #}; def OnFuncPresetSwitch(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) batPresetID = clientData.BatPresetID funcPresetType = clientData.FuncPresetType funcPresetID = clientData.PresetID if funcPresetType == ShareDefine.FuncPreset_Battle: GameWorld.DebugLog("È«¾ÖÕ½¶·Ô¤Éè²»ÔÚ´ËÐ޸ģ¬ÇëʹÓÃB263·â°üÐÞ¸ÄÈ«¾ÖÔ¤Éè·½°¸! funcPresetType=%s" % (funcPresetType)) return if not GetFuncPresetIDState(curPlayer, batPresetID): GameWorld.DebugLog("È«¾ÖÔ¤Éèδ½âËø! batPresetID=%s" % batPresetID) return if not GetFuncPresetIDState(curPlayer, funcPresetID, funcPresetType): GameWorld.DebugLog("¹¦ÄÜÔ¤Éèδ½âËø! funcPresetID=%s,funcPresetType=%s" % (funcPresetID, funcPresetType)) return if GetFuncPresetID(curPlayer, batPresetID, funcPresetType) == funcPresetID: GameWorld.DebugLog("¹¦ÄÜÔ¤Éè²»±ä²»´¦Àí! batPresetID=%s,funcPresetType=%s,funcPresetID=%s" % (batPresetID, funcPresetType, funcPresetID)) return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PresetFuncID % (batPresetID, funcPresetType), funcPresetID) GameWorld.DebugLog("¹¦ÄÜÔ¤Éè·½°¸Çл»: batPresetID=%s,funcPresetType=%s,funcPresetID=%s" % (batPresetID, funcPresetType, funcPresetID)) # Ë¢ÊôÐÔ PlayerOnline.GetOnlinePlayer(curPlayer).RefreshBatPreset(batPresetID) Sync_FuncPresetSwitchInfo(curPlayer, batPresetID, funcPresetType) return #// B2 63 Õ½¶·Ô¤ÉèÇл» #tagCSBatPresetSwitch # #struct tagCSBatPresetSwitch #{ # tagHead Head; # BYTE BatPresetType; //Õ½¶·Ô¤ÉèÀàÐÍ£º1-Ö÷ÏßÕ½¶·£»2-ÑÝÎ䳡·ÀÊØ£» # BYTE BatPresetID; //Çл»ÖÁÄ¿±êÕ½¶·Ô¤ÉèID #}; def OnBatPresetSwitch(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) batPresetType = clientData.BatPresetType batPresetID = clientData.BatPresetID if batPresetType not in ShareDefine.BatPresetList: return if not GetFuncPresetIDState(curPlayer, batPresetID): GameWorld.DebugLog("È«¾ÖÕ½¶·Ô¤Éèδ½âËø! batPresetID=%s" % batPresetID) return if GetBatPresetID(curPlayer, batPresetType) == batPresetID: GameWorld.DebugLog("È«¾ÖÕ½¶·Ô¤Éè²»±ä²»´¦Àí! batPresetType=%s,batPresetID=%s" % (batPresetType, batPresetID)) return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PresetBatID % batPresetType, batPresetID) GameWorld.DebugLog("È«¾ÖÕ½¶·Ô¤Éè·½°¸Çл»: batPresetType=%s,batPresetID=%s" % (batPresetType, batPresetID)) # Ë¢ÊôÐÔ PlayerOnline.GetOnlinePlayer(curPlayer).RefreshBatPreset(batPresetID) Sync_BatPresetSwitchInfo(curPlayer, batPresetType) return def GetBatPresetID(curPlayer, batPresetType): ## »ñȡս¶·¹¦Äܵ±Ç°Ê¹ÓÃÖеÄÕ½¶·Ô¤Éè·½°¸£¬Ä¬ÈÏ1 return max(1, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PresetBatID % batPresetType)) def GetFuncPresetID(curPlayer, batPresetID, funcPresetType): ## »ñȡij¸öÕ½¶·Ô¤Éè·½°¸ÏÂij¸ö¹¦ÄÜʹÓõÄÔ¤ÉèID£¬Ä¬ÈÏ1 return max(1, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PresetFuncID % (batPresetID, funcPresetType))) def Sync_FuncPresetInfo(curPlayer, funcPresetType=None, presetID=None): if funcPresetType == None: presetTypeList = ShareDefine.FuncPresetList else: presetTypeList = [funcPresetType] funcPresetList = [] for presetType in presetTypeList: funcPresetInfo = ChPyNetSendPack.tagSCFuncPresetInfo() funcPresetInfo.FuncPresetType = presetType presetIDList = [] if funcPresetType == None and presetID == None: ipyDataList = IpyGameDataPY.GetIpyGameDataList("PresetUnlock", presetType) presetIDList = range(1, 1 + len(ipyDataList)) if ipyDataList else [] elif presetID != None: presetIDList = [presetID] presetNameDict = {} if presetIDList: userDict = GetPresetRecDict(curPlayer.GetPlayerID()) presetNameDict = userDict.get(PresetKey_Name, {}) funcPresetInfo.PresetList = [] for psID in presetIDList: if presetID == None and not GetFuncPresetIDState(curPlayer, psID, presetType): continue preset = ChPyNetSendPack.tagSCFuncPreset() preset.PresetID = psID preset.PresetName = presetNameDict.get(str(presetType), {}).get(str(psID), "") preset.NameLen = len(preset.PresetName) funcPresetInfo.PresetList.append(preset) funcPresetInfo.PresetCnt = len(funcPresetInfo.PresetList) funcPresetInfo.UnlockState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PresetState % presetType) funcPresetList.append(funcPresetInfo) if not funcPresetList: return clientPack = ChPyNetSendPack.tagSCFuncPresetInfoList() clientPack.FuncPresetList = funcPresetList clientPack.FuncCnt = len(clientPack.FuncPresetList) NetPackCommon.SendFakePack(curPlayer, clientPack) return def Sync_FuncPresetSwitchInfo(curPlayer, batPresetID=None, funcPresetType=None): if batPresetID == None: ipyDataList = IpyGameDataPY.GetIpyGameDataList("PresetUnlock", ShareDefine.FuncPreset_Battle) batPresetIDList = range(1, 1 + len(ipyDataList)) if ipyDataList else [] else: batPresetIDList = [batPresetID] batPresetList = [] for batPresetID in batPresetIDList: if not GetFuncPresetIDState(curPlayer, batPresetID): continue batPreset = ChPyNetSendPack.tagSCFuncPresetBat() batPreset.BatPresetID = batPresetID batPreset.FuncPresetList = [] for funcType in ShareDefine.FuncPresetList: if funcType == ShareDefine.FuncPreset_Battle: continue if funcPresetType and funcPresetType != funcType: continue funcPreset = ChPyNetSendPack.tagSCFuncPresetFunc() funcPreset.FuncPresetType = funcType funcPreset.FuncPresetID = GetFuncPresetID(curPlayer, batPresetID, funcType) batPreset.FuncPresetList.append(funcPreset) batPreset.FuncCnt = len(batPreset.FuncPresetList) batPresetList.append(batPreset) if not batPresetList: return clientPack = ChPyNetSendPack.tagSCFuncPresetSwitchInfo() clientPack.BatPresetList = batPresetList clientPack.BatPresetCnt = len(clientPack.BatPresetList) NetPackCommon.SendFakePack(curPlayer, clientPack) return def Sync_BatPresetSwitchInfo(curPlayer, batPresetType=None): if not batPresetType: batPresetTypeList = ShareDefine.BatPresetList else: batPresetTypeList = [batPresetType] batPresetList = [] for batPresetType in batPresetTypeList: batPreset = ChPyNetSendPack.tagSCBatPresetSwitch() batPreset.BatPresetType = batPresetType batPreset.BatPresetID = GetBatPresetID(curPlayer, batPresetType) batPresetList.append(batPreset) if not batPresetList: return clientPack = ChPyNetSendPack.tagSCBatPresetSwitchInfo() clientPack.BatPresetList = batPresetList clientPack.BatFuncCnt = len(clientPack.BatPresetList) NetPackCommon.SendFakePack(curPlayer, clientPack) return