From 3bc2e9aae7e595d5be896a9db4c909b76fa6f5be Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期五, 11 七月 2025 14:16:29 +0800 Subject: [PATCH] 0312 物品叠加数量支持配置DWORD --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py | 87 +++++++++++++++++++++++++++---------------- 1 files changed, 54 insertions(+), 33 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py index 8de3a0d..73211db 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py @@ -56,6 +56,7 @@ import PyGameData import urllib import md5 +import uuid #--------------------------------------------------------------------- #设置允许的最大迭代数目, 默认1000 #在NPCAI中, 可能超过1000, 所以要设定为2000 @@ -506,6 +507,8 @@ # @return 返回值. 是否通过检查 # @remarks 概率相关, 这个事件是否能够出现 def CanHappen(rate, maxRate=ShareDefine.Def_MaxRateValue): + if rate <= 0: + return 0 if random.randint(0, maxRate -1) < rate: return 1 @@ -607,8 +610,6 @@ if not curPlayer or curPlayer.GetID() == 0 or curPlayer.IsEmpty(): return False #if not curPlayer.GetInitOK(): - # return False - #if IsTJGPlayer(curPlayer): # return False if IsMirrorPlayer(curPlayer): return False @@ -864,6 +865,8 @@ # @return 返回值. 时间Data格式 # @remarks 获得服务器系统时间 def GetCurrentTime(): + return datetime.datetime.today() +def GetServerTime(): return datetime.datetime.today() # ctime = GetGameWorld().GetGameServerEventTime() # @@ -1159,9 +1162,6 @@ if npcObj == IPY_GameWorld.gnotSummon: return GetNPCManager().FindSummonNPCByID(curTagNPC.GetID()) - elif npcObj == IPY_GameWorld.gnotTruck: - return GetNPCManager().FindTruckByID(curTagNPC.GetID()) - elif npcObj == IPY_GameWorld.gnotPet: return GetNPCManager().FindPetByID(curTagNPC.GetID()) @@ -1321,7 +1321,7 @@ ## 获取服务器ID所属主服ID ServerIDMainServerDict = IpyGameDataPY.GetConfigEx("ServerIDMainServerDict") if ServerIDMainServerDict == None: - filePath = ChConfig.GetDBPath() + ("\\MixServerMap_%s.json" % GetPlatform()) + filePath = ChConfig.GetServerConfigPath() + ("\\MixServerMap_%s.json" % GetPlatform()) if not os.path.isfile(filePath): SendGameErrorEx("GetMainServerIDError", "file can not found. %s" % filePath) else: @@ -1358,6 +1358,8 @@ def GetPlatform(): return ReadChConfig.GetPyMongoConfig("platform", "PlatformName") +def IsTestPlatform(platform): return platform in ["test", "yun"] + #=============================================================================== # ##获得当前服务器ID # # @param 无 @@ -1384,8 +1386,8 @@ ##获取玩家所属区服ID # @param curPlayer # @return -def GetPlayerServerID(curPlayer): - accID = curPlayer.GetAccID() +def GetPlayerServerID(curPlayer): return GetAccIDServerID(curPlayer.GetAccID()) +def GetAccIDServerID(accID): infoList = accID.split(Def_AccID_Split_Sign) return 0 if len(infoList) < 3 else ToIntDef(infoList[-1][1:]) @@ -1403,6 +1405,9 @@ return mainServerID return 0 +def GetDBPlayerAccIDByID(playerID): + ## 获取玩家表账号ID - 根据玩家ID, 可用于判断是否本服玩家 + return PyGameData.g_dbPlayerIDMap.get(playerID, "") #=============================================================================== # 平台ID = appid @@ -1474,6 +1479,8 @@ ChannelCodeDict = ReadChConfig.GetEvalChConfig("ChannelCode") return ChannelCodeDict.get(codeNum, "") + +def GetGUID(): return str(uuid.uuid1()) #--------------------------------------------------------------------- ##大额度金钱记录 @@ -1879,18 +1886,12 @@ # @param inputText 输入的文字 # @return: 是否符合编码格式 def EncodingToUnicode(inputText): - encodingList = ReadChConfig.GetEvalChConfig("EncodingTex") - - if len(encodingList) != 2: - ErrLog("EncodingTex.txt Error len != 2") - return False - - if encodingList[0]: + if IpyGameDataPY.GetFuncCfg("EncodingTex", 1): #不檢查 return True try: - unicode(inputText, encodingList[1]) + unicode(inputText, IpyGameDataPY.GetFuncCfg("EncodingTex", 2)) except: return False @@ -1898,25 +1899,20 @@ # 获得游戏设置的字符编码 -def GetCharacterEncoding(): - encodingList = ReadChConfig.GetEvalChConfig("EncodingTex") - - if len(encodingList) != 2: - ErrLog("EncodingTex.txt Error len != 2") - return 'utf8' - return encodingList[1] - +def GetCharacterEncoding(): return IpyGameDataPY.GetFuncCfg("EncodingTex", 2) # 服务器默认GBK,转配置编码如UTF8,一般用于与显示层交互,不判断是否base64 def GbkToCode(inputText): - encodingList = ReadChConfig.GetEvalChConfig("EncodingTex") - - if len(encodingList) != 2: - ErrLog("EncodingTex.txt Error len != 2") - return inputText - try: return inputText.decode(ShareDefine.Def_Game_Character_Encoding).encode(GetCharacterEncoding()) + except: + return inputText + + return inputText + +def CodeToGbk(inputText): + try: + return inputText.decode(GetCharacterEncoding()).encode(ShareDefine.Def_Game_Character_Encoding) except: return inputText @@ -2109,6 +2105,32 @@ numValue += pow(10, dataIndex)*(dataValue - lastTagLV) return numValue +def GetValue(dataValue, fromRight, bits): + '''获取某个数值中,从右往左数第x位开始,截图n位得到的数据 + @param dataValue: 原始数值 + @param fromRight: 从右往左数第x位开始,从1开始 + @param bits: 截取n位 + @return: 数值value + ''' + lPow = pow(10, fromRight) + rPow = pow(10, fromRight - bits) + curValue = dataValue % lPow / rPow + return curValue + +def SetValue(dataValue, fromRight, bits, updValue): + '''修改某个数值,从右往左数第x位开始,截图n位得到的数据,替换为具体数值 + @param dataValue: 原始数值 + @param fromRight: 从右往左数第x位开始,从1开始 + @param bits: 截取n位 + @param updValue: 替换值 + @return: 修改后的value值 + ''' + lPow = pow(10, fromRight) + rPow = pow(10, fromRight - bits) + leftValue = dataValue / lPow * lPow + rightValue = dataValue % rPow + return leftValue + updValue * rPow + rightValue + def GetBitValue(dataValue, index): """ 得到某个字节值中某一位(Bit)的值 @param dataValue: 待取值的字节值 @@ -2376,7 +2398,7 @@ # return #=========================================================================== - DebugLog(text) + DebugLog(text, curPlayer.GetPlayerID()) text = text.decode(ShareDefine.Def_Game_Character_Encoding).encode(GetCharacterEncoding()) curPlayer.DebugAnswer(text) return @@ -2392,10 +2414,9 @@ def SendGameErrorEx(errType, msgInfo="", playerID=0): ErrLog("SendGameErrorEx: %s -> %s" % (errType, msgInfo), playerID) + SendGameError(errType, msgInfo) if GetGameWorld().GetDebugLevel(): raise Exception("%s -> %s" % (errType, msgInfo)) - else: - SendGameError(errType, msgInfo) return def SendGameError(errType, msgInfo=""): -- Gitblit v1.8.0