From acebf38b40565a700efeecddb2e3f6e2b2e183a6 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 13 十二月 2025 16:28:44 +0800
Subject: [PATCH] 389 流向记录(增加GM工具命令:重读配置 GMT_ReloadConfig)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py | 88 +++++++++++++++++++++++++++++++++++++++-----
1 files changed, 78 insertions(+), 10 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
index 0128901..ea5120e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
@@ -123,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
@@ -507,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
@@ -608,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
@@ -974,6 +978,16 @@
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 差距天数
@@ -1162,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())
@@ -1282,6 +1293,22 @@
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 无
@@ -1315,6 +1342,10 @@
# @remarks 获得当前服务器的版本号
def GetServerVersion():
return GetGameWorld().GetServerVersion()
+
+def IsBattleServer():
+ ## 是否战斗服务器
+ return ToIntDef(ReadChConfig.GetPyMongoConfig("platform", "BattleServer"), 0) == 1
def GetServerGroupID():
## 服务器组ID,必须唯一,代表这台物理服务器
@@ -1360,6 +1391,8 @@
# @return
def GetPlatform():
return ReadChConfig.GetPyMongoConfig("platform", "PlatformName")
+
+def IsTestPlatform(platform): return platform in ["test", "yun"]
#===============================================================================
# ##获得当前服务器ID
@@ -1428,7 +1461,10 @@
##获取玩家所属平台
def GetPlayerPlatform(curPlayer):
- return curPlayer.GetAccountData().GetOperator()
+ appID = curPlayer.GetAccountData().GetOperator()
+ if not appID:
+ appID = GetAppIDByAccID(curPlayer.GetAccID())
+ return appID
##获取平台账号
def GetPlatformAccID(gameAccID):
@@ -1436,6 +1472,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()
@@ -1732,6 +1772,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:
@@ -1933,7 +1975,7 @@
## 跨服服务器时间
if IsCrossServer():
return GetCurrentDataTimeStr()
- lastCrossServerTime, lastServerTime, _ = PyGameData.g_crossServerTimeInfo
+ lastCrossServerTime, lastServerTime = PyGameData.g_crossServerTimeInfo
if not lastCrossServerTime:
return GetCurrentDataTimeStr()
curTime = int(time.time())
@@ -2106,6 +2148,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: 待取值的字节值
@@ -2390,8 +2458,8 @@
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=""):
--
Gitblit v1.8.0