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
@@ -122,6 +123,10 @@
    #重新加载已经预存的脚本
    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
@@ -506,7 +511,9 @@
# @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
@@ -607,8 +614,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
@@ -865,6 +870,8 @@
# @remarks 获得服务器系统时间
def GetCurrentTime():
    return datetime.datetime.today()
def GetServerTime():
    return datetime.datetime.today()
#    ctime = GetGameWorld().GetGameServerEventTime()
#    
#    if not ctime:
@@ -970,6 +977,16 @@
    dateTimeB = ChangeTimeNumToDatetime(timeB)
    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格式数据
@@ -1159,9 +1176,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 +1335,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:
@@ -1357,6 +1371,8 @@
# @return
def GetPlatform():
    return ReadChConfig.GetPyMongoConfig("platform", "PlatformName")
def IsTestPlatform(platform): return platform in ["test", "yun"]
#===============================================================================
# ##获得当前服务器ID
@@ -1403,6 +1419,9 @@
        return mainServerID
    return 0
def GetDBPlayerAccIDByID(playerID):
    ## 获取玩家表账号ID - 根据玩家ID, 可用于判断是否本服玩家
    return PyGameData.g_dbPlayerIDMap.get(playerID, "")
#===============================================================================
# ƽ̨ID = appid
@@ -1430,6 +1449,10 @@
    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()
@@ -1474,6 +1497,8 @@
    
    ChannelCodeDict = ReadChConfig.GetEvalChConfig("ChannelCode")
    return ChannelCodeDict.get(codeNum, "")
def GetGUID(): return str(uuid.uuid1())
#---------------------------------------------------------------------
##大额度金钱记录
@@ -1724,6 +1749,8 @@
    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:
@@ -1925,7 +1952,7 @@
    ## 跨服服务器时间
    if IsCrossServer():
        return GetCurrentDataTimeStr()
    lastCrossServerTime, lastServerTime, _ = PyGameData.g_crossServerTimeInfo
    lastCrossServerTime, lastServerTime = PyGameData.g_crossServerTimeInfo
    if not lastCrossServerTime:
        return GetCurrentDataTimeStr()
    curTime = int(time.time())
@@ -2098,6 +2125,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: 待取值的字节值
@@ -2365,7 +2418,7 @@
    #    return
    #===========================================================================
    
    DebugLog(text)
    DebugLog(text, curPlayer.GetPlayerID())
    text = text.decode(ShareDefine.Def_Game_Character_Encoding).encode(GetCharacterEncoding())
    curPlayer.DebugAnswer(text)
    return
@@ -2381,10 +2434,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=""):