| | |
| | | import PyGameData
|
| | | import urllib
|
| | | import md5
|
| | | import uuid
|
| | | #---------------------------------------------------------------------
|
| | | #设置允许的最大迭代数目, 默认1000
|
| | | #在NPCAI中, 可能超过1000, 所以要设定为2000
|
| | |
| | | # @return 返回值. 是否通过检查
|
| | | # @remarks 概率相关, 这个事件是否能够出现
|
| | | def CanHappen(rate, maxRate=ShareDefine.Def_MaxRateValue):
|
| | | if rate <= 0:
|
| | | return 0
|
| | | if random.randint(0, maxRate -1) < rate:
|
| | | return 1
|
| | |
|
| | |
| | | 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
|
| | |
| | | # @return 返回值. 时间Data格式
|
| | | # @remarks 获得服务器系统时间
|
| | | def GetCurrentTime():
|
| | | return datetime.datetime.today()
|
| | | def GetServerTime():
|
| | | return datetime.datetime.today()
|
| | | # ctime = GetGameWorld().GetGameServerEventTime()
|
| | | #
|
| | |
| | | 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())
|
| | |
|
| | |
| | | ## 获取服务器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:
|
| | |
| | | def GetPlatform():
|
| | | return ReadChConfig.GetPyMongoConfig("platform", "PlatformName")
|
| | |
|
| | | def IsTestPlatform(platform): return platform in ["test", "yun"]
|
| | |
|
| | | #===============================================================================
|
| | | # ##获得当前服务器ID
|
| | | # # @param 无
|
| | |
| | | ##获取玩家所属区服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:])
|
| | |
|
| | |
| | | return mainServerID
|
| | | return 0
|
| | |
|
| | | def GetDBPlayerAccIDByID(playerID):
|
| | | ## 获取玩家表账号ID - 根据玩家ID, 可用于判断是否本服玩家
|
| | | return PyGameData.g_dbPlayerIDMap.get(playerID, "")
|
| | |
|
| | | #===============================================================================
|
| | | # ƽ̨ID = appid
|
| | |
| | |
|
| | | ChannelCodeDict = ReadChConfig.GetEvalChConfig("ChannelCode")
|
| | | return ChannelCodeDict.get(codeNum, "")
|
| | |
|
| | | def GetGUID(): return str(uuid.uuid1())
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | ##大额度金钱记录
|
| | |
| | | # @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
|
| | |
|
| | |
| | |
|
| | |
|
| | | # 获得游戏设置的字符编码
|
| | | 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
|
| | |
|
| | |
| | | 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: 待取值的字节值
|
| | |
| | | # return
|
| | | #===========================================================================
|
| | |
|
| | | DebugLog(text)
|
| | | DebugLog(text, curPlayer.GetPlayerID())
|
| | | text = text.decode(ShareDefine.Def_Game_Character_Encoding).encode(GetCharacterEncoding())
|
| | | curPlayer.DebugAnswer(text)
|
| | | return
|
| | |
| | |
|
| | | 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=""):
|