From 3f862208516829ee806168cbb633bc9221f0cf6a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 11 十月 2025 20:30:10 +0800
Subject: [PATCH] 271 【内政】古宝系统-服务端
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/CommFunc.py | 62 +++++++++++++++++++++++++++++++
1 files changed, 62 insertions(+), 0 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/CommFunc.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/CommFunc.py
index 8916fa9..7f0f50b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/CommFunc.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/CommFunc.py
@@ -28,6 +28,9 @@
import subprocess
import binascii
import GameWorld
+import traceback
+import shutil
+import zlib
#---------------------------------------------------------------------
#全局变量
@@ -363,6 +366,65 @@
hStr="0x"+str(red+green+blue)
return hStr
+def Compress(data, use_hex=False):
+ """压缩数据
+ @param use_hex: 可选十六进制转换(非必要不建议)导致压缩效率降低(体积可能翻倍),且增加转换出错风险。
+ @return: None or compresseData
+ """
+ try:
+ if use_hex:
+ data = binascii.b2a_hex(data)
+ compresseData = zlib.compress(data, 9)
+ return compresseData
+ except:
+ GameWorld.ErrLog('压缩数据 - > %s' % str(traceback.format_exc()))
+ return
+
+def Decompress(compressed_data, expect_hex=False):
+ """解压数据,处理格式和完整性检查
+ @param use_hex: 可选十六进制转换,与压缩参数一致
+ @return: None or data
+ """
+
+ # 检查最小长度(zlib 头部至少 2 字节)
+ if len(compressed_data) < 2:
+ GameWorld.ErrLog("解压失败 -> 压缩数据长度异常.")
+ return
+
+ try:
+ # 尝试标准 zlib 解压
+ data = zlib.decompress(compressed_data)
+ except zlib.error:
+ GameWorld.ErrLog("解压失败(尝试调整参数).")
+ try:
+ # 尝试 GZIP 格式
+ data = zlib.decompress(compressed_data, wbits=31)
+ except zlib.error:
+ # 尝试原始 DEFLATE
+ data = zlib.decompress(compressed_data, wbits=-15)
+
+ if expect_hex:
+ try:
+ if len(data) % 2 != 0:
+ GameWorld.ErrLog("解压失败 -> 十六进制字符串长度非偶数.")
+ return
+ return binascii.a2b_hex(data)
+ except TypeError:
+ GameWorld.ErrLog("解压失败 -> 无效的十六进制数据.")
+ return
+
+ return data
+
+def DelFolder(path, makeDir=False):
+ ## 删除文件夹
+ if os.path.exists(path):
+ # 删除整个目录(包括自身)
+ shutil.rmtree(path)
+ if makeDir:
+ # 重新创建空目录(保留原目录名)
+ os.makedirs(path)
+ return
+
#提示除零错误的EVAL
##
# @param 参数
--
Gitblit v1.8.0