| | |
| | | #重新加载已经预存的脚本
|
| | | for name, reloadPath in sys.modules.items():
|
| | | try:
|
| | | pathStr = str(reloadPath)
|
| | | if "\\Lib\\" in pathStr or "\\DLLs\\" in pathStr:
|
| | | #DebugLog("Py库脚本不重读,会引起类继承出现问题导致报错! %s, %s" % (name, reloadPath))
|
| | | continue
|
| | | if name in ["PyGameData"]:
|
| | | DebugLog("%s 模块不重读!" % name)
|
| | | continue
|
| | |
| | | # @return 返回值. 是否通过检查
|
| | | # @remarks 概率相关, 这个事件是否能够出现
|
| | | def CanHappen(rate, maxRate=ShareDefine.Def_MaxRateValue):
|
| | | if random.randint(0, maxRate -1) < rate:
|
| | | if rate <= 0:
|
| | | return 0
|
| | | if rate >= maxRate or random.randint(0, maxRate -1) < rate:
|
| | | return 1
|
| | |
|
| | | return 0
|
| | |
| | | dateTimeB = datetime.datetime(dateTimeB.year, dateTimeB.month, dateTimeB.day, 0, 0, 0)
|
| | | return (dateTimeA - dateTimeB).days
|
| | |
|
| | | def GetEndTimeByZeroTime(startTime, addDays):
|
| | | ## 获取结束时间,根据0点结束计算
|
| | | # @param startTime: 起始时间戳
|
| | | # @param addDays: 增加的天数,如果是1天实际为当天,即1代表当天
|
| | | startDate = ChangeTimeNumToDatetime(startTime)
|
| | | startZeroDate = datetime.datetime(startDate.year, startDate.month, startDate.day, 23, 59, 59)
|
| | | startZeroTime = int(time.mktime(startZeroDate.timetuple()))
|
| | | endTime = startTime + (startZeroTime - startTime) + max(addDays - 1, 0) * 24 * 3600
|
| | | return endTime
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | ##获取与当前时间相差天数的datetime格式数据
|
| | | # @param diffDays 差距天数
|
| | |
| | | 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())
|
| | |
|
| | |
| | | LogUI.Msg('%s\t%s\tPyDebug:%s'%(par, playerID, msg))
|
| | | return
|
| | |
|
| | | def DebugLogEx(logFormat, *args):
|
| | | ## DEBUG调试输出信息,只传入日志格式跟参数,非debug下不进行日志内容格式化
|
| | | # @param logFormat: 日志内容格式,也可以直接传入完整的日志内容
|
| | | # @param args: 日志参数,最后一个参数可以多传一个参数作为playerID用
|
| | | if not __GameWorld.GetDebugLevel():
|
| | | return
|
| | | par = 0
|
| | | playerID = 0
|
| | | try:
|
| | | msg = logFormat % args
|
| | | except:
|
| | | msg = logFormat % args[:-1]
|
| | | playerID = args[-1]
|
| | | LogUI.Msg('%s\t%s\tPyDebug:%s'%(par, playerID, msg))
|
| | | return
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | ##获得当前服务器跨服ID
|
| | | # @param 无
|
| | |
| | | def GetPlatform():
|
| | | return ReadChConfig.GetPyMongoConfig("platform", "PlatformName")
|
| | |
|
| | | def IsTestPlatform(platform): return platform in ["test", "yun"]
|
| | |
|
| | | #===============================================================================
|
| | | # ##获得当前服务器ID
|
| | | # # @param 无
|
| | |
| | |
|
| | | ##获取玩家所属平台
|
| | | def GetPlayerPlatform(curPlayer):
|
| | | return curPlayer.GetAccountData().GetOperator()
|
| | | appID = curPlayer.GetAccountData().GetOperator()
|
| | | if not appID:
|
| | | appID = GetAppIDByAccID(curPlayer.GetAccID())
|
| | | return appID
|
| | |
|
| | | ##获取平台账号
|
| | | def GetPlatformAccID(gameAccID):
|
| | |
| | | paInfoList = infoList[:-2]
|
| | | platformAccID = Def_AccID_Split_Sign.join(paInfoList)
|
| | | return platformAccID
|
| | | def GetAppIDByAccID(gameAccID):
|
| | | ## 根据账号获取appID
|
| | | infoList = gameAccID.split(Def_AccID_Split_Sign)
|
| | | return infoList[-2]
|
| | |
|
| | | def GetSessionID(curPlayer):
|
| | | return md5.md5(curPlayer.GetAccID() + curPlayer.GetAccountData().GetLastLoginTime() +'mobile').hexdigest()
|
| | |
| | | randList = []
|
| | | weight = 0
|
| | | for info in weightList:
|
| | | if not info[0]:
|
| | | continue
|
| | | weight += info[0]
|
| | | randList.append([weight, info[1] if len(info) == 2 else info[1:]])
|
| | | if not randList:
|
| | |
| | | ## 跨服服务器时间
|
| | | if IsCrossServer():
|
| | | return GetCurrentDataTimeStr()
|
| | | lastCrossServerTime, lastServerTime, _ = PyGameData.g_crossServerTimeInfo
|
| | | lastCrossServerTime, lastServerTime = PyGameData.g_crossServerTimeInfo
|
| | | if not lastCrossServerTime:
|
| | | return GetCurrentDataTimeStr()
|
| | | curTime = int(time.time())
|
| | |
| | | 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: 待取值的字节值
|
| | |
| | | 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))
|
| | | if GetGameWorld().GetDebugLevel():
|
| | | raise Exception("%s -> %s" % (errType, msgInfo))
|
| | | return
|
| | |
|
| | | def SendGameError(errType, msgInfo=""):
|