From 9d5ec7599f3abe0cebb76ce1df3c3b8c4e0aa51e Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 10 二月 2026 11:40:15 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(跨服聊天;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Family.py | 160 +++++++++++++++++++++++++++--------------------------
1 files changed, 81 insertions(+), 79 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Family.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Family.py
index 8fd4477..4a95648 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Family.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Family.py
@@ -4,12 +4,12 @@
#
##@package GM.Commands.Family
#
-# @todo:仙盟
+# @todo:公会
# @author hxp
# @date 2025-10-10
# @version 1.0
#
-# 详细描述: 仙盟
+# 详细描述: 公会
#
#-------------------------------------------------------------------------------
#"""Version = 2025-10-10 21:00"""
@@ -23,33 +23,99 @@
import PlayerFamily
import CrossPlayer
import DBDataMgr
-import DBFamily
import time
def GetGMServerIDList(curPlayer):
## 获取命令额外发送到其他服务器,如跨服
crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
- GameWorld.DebugAnswer(curPlayer, "本服公会互通跨服ID:%s" % crossServerID)
if crossServerID:
+ GameWorld.DebugAnswer(curPlayer, "本服公会已互通跨服ID:%s" % crossServerID)
return [crossServerID]
+ GameWorld.DebugAnswer(curPlayer, "本服公会未互通")
return []
-def OnExecCross(crossPlayer, gmList):
- ## 跨服执行命令
- playerID = crossPlayer.GetPlayerID()
+def OnExecCross(crossPlayer, msgList):
+ if not msgList:
+ return
+ if GameWorld.IsMainServer() and DBDataMgr.GetFamilyMgr().GetCurCrossServerID():
+ # 本服公会已互通不再执行本服命令
+ return
+
+ familyID = crossPlayer.GetFamilyID()
familyMgr = DBDataMgr.GetFamilyMgr()
- familyID = familyMgr.GetPlayerFamilyID(playerID)
- zoneID = familyMgr.GetFamilyZoneID(familyID)
- GameWorld.DebugAnswer(crossPlayer, "跨服公会ID:%s,zoneID=%s" % (familyID, zoneID))
- OnExec(crossPlayer, gmList)
+ curFamily = familyMgr.FindFamily(familyID) if familyID else None
+ if not curFamily:
+ GameWorld.DebugAnswer(crossPlayer, "玩家未加入公会!")
+ return
+
+ value = msgList[0]
+ if value == "m":
+ CreateFamily.OnExecCross(crossPlayer, msgList)
+ return
+
+ if GameWorld.IsCrossServer():
+ zoneID = familyMgr.GetFamilyZoneID(familyID)
+ GameWorld.DebugAnswer(crossPlayer, "跨服公会ID:%s,zoneID=%s" % (familyID, zoneID))
+
+ syncMemIDList = []
+ if value == "lv":
+ lv = msgList[1] if len(msgList) > 1 else 1
+ exp = msgList[2] if len(msgList) > 2 else 0
+ if not IpyGameDataPY.GetIpyGameData("Family", lv):
+ GameWorld.DebugAnswer(crossPlayer, "公会等级不存在: %s" % (lv))
+ return
+ curFamily.SetLV(lv)
+ curFamily.SetExp(exp)
+ GameWorld.DebugAnswer(crossPlayer, "设置公会等级:%s, exp=%s" % (lv, exp))
+
+ elif value == "e":
+ emblemID = msgList[1] if len(msgList) > 1 else 0
+ setExpireTimes = msgList[2] if len(msgList) > 2 else None
+ emblemActionObj = PlayerFamilyEmblem.AddFamilyEmblem(curFamily.GetID(), emblemID, setExpireTimes)
+ if not emblemActionObj:
+ GameWorld.DebugAnswer(crossPlayer, "该徽章ID无法添加")
+ return
+ endTime = PlayerFamilyEmblem.GetActionEmblemEndTime(emblemActionObj)
+ GameWorld.DebugAnswer(crossPlayer, "添加徽章(%s)到期:%s" % (emblemID, GameWorld.ChangeTimeNumToStr(endTime)))
+ return
+
+ elif value == "n":
+ PlayerFamily.SetRenameTime(curFamily, 0)
+ GameWorld.DebugAnswer(crossPlayer, "重置公会改名CD")
+
+ elif value == "c":
+ contribDay = msgList[1] if len(msgList) > 1 else 0
+ contribTotal = msgList[2] if len(msgList) > 2 else 0
+ memID = msgList[3] if len(msgList) > 3 else crossPlayer.GetPlayerID()
+ member = curFamily.FindMember(memID)
+ if not member:
+ GameWorld.DebugAnswer(crossPlayer, "不存在该成员ID:%s" % memID)
+ return
+ member.SetContribDay(contribDay)
+ member.SetContribTotal(contribTotal)
+ GameWorld.DebugAnswer(crossPlayer, "设置贡献:%s/%s, ID:%s" % (contribDay, contribTotal, memID))
+ syncMemIDList.append(memID)
+
+ elif value == "ml":
+ memID = msgList[1] if len(msgList) > 1 else 0
+ logoutMinutes = msgList[2] if len(msgList) > 2 else 0
+ member = curFamily.FindMember(memID)
+ if not member:
+ GameWorld.DebugAnswer(crossPlayer, "不存在该成员ID:%s" % memID)
+ return
+ member.SetOffTime(int(time.time()) - logoutMinutes * 60)
+ GameWorld.DebugAnswer(crossPlayer, "成员ID:%s,离线时间:%s" % (memID, GameWorld.ChangeTimeNumToStr(member.GetOffTime())))
+ syncMemIDList.append(memID)
+
+ isSyncMem = True if syncMemIDList else False
+ PlayerFamily.Sync_FamilyInfo(crossPlayer, syncMemIDList=syncMemIDList, isSyncMem=isSyncMem)
return
def OnExec(curPlayer, msgList):
## 游戏服执行命令
if not msgList:
- if GameWorld.IsCrossServer():
- return
+ GameWorld.DebugAnswer(curPlayer, "-----%s-----" % GameWorld.GetCurrentDataTimeStr())
GameWorld.DebugAnswer(curPlayer, "设置等级: Family lv 等级 经验")
GameWorld.DebugAnswer(curPlayer, "设置徽章: Family e 徽章ID [剩余时间秒]")
GameWorld.DebugAnswer(curPlayer, "设置贡献: Family c 今日贡献 累计贡献 [成员ID]")
@@ -64,11 +130,9 @@
if not crossPlayer:
return
- isMainServer = GameWorld.IsMainServer()
value = msgList[0]
+
if value == "l":
- if not isMainServer:
- return
leaveCnt = msgList[1] if len(msgList) > 1 else 0
kickedCnt = msgList[2] if len(msgList) > 2 else 0
lastVoluntarily = msgList[3] if len(msgList) > 3 else 0
@@ -78,67 +142,5 @@
GameWorld.DebugAnswer(curPlayer, "设置离开: Info=%s,%s" % (leaveInfo, GameWorld.ChangeTimeNumToStr(leaveTime)))
return
- if isMainServer and DBFamily.IsFamilyCross():
- GameWorld.DebugAnswer(curPlayer, "公会已跨服由跨服执行命令")
- return
-
- familyID = crossPlayer.GetFamilyID()
- familyMgr = DBDataMgr.GetFamilyMgr()
- curFamily = familyMgr.FindFamily(familyID) if familyID else None
- if not curFamily:
- GameWorld.DebugAnswer(crossPlayer, "玩家未加入仙盟!")
- return
-
- if value == "lv":
- lv = msgList[1] if len(msgList) > 1 else 1
- exp = msgList[2] if len(msgList) > 2 else 0
- if not IpyGameDataPY.GetIpyGameData("Family", lv):
- GameWorld.DebugAnswer(crossPlayer, "仙盟等级不存在: %s" % (lv))
- return
- curFamily.SetLV(lv)
- curFamily.SetExp(exp)
- GameWorld.DebugAnswer(crossPlayer, "设置仙盟等级:%s, exp=%s" % (lv, exp))
-
- elif value == "e":
- emblemID = msgList[1] if len(msgList) > 1 else 0
- setExpireTimes = msgList[2] if len(msgList) > 2 else None
- emblemActionObj = PlayerFamilyEmblem.AddFamilyEmblem(curFamily.GetID(), emblemID, setExpireTimes)
- if not emblemActionObj:
- GameWorld.DebugAnswer(crossPlayer, "该徽章ID无法添加")
- return
- endTime = PlayerFamilyEmblem.GetActionEmblemEndTime(emblemActionObj)
- GameWorld.DebugAnswer(crossPlayer, "添加徽章(%s)到期:%s" % (emblemID, GameWorld.ChangeTimeNumToStr(endTime)))
- return
-
- elif value == "m":
- CreateFamily.OnExec(crossPlayer, msgList)
- return
-
- elif value == "n":
- PlayerFamily.SetRenameTime(curFamily, 0)
- GameWorld.DebugAnswer(crossPlayer, "重置改名CD")
-
- elif value == "c":
- contribDay = msgList[1] if len(msgList) > 1 else 0
- contribTotal = msgList[2] if len(msgList) > 2 else 0
- memID = msgList[3] if len(msgList) > 3 else crossPlayer.GetPlayerID()
- member = curFamily.FindMember(memID)
- if not member:
- GameWorld.DebugAnswer(crossPlayer, "不存在该成员ID:%s" % memID)
- return
- member.SetContribDay(contribDay)
- member.SetContribTotal(contribTotal)
- GameWorld.DebugAnswer(crossPlayer, "设置贡献:%s/%s, ID:%s" % (contribDay, contribTotal, memID))
-
- elif value == "ml":
- memID = msgList[1] if len(msgList) > 1 else 0
- logoutMinutes = msgList[2] if len(msgList) > 2 else 0
- member = curFamily.FindMember(memID)
- if not member:
- GameWorld.DebugAnswer(crossPlayer, "不存在该成员ID:%s" % memID)
- return
- member.SetOffTime(int(time.time()) - logoutMinutes * 60)
- GameWorld.DebugAnswer(crossPlayer, "成员ID:%s,离线时间:%s" % (memID, GameWorld.ChangeTimeNumToStr(member.GetOffTime())))
-
- PlayerFamily.Sync_FamilyInfo(crossPlayer)
+ OnExecCross(crossPlayer, msgList)
return
--
Gitblit v1.8.0