From fd1197fd91110938802a68d998e6f45bb65495ed Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 09 二月 2026 20:12:07 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(公会讨伐支持跨服;test_OnDay等命令支持跨服同步过天等;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnDay.py | 14
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/CrossMgr.py | 11
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CreateFamily.py | 54 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py | 41 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 75 ++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Family.py | 87 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameServerRefresh.py | 161 ------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Zhenbaoge.py | 86 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChServerToServerPyPack.py | 75 ++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/CrossMsg.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py | 29
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/GMShell.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Taofa.py | 85 ++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 16
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnHour.py | 14
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyTaofa.py | 554 +++++++++++-----------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayer.py | 35 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 50 -
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnWeek.py | 14
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 1
21 files changed, 714 insertions(+), 694 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index c64bcaa..040bea5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3255,6 +3255,7 @@
Def_Player_Dict_HasVIPClubNote = 'HasVIPClubNote_186' # 是否提示过vip升级可加入贵宾俱乐部信息
Def_Player_Dict_PyPlayerAction = 'PyPlayerAction_187' # py自定义玩家状态
Def_Player_Dict_FamilyLV = 'FamilyLV_189' # 玩家帮会等级
+Def_Player_Dict_FamilyJoinTime = 'FamilyJoinTime' # 最后一次加入公会时间戳,无公会时为0,地图玩家处理逻辑用
Def_Player_Rename = "Rename" # 是否已改名过
Def_Player_Dict_FamilyZhenbaogeCut = "FamilyZhenbaogeCut" #珍宝阁今日是否已砍过价
Def_Player_Dict_FamilyZhenbaogeBuy = "FamilyZhenbaogeBuy" #珍宝阁今日是否已购买过
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index c03761b..f3609e7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -45714,60 +45714,85 @@
# C2 03 跨服中心事件同步 #tagSSCrossCenterEvent
class tagSSCrossCenterEvent(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("ServerID", c_int),
- ("ServerType", c_ubyte), #服务器类型
- ("EventValue", c_int), #事件值,yyyyMMddhh用于判断过天等
- ]
+ Head = tagHead()
+ ServerID = 0 #(DWORD ServerID)
+ ServerType = 0 #(BYTE ServerType)//服务器类型
+ EventValue = 0 #(DWORD EventValue)//事件值,yyyyMMddhh用于判断过天等
+ GMLen = 0 #(BYTE GMLen)
+ GMEvent = "" #(String GMEvent)
+ data = None
def __init__(self):
self.Clear()
- self.Cmd = 0xC2
- self.SubCmd = 0x03
+ self.Head.Cmd = 0xC2
+ self.Head.SubCmd = 0x03
return
- def ReadData(self, stringData, _pos=0, _len=0):
+ def ReadData(self, _lpData, _pos=0, _Len=0):
self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.ServerType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.EventValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.GMLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.GMEvent,_pos = CommFunc.ReadString(_lpData, _pos,self.GMLen)
+ return _pos
def Clear(self):
- self.Cmd = 0xC2
- self.SubCmd = 0x03
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xC2
+ self.Head.SubCmd = 0x03
self.ServerID = 0
self.ServerType = 0
self.EventValue = 0
+ self.GMLen = 0
+ self.GMEvent = ""
return
def GetLength(self):
- return sizeof(tagSSCrossCenterEvent)
+ length = 0
+ length += self.Head.GetLength()
+ length += 4
+ length += 1
+ length += 4
+ length += 1
+ length += len(self.GMEvent)
+
+ return length
def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.ServerID)
+ data = CommFunc.WriteBYTE(data, self.ServerType)
+ data = CommFunc.WriteDWORD(data, self.EventValue)
+ data = CommFunc.WriteBYTE(data, self.GMLen)
+ data = CommFunc.WriteString(data, self.GMLen, self.GMEvent)
+ return data
def OutputString(self):
- DumpString = '''// C2 03 跨服中心事件同步 //tagSSCrossCenterEvent:
- Cmd:%s,
- SubCmd:%s,
+ DumpString = '''
+ Head:%s,
ServerID:%d,
ServerType:%d,
- EventValue:%d
+ EventValue:%d,
+ GMLen:%d,
+ GMEvent:%s
'''\
%(
- self.Cmd,
- self.SubCmd,
+ self.Head.OutputString(),
self.ServerID,
self.ServerType,
- self.EventValue
+ self.EventValue,
+ self.GMLen,
+ self.GMEvent
)
return DumpString
m_NAtagSSCrossCenterEvent=tagSSCrossCenterEvent()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSSCrossCenterEvent.Cmd,m_NAtagSSCrossCenterEvent.SubCmd))] = m_NAtagSSCrossCenterEvent
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSSCrossCenterEvent.Head.Cmd,m_NAtagSSCrossCenterEvent.Head.SubCmd))] = m_NAtagSSCrossCenterEvent
#------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChServerToServerPyPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChServerToServerPyPack.py
index b008248..5a3b7dc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChServerToServerPyPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChServerToServerPyPack.py
@@ -104,60 +104,85 @@
# C2 03 跨服中心事件同步 #tagSSCrossCenterEvent
class tagSSCrossCenterEvent(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("ServerID", c_int),
- ("ServerType", c_ubyte), #服务器类型
- ("EventValue", c_int), #事件值,yyyyMMddhh用于判断过天等
- ]
+ Head = tagHead()
+ ServerID = 0 #(DWORD ServerID)
+ ServerType = 0 #(BYTE ServerType)//服务器类型
+ EventValue = 0 #(DWORD EventValue)//事件值,yyyyMMddhh用于判断过天等
+ GMLen = 0 #(BYTE GMLen)
+ GMEvent = "" #(String GMEvent)
+ data = None
def __init__(self):
self.Clear()
- self.Cmd = 0xC2
- self.SubCmd = 0x03
+ self.Head.Cmd = 0xC2
+ self.Head.SubCmd = 0x03
return
- def ReadData(self, stringData, _pos=0, _len=0):
+ def ReadData(self, _lpData, _pos=0, _Len=0):
self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.ServerType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.EventValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.GMLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.GMEvent,_pos = CommFunc.ReadString(_lpData, _pos,self.GMLen)
+ return _pos
def Clear(self):
- self.Cmd = 0xC2
- self.SubCmd = 0x03
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xC2
+ self.Head.SubCmd = 0x03
self.ServerID = 0
self.ServerType = 0
self.EventValue = 0
+ self.GMLen = 0
+ self.GMEvent = ""
return
def GetLength(self):
- return sizeof(tagSSCrossCenterEvent)
+ length = 0
+ length += self.Head.GetLength()
+ length += 4
+ length += 1
+ length += 4
+ length += 1
+ length += len(self.GMEvent)
+
+ return length
def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.ServerID)
+ data = CommFunc.WriteBYTE(data, self.ServerType)
+ data = CommFunc.WriteDWORD(data, self.EventValue)
+ data = CommFunc.WriteBYTE(data, self.GMLen)
+ data = CommFunc.WriteString(data, self.GMLen, self.GMEvent)
+ return data
def OutputString(self):
- DumpString = '''// C2 03 跨服中心事件同步 //tagSSCrossCenterEvent:
- Cmd:%s,
- SubCmd:%s,
+ DumpString = '''
+ Head:%s,
ServerID:%d,
ServerType:%d,
- EventValue:%d
+ EventValue:%d,
+ GMLen:%d,
+ GMEvent:%s
'''\
%(
- self.Cmd,
- self.SubCmd,
+ self.Head.OutputString(),
self.ServerID,
self.ServerType,
- self.EventValue
+ self.EventValue,
+ self.GMLen,
+ self.GMEvent
)
return DumpString
m_NAtagSSCrossCenterEvent=tagSSCrossCenterEvent()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSSCrossCenterEvent.Cmd,m_NAtagSSCrossCenterEvent.SubCmd))] = m_NAtagSSCrossCenterEvent
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSSCrossCenterEvent.Head.Cmd,m_NAtagSSCrossCenterEvent.Head.SubCmd))] = m_NAtagSSCrossCenterEvent
#------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CreateFamily.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CreateFamily.py
index 56f9470..4b32228 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CreateFamily.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CreateFamily.py
@@ -33,37 +33,18 @@
GameWorld.DebugAnswer(curPlayer, "本服公会未互通")
return []
-def OnExec(curPlayer, gmList):
- ## 游戏服执行命令
-
- isMainServer = GameWorld.IsMainServer()
+def OnExecCross(crossPlayer, gmList):
if not gmList:
- if not isMainServer:
- return
- GameWorld.DebugAnswer(curPlayer, "-----%s-----" % GameWorld.GetCurrentDataTimeStr())
- GameWorld.DebugAnswer(curPlayer, "创建假人公会: CreatFamily 个数 [总战力 ServerID 等级 成员数 是否审核 官职限制]")
- GameWorld.DebugAnswer(curPlayer, "删除假人公会: CreatFamily 0")
- GameWorld.DebugAnswer(curPlayer, "输出公会列表: CreatFamily pl [条数 从第x名]")
- GameWorld.DebugAnswer(curPlayer, "输出公会明细: CreatFamily pf 公会ID")
- GameWorld.DebugAnswer(curPlayer, "添加假申请人: CreatFamily sq [申请数 公会ID]")
- GameWorld.DebugAnswer(curPlayer, "添加公会成员: CreatFamily m 人数 [公会ID]")
+ return
+ if GameWorld.IsMainServer() and DBDataMgr.GetFamilyMgr().GetCurCrossServerID():
+ # 本服公会已互通不再执行本服命令
return
- if isMainServer:
- crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
- if crossServerID:
- # 本服公会已互通不再执行本服命令
- return
-
- crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
- if not crossPlayer:
- return
-
+ playerID = crossPlayer.GetPlayerID()
+ familyMgr = DBDataMgr.GetFamilyMgr()
+ familyID = familyMgr.GetPlayerFamilyID(playerID)
+ zoneID = familyMgr.GetFamilyZoneID(familyID)
if GameWorld.IsCrossServer():
- playerID = crossPlayer.GetPlayerID()
- familyMgr = DBDataMgr.GetFamilyMgr()
- familyID = familyMgr.GetPlayerFamilyID(playerID)
- zoneID = familyMgr.GetFamilyZoneID(familyID)
GameWorld.DebugAnswer(crossPlayer, "跨服公会ID:%s,zoneID=%s" % (familyID, zoneID))
value1 = gmList[0]
@@ -90,6 +71,25 @@
__createFackFamily(crossPlayer, gmList)
return
+def OnExec(curPlayer, gmList):
+ ## 游戏服执行命令
+ if not gmList:
+ GameWorld.DebugAnswer(curPlayer, "-----%s-----" % GameWorld.GetCurrentDataTimeStr())
+ GameWorld.DebugAnswer(curPlayer, "创建假人公会: CreatFamily 个数 [总战力 ServerID 等级 成员数 是否审核 官职限制]")
+ GameWorld.DebugAnswer(curPlayer, "删除假人公会: CreatFamily 0")
+ GameWorld.DebugAnswer(curPlayer, "输出公会列表: CreatFamily pl [条数 从第x名]")
+ GameWorld.DebugAnswer(curPlayer, "输出公会明细: CreatFamily pf 公会ID")
+ GameWorld.DebugAnswer(curPlayer, "添加假申请人: CreatFamily sq [申请数 公会ID]")
+ GameWorld.DebugAnswer(curPlayer, "添加公会成员: CreatFamily m 人数 [公会ID]")
+ return
+
+ crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
+ if not crossPlayer:
+ return
+
+ OnExecCross(crossPlayer, gmList)
+ return
+
def __addFackMember(crossPlayer, gmList):
memCnt = gmList[1] if len(gmList) > 1 else 1
familyID = gmList[2] if len(gmList) > 2 else crossPlayer.GetFamilyID()
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 0541ea5..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
@@ -34,54 +34,23 @@
GameWorld.DebugAnswer(curPlayer, "本服公会未互通")
return []
-def OnExec(curPlayer, msgList):
- ## 游戏服执行命令
-
- isMainServer = GameWorld.IsMainServer()
+def OnExecCross(crossPlayer, msgList):
if not msgList:
- if not isMainServer:
- return
- GameWorld.DebugAnswer(curPlayer, "-----%s-----" % GameWorld.GetCurrentDataTimeStr())
- GameWorld.DebugAnswer(curPlayer, "设置等级: Family lv 等级 经验")
- GameWorld.DebugAnswer(curPlayer, "设置徽章: Family e 徽章ID [剩余时间秒]")
- GameWorld.DebugAnswer(curPlayer, "设置贡献: Family c 今日贡献 累计贡献 [成员ID]")
- GameWorld.DebugAnswer(curPlayer, "设置离开: Family l 主动离开次数 被踢次数 上次是否主动 离开多久了")
- GameWorld.DebugAnswer(curPlayer, "添加成员: Family m 人数 [公会ID]")
- GameWorld.DebugAnswer(curPlayer, "成员离线: Family ml 成员ID 离线分钟数")
- GameWorld.DebugAnswer(curPlayer, "重置改名: Family n")
- GameWorld.DebugAnswer(curPlayer, "创建公会相关使用命令: CreateFamily")
+ return
+ if GameWorld.IsMainServer() and DBDataMgr.GetFamilyMgr().GetCurCrossServerID():
+ # 本服公会已互通不再执行本服命令
return
- crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
- if not crossPlayer:
- return
-
- 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
- leavePassMinutes = msgList[4] if len(msgList) > 4 else 0
- leaveInfo = PlayerControl.SetLeaveFamilyInfo(curPlayer, leaveCnt, kickedCnt, lastVoluntarily)
- leaveTime = PlayerControl.SetLeaveFamilyTimeEx(curPlayer, int(time.time()) - leavePassMinutes * 60)
- GameWorld.DebugAnswer(curPlayer, "设置离开: Info=%s,%s" % (leaveInfo, GameWorld.ChangeTimeNumToStr(leaveTime)))
- return
-
- if isMainServer:
- crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
- if crossServerID:
- # 本服公会已互通不再执行本服命令
- return
-
familyID = crossPlayer.GetFamilyID()
familyMgr = DBDataMgr.GetFamilyMgr()
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():
@@ -108,10 +77,6 @@
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":
@@ -145,3 +110,37 @@
isSyncMem = True if syncMemIDList else False
PlayerFamily.Sync_FamilyInfo(crossPlayer, syncMemIDList=syncMemIDList, isSyncMem=isSyncMem)
return
+
+def OnExec(curPlayer, msgList):
+ ## 游戏服执行命令
+
+ if not msgList:
+ GameWorld.DebugAnswer(curPlayer, "-----%s-----" % GameWorld.GetCurrentDataTimeStr())
+ GameWorld.DebugAnswer(curPlayer, "设置等级: Family lv 等级 经验")
+ GameWorld.DebugAnswer(curPlayer, "设置徽章: Family e 徽章ID [剩余时间秒]")
+ GameWorld.DebugAnswer(curPlayer, "设置贡献: Family c 今日贡献 累计贡献 [成员ID]")
+ GameWorld.DebugAnswer(curPlayer, "设置离开: Family l 主动离开次数 被踢次数 上次是否主动 离开多久了")
+ GameWorld.DebugAnswer(curPlayer, "添加成员: Family m 人数 [公会ID]")
+ GameWorld.DebugAnswer(curPlayer, "成员离线: Family ml 成员ID 离线分钟数")
+ GameWorld.DebugAnswer(curPlayer, "重置改名: Family n")
+ GameWorld.DebugAnswer(curPlayer, "创建公会相关使用命令: CreateFamily")
+ return
+
+ crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
+ if not crossPlayer:
+ return
+
+ value = msgList[0]
+
+ if value == "l":
+ 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
+ leavePassMinutes = msgList[4] if len(msgList) > 4 else 0
+ leaveInfo = PlayerControl.SetLeaveFamilyInfo(curPlayer, leaveCnt, kickedCnt, lastVoluntarily)
+ leaveTime = PlayerControl.SetLeaveFamilyTimeEx(curPlayer, int(time.time()) - leavePassMinutes * 60)
+ GameWorld.DebugAnswer(curPlayer, "设置离开: Info=%s,%s" % (leaveInfo, GameWorld.ChangeTimeNumToStr(leaveTime)))
+ return
+
+ OnExecCross(crossPlayer, msgList)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Taofa.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Taofa.py
index 98ae0cc..6dd6137 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Taofa.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Taofa.py
@@ -22,37 +22,37 @@
import PlayerControl
import PlayerFamilyTaofa
import PlayerFamily
+import CrossPlayer
import DBDataMgr
import random
import time
-def OnExec(curPlayer, msgList):
-
+def GetGMServerIDList(curPlayer):
+ ## 获取命令额外发送到其他服务器,如跨服
+ crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
+ if crossServerID:
+ GameWorld.DebugAnswer(curPlayer, "本服公会已互通跨服ID:%s" % crossServerID)
+ return [crossServerID]
+ GameWorld.DebugAnswer(curPlayer, "本服公会未互通")
+ return []
+
+def OnExecCross(crossPlayer, msgList):
if not msgList:
- GameWorld.DebugAnswer(curPlayer, "---------- %s" % GameWorld.GetCurrentDataTimeStr())
- GameWorld.DebugAnswer(curPlayer, "重置公会讨伐: Taofa 0")
- GameWorld.DebugAnswer(curPlayer, "设置布阵层级: Taofa z 层级 [剩余秒]")
- GameWorld.DebugAnswer(curPlayer, "设置当前怒气: Taofa a 怒气")
- GameWorld.DebugAnswer(curPlayer, "设置讨伐次数: Taofa c 已讨伐次数 物品次数")
- GameWorld.DebugAnswer(curPlayer, "设置宝箱领取: Taofa b 已领取宝箱 未领取")
- GameWorld.DebugAnswer(curPlayer, "设置宝箱贡献: Taofa g 已贡献宝箱 [累计伤害 历史伤害]")
- GameWorld.DebugAnswer(curPlayer, "增加成员讨伐: Taofa m 人数 [伤害值A 到B 怒攻概率]")
- GameWorld.DebugAnswer(curPlayer, "创建仙盟相关使用命令: CreateFamily")
+ return
+ if GameWorld.IsMainServer() and DBDataMgr.GetFamilyMgr().GetCurCrossServerID():
+ # 本服公会已互通不再执行本服命令
return
- familyID = curPlayer.GetFamilyID()
- if not familyID:
- GameWorld.DebugAnswer(curPlayer, "没有仙盟")
- return
+ familyID = crossPlayer.GetFamilyID()
curFamily = DBDataMgr.GetFamilyMgr().FindFamily(familyID)
if not curFamily:
+ GameWorld.DebugAnswer(crossPlayer, "没有公会")
return
value1 = msgList[0]
if value1 == 0:
PlayerFamilyTaofa.OnTaofaReset(curFamily)
- PlayerFamilyTaofa.OnTaofaResetPlayer(curPlayer)
- GameWorld.DebugAnswer(curPlayer, "重置公会讨伐OK")
+ GameWorld.DebugAnswer(crossPlayer, "重置公会讨伐OK")
return
if value1 == "z":
@@ -64,15 +64,42 @@
PlayerFamilyTaofa.SetFABuzhenLayer(gActionData, gLayer)
PlayerFamilyTaofa.SetFABuzhenEndTime(gActionData, gEndTime)
PlayerFamily.SendFamilyAction(gActionData)
- GameWorld.DebugAnswer(curPlayer, "布阵层:%s,到期:%s" % (gLayer, GameWorld.ChangeTimeNumToStr(gEndTime)))
+ GameWorld.DebugAnswer(crossPlayer, "布阵层:%s,到期:%s" % (gLayer, GameWorld.ChangeTimeNumToStr(gEndTime)))
return
# 新增成员讨伐
if value1 == "m":
- __AddMemTaofaAtk(curPlayer, curFamily, msgList)
+ __AddMemTaofaAtk(crossPlayer, curFamily, msgList)
return
- elif value1 == "a":
+ return
+
+def OnExec(curPlayer, msgList):
+ if not msgList:
+ GameWorld.DebugAnswer(curPlayer, "-----%s-----" % GameWorld.GetCurrentDataTimeStr())
+ GameWorld.DebugAnswer(curPlayer, "重置公会讨伐: Taofa 0")
+ GameWorld.DebugAnswer(curPlayer, "设置布阵层级: Taofa z 层级 [剩余秒]")
+ GameWorld.DebugAnswer(curPlayer, "设置当前怒气: Taofa a 怒气")
+ GameWorld.DebugAnswer(curPlayer, "设置讨伐次数: Taofa c 已讨伐次数 物品次数")
+ GameWorld.DebugAnswer(curPlayer, "设置宝箱领取: Taofa b 已领取宝箱 未领取")
+ GameWorld.DebugAnswer(curPlayer, "设置宝箱贡献: Taofa g 已贡献宝箱 [累计伤害 历史伤害]")
+ GameWorld.DebugAnswer(curPlayer, "增加成员讨伐: Taofa m 人数 [伤害值A 到B 怒攻概率]")
+ GameWorld.DebugAnswer(curPlayer, "创建公会相关使用命令: CreateFamily")
+ return
+
+ crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
+ if not crossPlayer:
+ return
+
+ value1 = msgList[0]
+
+ if value1 == 0:
+ OnExecCross(crossPlayer, msgList)
+ PlayerFamilyTaofa.OnTaofaResetPlayer(curPlayer)
+ GameWorld.DebugAnswer(curPlayer, "重置玩家讨伐OK")
+ return
+
+ if value1 == "a":
anger = msgList[1] if len(msgList) > 1 else 0
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaAnger, anger)
GameWorld.DebugAnswer(curPlayer, "当前怒气: %s" % anger)
@@ -83,7 +110,7 @@
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaCnt, atkCnt)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaItemAddCnt, itemAddCnt)
GameWorld.DebugAnswer(curPlayer, "已讨伐次数:%s, 物品增加次数:%s" % (atkCnt, itemAddCnt))
-
+
elif value1 == "b":
totalGetCnt = msgList[1] if len(msgList) > 1 else 0
unGetCnt = msgList[2] if len(msgList) > 2 else 0
@@ -113,10 +140,10 @@
PlayerFamilyTaofa.SyncTaofaInfo(curPlayer)
return
-def __AddMemTaofaAtk(curPlayer, curFamily, msgList):
+def __AddMemTaofaAtk(crossPlayer, curFamily, msgList):
#新增成员讨伐: Taofa m 人数 [伤害值A 到B]
- GameWorld.DebugAnswer(curPlayer, "---------- %s" % GameWorld.GetCurrentDataTimeStr())
+ GameWorld.DebugAnswer(crossPlayer, "---------- %s" % GameWorld.GetCurrentDataTimeStr())
memCnt = msgList[1] if len(msgList) > 1 else curFamily.GetCount()
hurtTotalA = msgList[2] if len(msgList) > 2 else 0
hurtTotalB = msgList[3] if len(msgList) > 3 else hurtTotalA
@@ -125,9 +152,9 @@
if curFamily.GetCount() <= memCnt:
addMemCnt = memCnt - curFamily.GetCount() + 1
- GameWorld.DebugAnswer(curPlayer, "添加缺少成员: %s" % addMemCnt)
- CreateFamily.OnExec(curPlayer, ["m", addMemCnt])
- GameWorld.DebugAnswer(curPlayer, "当前总成员数: %s" % curFamily.GetCount())
+ GameWorld.DebugAnswer(crossPlayer, "添加缺少成员: %s" % addMemCnt)
+ CreateFamily.OnExecCross(crossPlayer, ["m", addMemCnt])
+ GameWorld.DebugAnswer(crossPlayer, "当前总成员数: %s" % curFamily.GetCount())
actionDataList = []
for index in range(curFamily.GetCount()):
@@ -144,9 +171,9 @@
hurtValue = random.randint(hurtTotalA, hurtTotalB)
isAnger = GameWorld.CanHappen(angerRate) # 概率设置为怒气攻击
- actionData = PlayerFamilyTaofa.GMAddMemTaofaAtk(curPlayer, curFamily, memID, hurtValue, isAnger)
+ actionData = PlayerFamilyTaofa.GMAddMemTaofaAtk(crossPlayer, curFamily, memID, hurtValue, isAnger)
actionDataList.append(actionData)
-
- PlayerFamilyTaofa.RefreshPlayerAwardBoxCnt(curFamily)
+
PlayerFamily.SendFamilyAction(actionDataList)
+ PlayerFamilyTaofa.SyncMemContribInfo(curFamily)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Zhenbaoge.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Zhenbaoge.py
index e73d917..aaee7ab 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Zhenbaoge.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Zhenbaoge.py
@@ -34,56 +34,14 @@
GameWorld.DebugAnswer(curPlayer, "本服公会未互通")
return []
-def OnExec(curPlayer, msgList):
-
- isMainServer = GameWorld.IsMainServer()
+def OnExecCross(crossPlayer, msgList):
if not msgList:
- if not isMainServer:
- return
- GameWorld.DebugAnswer(curPlayer, "-----%s-----" % GameWorld.GetCurrentDataTimeStr())
- GameWorld.DebugAnswer(curPlayer, "重置公会珍宝阁: Zhenbaoge 0")
- GameWorld.DebugAnswer(curPlayer, "重置今日状态值: Zhenbaoge d")
- GameWorld.DebugAnswer(curPlayer, "设置退公会时间: Zhenbaoge ft x分钟前")
- GameWorld.DebugAnswer(curPlayer, "新增假砍价数据: Zhenbaoge 次数 [随机A值 至B值]")
- GameWorld.DebugAnswer(curPlayer, "AB值没有填则按常规砍价价格计算")
return
-
- crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
- if not crossPlayer:
+ if GameWorld.IsMainServer() and DBDataMgr.GetFamilyMgr().GetCurCrossServerID():
+ # 本服公会已互通不再执行本服命令
return
familyID = crossPlayer.GetFamilyID()
- if not familyID:
- GameWorld.DebugAnswer(crossPlayer, "没有仙盟")
- return
- value1 = msgList[0]
-
- # 默认本服执行的
- if value1 == "d":
- if not isMainServer:
- return
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyZhenbaogeCut, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyZhenbaogeBuy, 0)
- PlayerFamilyZhenbaoge.Sync_ZhenbaogeInfo(curPlayer)
- GameWorld.DebugAnswer(curPlayer, "重置珍宝阁玩家今日状态OK")
- return
-
- elif value1 == "ft":
- if not isMainServer:
- return
- minutes = msgList[1] if len(msgList) > 1 else 0
- leaveFamilyTimeEx = int(time.time()) - minutes * 60
- PlayerControl.SetLeaveFamilyTimeEx(curPlayer, leaveFamilyTimeEx)
- GameWorld.DebugAnswer(curPlayer, "设置退仙盟时间:%s" % GameWorld.ChangeTimeNumToStr(leaveFamilyTimeEx))
- return
-
- if isMainServer:
- crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
- if crossServerID:
- # 本服公会已互通不再执行本服命令
- return
-
- # 本服、跨服通用
familyMgr = DBDataMgr.GetFamilyMgr()
curFamily = familyMgr.FindFamily(familyID)
if not curFamily:
@@ -94,9 +52,10 @@
zoneID = familyMgr.GetFamilyZoneID(familyID)
GameWorld.DebugAnswer(crossPlayer, "跨服公会ID:%s,zoneID=%s" % (familyID, zoneID))
+ value1 = msgList[0]
if value1 == 0:
PlayerFamilyZhenbaoge.OnZhenbaogeReset(curFamily)
- GameWorld.DebugAnswer(crossPlayer, "重置仙盟珍宝阁OK")
+ GameWorld.DebugAnswer(crossPlayer, "重置公会珍宝阁OK")
return
#添加假砍价
@@ -136,3 +95,38 @@
nowPrice = PlayerFamilyZhenbaoge.GetFAPriceFinal(gActionData)
GameWorld.DebugAnswer(crossPlayer, "添加假砍价数:%s,总砍价数:%s,当前价格:%s" % (fackCount, familyAction.Count() - 1, nowPrice))
return
+
+def OnExec(curPlayer, msgList):
+
+ if not msgList:
+ GameWorld.DebugAnswer(curPlayer, "-----%s-----" % GameWorld.GetCurrentDataTimeStr())
+ GameWorld.DebugAnswer(curPlayer, "重置公会珍宝阁: Zhenbaoge 0")
+ GameWorld.DebugAnswer(curPlayer, "重置今日状态值: Zhenbaoge d")
+ GameWorld.DebugAnswer(curPlayer, "设置退公会时间: Zhenbaoge ft x分钟前")
+ GameWorld.DebugAnswer(curPlayer, "新增假砍价数据: Zhenbaoge 次数 [随机A值 至B值]")
+ GameWorld.DebugAnswer(curPlayer, "AB值没有填则按常规砍价价格计算")
+ return
+
+ crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
+ if not crossPlayer:
+ return
+
+ value1 = msgList[0]
+
+ # 默认本服执行的
+ if value1 == "d":
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyZhenbaogeCut, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyZhenbaogeBuy, 0)
+ PlayerFamilyZhenbaoge.Sync_ZhenbaogeInfo(curPlayer)
+ GameWorld.DebugAnswer(curPlayer, "重置珍宝阁玩家今日状态OK")
+ return
+
+ elif value1 == "ft":
+ minutes = msgList[1] if len(msgList) > 1 else 0
+ leaveFamilyTimeEx = int(time.time()) - minutes * 60
+ PlayerControl.SetLeaveFamilyTimeEx(curPlayer, leaveFamilyTimeEx)
+ GameWorld.DebugAnswer(curPlayer, "设置退公会时间:%s" % GameWorld.ChangeTimeNumToStr(leaveFamilyTimeEx))
+ return
+
+ OnExecCross(crossPlayer, msgList)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnDay.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnDay.py
index 1c3f017..b7cd7f5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnDay.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnDay.py
@@ -19,13 +19,21 @@
import PlayerEventCounter
import GameWorldEvent
import ServerDay
+import CrossMgr
+
+def GetGMServerIDList(curPlayer):
+ ## 获取命令额外发送到其他服务器,如跨服
+ centerID = CrossMgr.GetSSServerMgr().GetCrossCenterID()
+ return [centerID] if centerID else []
+
+def OnExecCross(crossPlayer, gmList):
+ GameWorldEvent.OnGM_CrossCenterEvent("GMOnDay")
+ return
def OnExec(curPlayer, gmList):
__DoExec(GameWorld.GetGameWorld().GetTick())
-
ServerDay.__printServerDay(curPlayer)
- # 暂时同步GameServer,之后可去除
- return True
+ return
def __DoExec(tick):
playerManager = GameWorld.GetPlayerManager()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnHour.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnHour.py
index edcf194..88715cb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnHour.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnHour.py
@@ -18,12 +18,20 @@
import GameWorld
import PlayerEventCounter
import GameWorldEvent
+import CrossMgr
+
+def GetGMServerIDList(curPlayer):
+ ## 获取命令额外发送到其他服务器,如跨服
+ centerID = CrossMgr.GetSSServerMgr().GetCrossCenterID()
+ return [centerID] if centerID else []
+
+def OnExecCross(crossPlayer, gmList):
+ GameWorldEvent.OnGM_CrossCenterEvent("GMOnHour")
+ return
def OnExec(curPlayer, gmList):
__DoExec(GameWorld.GetGameWorld().GetTick())
-
- # 暂时同步GameServer,之后可去除
- return True
+ return
def __DoExec(tick):
playerManager = GameWorld.GetPlayerManager()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnWeek.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnWeek.py
index c37ae06..fe51eba 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnWeek.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnWeek.py
@@ -18,12 +18,20 @@
import GameWorld
import PlayerEventCounter
import GameWorldEvent
+import CrossMgr
+
+def GetGMServerIDList(curPlayer):
+ ## 获取命令额外发送到其他服务器,如跨服
+ centerID = CrossMgr.GetSSServerMgr().GetCrossCenterID()
+ return [centerID] if centerID else []
+
+def OnExecCross(crossPlayer, gmList):
+ GameWorldEvent.OnGM_CrossCenterEvent("GMOnWeek")
+ return
def OnExec(curPlayer, gmList):
__DoExec(GameWorld.GetGameWorld().GetTick())
-
- # 暂时同步GameServer,之后可去除
- return True
+ return
def __DoExec(tick):
playerManager = GameWorld.GetPlayerManager()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/GMShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/GMShell.py
index 5d74c1c..baeeedf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/GMShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/GMShell.py
@@ -235,7 +235,7 @@
return
cmdList = eval(cmdStr)
callFunName = cmdList[0]
- callName = "%s.%s" % (callFunName, "OnExec")
+ callName = "%s.%s" % (callFunName, "OnExecCross")
callFunc = GameWorld.GetExecFunc(Commands, callName)
if not callFunc:
GameWorld.DebugAnswer(crossPlayer, "找不到该跨服命令! %s" % callName)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/CrossMgr.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/CrossMgr.py
index 6d22f2b..96f5e88 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/CrossMgr.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/CrossMgr.py
@@ -327,12 +327,14 @@
return
-def SendCrossServerEvent(serverIDList=None, dirType=ShareDefine.dirType_MainAndCross):
+def SendCrossServerEvent(serverIDList=None, dirType=ShareDefine.dirType_MainAndCross, gmEvent=""):
## 同步跨服中心服务器事件值
pack = ChServerToServerPyPack.tagSSCrossCenterEvent()
pack.ServerID = GameWorld.GetGameWorld().GetServerID()
pack.ServerType = GameWorld.GetServerType()
pack.EventValue = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_CrossCenterEvent)
+ pack.GMEvent = gmEvent
+ pack.GMLen = len(pack.GMEvent)
NetPackCommon.SendCrossServerToServerPack(pack, serverIDList, dirType)
return
@@ -344,13 +346,16 @@
# DWORD ServerID;
# BYTE ServerType; //服务器类型
# DWORD EventValue; //事件值,yyyyMMddhh用于判断过天等
+# BYTE GMLen;
+# char GMEvent[GMLen];
#};
def OnCrossCenterEvent(netPack):
serverID = netPack.ServerID
serverType = netPack.ServerType
eventValue = netPack.EventValue
- GameWorld.Log("收到服务器事件变更同步: serverID=%s,serverType=%s,eventValue=%s" % (serverID, serverType, eventValue))
+ gmEvent = netPack.GMEvent
+ GameWorld.Log("收到服务器事件变更同步: serverID=%s,serverType=%s,eventValue=%s,gmEvent=%s" % (serverID, serverType, eventValue, gmEvent))
if serverType != ShareDefine.serverType_CrossCenter:
return
- GameWorldEvent.DoLogic_CrossCenterEvent(eventValue, serverID)
+ GameWorldEvent.DoLogic_CrossCenterEvent(eventValue, serverID, gmEvent=gmEvent)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/CrossMsg.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/CrossMsg.py
index 95830c1..3bb86cd 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/CrossMsg.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/CrossMsg.py
@@ -21,6 +21,7 @@
import ShareDefine
import NetPackCommon
import ChServerToServerPyPack
+import PlayerFamilyTaofa
import PlayerViewCache
import PlayerFamily
import CrossPlayer
@@ -193,6 +194,8 @@
PlayerFamily.C2S_FamilyMapPlayer(dataMsg, playerID)
elif msgType == ShareDefine.C2S_FamilyPyPackRet:
PlayerFamily.C2S_FamilyPyPackRet(dataMsg, playerID)
+ elif msgType == ShareDefine.C2S_TaofaMemContrib:
+ PlayerFamilyTaofa.C2S_TaofaMemContrib(dataMsg)
elif msgType == ShareDefine.C2S_NotifyCode:
CrossPlayer.C2S_NotifyCode(dataMsg)
elif msgType == ShareDefine.C2S_SendFakePack:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py
index cb47a5c..f12f11c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py
@@ -369,6 +369,14 @@
DataRecordPack.DR_OnLinePlayerCount(activePlayerCount) # 总在线
return
+def OnGM_CrossCenterEvent(gmEvent):
+ if not GameWorld.IsCrossCenter():
+ return
+ serverEventValue = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_CrossCenterEvent)
+ if DoLogic_CrossCenterEvent(serverEventValue, gmEvent=gmEvent):
+ CrossMgr.SendCrossServerEvent(gmEvent=gmEvent)
+ return
+
def DoLogic_GameWorldEvenByTime(tick):
'''跨服事件由跨服中心服务器驱动,游戏服使用原方式
跨服中心OnEvent -> 其他服务器OnEvent (包含个常规跨服服务器及游戏服,不保证谁先执行)
@@ -459,22 +467,22 @@
PlayerEventCounter.DoLogic_OnYear(tick)
return
-def DoLogic_CrossCenterEvent(centerEventValue, centerServerID=0):
+def DoLogic_CrossCenterEvent(centerEventValue, centerServerID=0, gmEvent=""):
## 收到跨服中心事件同步,如OnDay等
serverEventValue = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_CrossCenterEvent)
if not serverEventValue:
serverEventValue = centerEventValue
DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_CrossCenterEvent, centerEventValue)
- if serverEventValue == centerEventValue:
+ if serverEventValue == centerEventValue and not gmEvent:
if centerServerID:
GameWorld.Log("本服与跨服中心事件值相同不处理! serverEventValue=%s,centerEventValue=%s,centerServerID=%s" % (serverEventValue, centerEventValue, centerServerID))
return
if centerServerID:
- GameWorld.Log("本服与跨服中心事件值变化! serverEventValue=%s,centerEventValue=%s,centerServerID=%s" % (serverEventValue, centerEventValue, centerServerID))
+ GameWorld.Log("本服与跨服中心事件值变化! serverEventValue=%s,centerEventValue=%s,centerServerID=%s,gmEvent=%s" % (serverEventValue, centerEventValue, centerServerID, gmEvent))
else:
- GameWorld.Log("跨服中心服务器事件值变化! serverEventValue=%s,centerEventValue=%s" % (serverEventValue, centerEventValue))
+ GameWorld.Log("跨服中心服务器事件值变化! serverEventValue=%s,centerEventValue=%s,gmEvent=%s" % (serverEventValue, centerEventValue, gmEvent))
serverEventTime = GameWorld.ChangeStrToDatetime("%s" % serverEventValue, ChConfig.TYPE_Time_Format_YmdH)
centerEventTime = GameWorld.ChangeStrToDatetime("%s" % centerEventValue, ChConfig.TYPE_Time_Format_YmdH)
@@ -496,12 +504,12 @@
isEvent = False
#OnHour事件
- if (serverHour != centerHour or serverDay != centerDay or serverMonth != centerMonth or serverYear != centerYear):
+ if (serverHour != centerHour or serverDay != centerDay or serverMonth != centerMonth or serverYear != centerYear or gmEvent == "GMOnHour"):
isEvent = True
PlayerEventCounter.DoLogic_CrossCenterOnHour(centerEventValue)
#OnDay事件
- if (serverDay != centerDay or serverMonth != centerMonth or serverYear != centerYear):
+ if (serverDay != centerDay or serverMonth != centerMonth or serverYear != centerYear or gmEvent == "GMOnDay"):
isEvent = True
PlayerEventCounter.DoLogic_CrossCenterOnDay(centerEventValue)
@@ -517,6 +525,15 @@
#if serverYear != curTimeYear:
# OnYear(tick)
+ # 游戏服额外处理玩家
+ if GameWorld.IsMainServer():
+ playerManager = GameWorld.GetPlayerManager()
+ for i in xrange(playerManager.OnlineCount()):
+ curPlayer = playerManager.OnlineAt(i)
+ if not GameWorld.IsNormalPlayer(curPlayer):
+ continue
+ PlayerEventCounter.PlayerOnCrossCenterEvent(curPlayer, centerEventValue, gmEvent=gmEvent)
+
return isEvent
def __CheckIpyDataRecycle(timeNow):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index cf93f29..53e2272 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -164,10 +164,6 @@
if FBLogic.PlayerLoginInFBCheck(curPlayer, tick):
#玩家是第一次登录, 并且玩家需要踢回原来地图
return
-
- #刷新人物日期状态
- #GameWorld.Log('PlayerEventCounter.UpdatePlayerLoginTime')
- PlayerEventCounter.UpdatePlayerLoginTime(curPlayer)
return
#// A1 20 货币兑换 #tagCMMoneyExchange
@@ -406,6 +402,9 @@
# !!!必要发送的数据要注意位置
if GameWorld.IsCrossServer():
curPlayer.SetForbiddenSyncClientState(True)
+
+ # !!!先处理检查OnDay,再处理玩家登录的功能数据,防止某些功能login处理数据后又被onday重置
+ PlayerEventCounter.UpdatePlayerLoginTime(curPlayer)
__DoPlayerLoginServer(curPlayer, tick)
@@ -539,8 +538,6 @@
#同步自动战斗配置记录
# Sync_AutoFightSetting(curPlayer)
- PlayerFamily.OnPlayerLogin(curPlayer, tick)
-
# 竞技场
PlayerArena.OnLogin(curPlayer)
@@ -664,6 +661,7 @@
else:
PyMongoMain.GetUserCtrlDB().OnPlayerLogin(curPlayer)
GMT_BroadCast.OnPlayerLogin(curPlayer)
+ PlayerFamily.OnPlayerLogin(curPlayer, tick)
PlayerHero.OnPlayerLogin(curPlayer)
PlayerMail.OnPlayerLogin(curPlayer)
PlayerHJG.OnPlayerLogin(curPlayer)
@@ -1252,7 +1250,8 @@
#到此处已经可以保存数据,即使客户端不回包断线
#原 //01 07 地图读取OK#tagCInitMapOK 逻辑 直接调用
__Func_LoadMapOK(index, tick)
- GameServerRefresh.GameSever_PlayerInitOK(index, tick)
+ DoPlayerRealLoginOK(curPlayer, tick)
+ #GameServerRefresh.GameSever_PlayerInitOK(index, tick) GameServer已废弃,不再执行该逻辑
except:
curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError)
import traceback
@@ -1566,9 +1565,6 @@
#申请得到奖励物品
#curPlayer.DataServer_CheckPrizeItem()
-
- #防止玩家读取地图时未触发OnDay,读取地图后再次验证(2009.9.11)
- PlayerEventCounter.UpdatePlayerLoginTime(curPlayer)
#设置阵营
if curPlayer.GetFaction() != ChConfig.CampType_Neutral \
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayer.py
index 4440d86..9271569 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayer.py
@@ -246,7 +246,9 @@
CrossMsg.SendToClientServer(ShareDefine.C2S_NotifyCode, dataMsg, [mainServerID], playerID)
return
-def FamilyNotify(familyID, msgMark, msgParamList=[], excludeIDList=[]):
+def SendToFamilyPlayer(familyID, msgType, dataMsg, excludeIDList=[], onlyIDList=[], havePlayerCall=None):
+ ## 发送给某个公会所有在线游戏服成员,跨服游戏服通用
+ # @param havePlayerCall: 有curPlayer时回调函数,一般是游戏服时有,直接本服执行 func(curPlayer, familyID, dataMsg)
family = DBDataMgr.GetFamilyMgr().FindFamily(familyID)
if not family:
return
@@ -257,6 +259,8 @@
for index in range(family.GetCount()):
member = family.GetAt(index)
playerID = member.GetPlayerID()
+ if onlyIDList and playerID not in onlyIDList:
+ continue
if excludeIDList and playerID in excludeIDList:
continue
crossPlayer = crossPlayerMgr.FindCrossPlayer(playerID)
@@ -265,7 +269,8 @@
continue
curPlayer = crossPlayer.GetPlayer()
if curPlayer: # 有玩家,一般只有游戏服有,可视为游戏服在线,直接发送
- PlayerControl.NotifyCode(curPlayer, msgMark, msgParamList)
+ if havePlayerCall:
+ havePlayerCall(curPlayer, familyID, dataMsg)
continue
mainServerID = crossPlayer.GetMainServerID()
if mainServerID == curServerID:
@@ -278,8 +283,22 @@
playerIDList.append(playerID)
for mainServerID, playerIDList in crossServerPlayerDict.items():
- dataMsg = {"playerIDList":playerIDList, "msgMark":msgMark, "msgParamList":msgParamList}
- CrossMsg.SendToClientServer(ShareDefine.C2S_NotifyCode, dataMsg, [mainServerID])
+ sendDataMsg = {"playerIDList":playerIDList, "familyID":familyID}
+ sendDataMsg.update(dataMsg)
+ CrossMsg.SendToClientServer(msgType, sendDataMsg, [mainServerID])
+ return
+
+def FamilyNotify(familyID, msgMark, msgParamList=[], excludeIDList=[]):
+ family = DBDataMgr.GetFamilyMgr().FindFamily(familyID)
+ if not family:
+ return
+
+ def havePlayerCall(curPlayer, familyID, dataMsg):
+ PlayerControl.NotifyCode(curPlayer, dataMsg["msgMark"], dataMsg["msgParamList"])
+ return
+
+ dataMsg = {"msgMark":msgMark, "msgParamList":msgParamList}
+ SendToFamilyPlayer(familyID, ShareDefine.C2S_NotifyCode, dataMsg, excludeIDList, havePlayerCall=havePlayerCall)
return
def C2S_NotifyCode(dataMsg):
@@ -360,7 +379,7 @@
return
-def GivePlayerResources(crossPlayer, awardItemList=None, moneyDict=None, eventName="", drDict=None):
+def GivePlayerResources(crossPlayer, awardItemList=None, moneyDict=None, eventName="", drDict=None, isNotifyAward=True):
'''给玩家资源
@param awardItemList: 给物品列表 [[itemID,itemCnt], ...]
@param moneyDict: 给货币 {货币类型:消耗值, ...}
@@ -375,6 +394,8 @@
dataMsg["moneyDict"] = moneyDict
if drDict:
dataMsg["drDict"] = drDict
+ if not isNotifyAward:
+ dataMsg["isNotifyAward"] = isNotifyAward
playerID = crossPlayer.GetPlayerID()
curPlayer = crossPlayer.GetPlayer()
@@ -405,6 +426,7 @@
awardItemList = eventData.get("awardItemList", [])
moneyDict = eventData.get("moneyDict", {})
drDict = eventData.get("drDict", {})
+ isNotifyAward = eventData.get("isNotifyAward", True)
GameWorld.DebugLog("awardItemList=%s" % awardItemList)
if awardItemList:
@@ -418,7 +440,8 @@
for moneyType, moneyValue in moneyDict.items():
PlayerControl.GiveMoney(curPlayer, moneyType, moneyValue, eventName, moneyRDict)
- ItemControler.NotifyGiveAwardInfo(curPlayer, awardItemList, eventName, moneyInfo=moneyDict)
+ if isNotifyAward:
+ ItemControler.NotifyGiveAwardInfo(curPlayer, awardItemList, eventName, moneyInfo=moneyDict)
return
def SetPlayerNomalDict(crossPlayer, setDict, isDayReset=False):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameServerRefresh.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameServerRefresh.py
index cae2a59..d9ade9d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameServerRefresh.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameServerRefresh.py
@@ -32,20 +32,9 @@
#------------------------------------------------------------------------------
import GameWorld
import PlayerControl
-import PlayerEventCounter
import ChConfig
import PlayerCoin
-import ChPlayer
-#---------------------------------------------------------------------
-#记录玩家初始化过程中。积累的封包
-OnHourKey = 'PlayerGSInitOK_OnHourKey'
-OnDayKey = 'PlayerGSInitOK_OnDayKey'
-OnWeekKey = 'PlayerGSInitOK_OnWeekKey'
-OnMonthKey = 'PlayerGSInitOK_OnMonthKey'
-OnYearKey = 'PlayerGSInitOK_OnYearKey'
-OnDayExKey = 'PlayerGSInitOK_OnDayExKey'
-OnWeekExKey = 'PlayerGSInitOK_OnWeekExKey'
-OnMonthExKey = 'PlayerGSInitOK_OnMonthExKey'
+
#---------------------------------------------------------------------
#玩家离开副本
Def_RouteServerInitOK_LeaveFBKey = 'RouteServerInitOK_LeaveFBKey' #玩家离开副本
@@ -68,145 +57,19 @@
# @return None
# @remarks 函数详细说明.
def GameSever_PlayerInitOK(index , tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- #2009-12-17 因地图服务器有可能关闭重开,这里要判定空
- if not curPlayer:
- GameWorld.ErrLog('GameSever_PlayerInitError playerIndex = %s'%(index))
- return
-
- #设置初始化成功
- curPlayer.SetGameServerInitOK(True)
-
- #时间缓存封包
- if Get_PlayerGameServerInitOK_OnHour(curPlayer):
- PlayerEventCounter.PlayerOnHour(curPlayer)
- Set_PlayerGameServerInitOK_OnHour(curPlayer, 0)
-
- if Get_PlayerGameServerInitOK_OnDay(curPlayer):
- PlayerEventCounter.PlayerOnDay(curPlayer)
- Set_PlayerGameServerInitOK_OnDay(curPlayer, 0)
-
- #if Get_PlayerGameServerInitOK_OnDayEx(curPlayer):
- # PlayerEventCounter.PlayerOnDayEx(curPlayer)
- # Set_PlayerGameServerInitOK_OnDayEx(curPlayer, 0)
-
- if Get_PlayerGameServerInitOK_OnWeek(curPlayer):
- PlayerEventCounter.PlayerOnWeek(curPlayer)
- Set_PlayerGameServerInitOK_OnWeek(curPlayer, 0)
-
- #if Get_PlayerGameServerInitOK_OnWeekEx(curPlayer):
- # PlayerEventCounter.PlayerOnWeekEx(curPlayer)
- # Set_PlayerGameServerInitOK_OnWeekEx(curPlayer, 0)
-
- if Get_PlayerGameServerInitOK_OnMonth(curPlayer):
- PlayerEventCounter.PlayerOnMonth(curPlayer)
- Set_PlayerGameServerInitOK_OnMonth(curPlayer, 0)
-
- #if Get_PlayerGameServerInitOK_OnMonthEx(curPlayer):
- # PlayerEventCounter.PlayerOnMonthEx(curPlayer)
- # Set_PlayerGameServerInitOK_OnMonthEx(curPlayer, 0)
-
- if Get_PlayerGameServerInitOK_OnYear(curPlayer):
- PlayerEventCounter.PlayerOnYear(curPlayer)
- Set_PlayerGameServerInitOK_OnYear(curPlayer, 0)
-
- GameWorld.Log('GameSever_PlayerInitOK' , curPlayer.GetID())
- ChPlayer.DoPlayerRealLoginOK(curPlayer, tick)
- return
-#---------------------------------------------------------------------
-## 保存OnHour
-# @param curPlayer 当前玩家
-# @param value key值
-# @return None
-# @remarks 函数详细说明.
-def Set_PlayerGameServerInitOK_OnHour(curPlayer, value):
- curPlayer.SetDict(OnHourKey, value)
- #GameWorld.Log('Set_PlayerGameServerInitOK_OnHour , value = %s'%( value ) , curPlayer.GetID())
+ #GameServer已废弃,不再处理该逻辑
+# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+# #2009-12-17 因地图服务器有可能关闭重开,这里要判定空
+# if not curPlayer:
+# GameWorld.ErrLog('GameSever_PlayerInitError playerIndex = %s'%(index))
+# return
+#
+# #设置初始化成功
+# curPlayer.SetGameServerInitOK(True)
+#
+# GameWorld.Log('GameSever_PlayerInitOK' , curPlayer.GetID())
return
-## 获取玩家字典 OnHour
-# @param curPlayer 当前玩家
-# @return None
-# @remarks 函数详细说明.
-def Get_PlayerGameServerInitOK_OnHour(curPlayer):
- return curPlayer.GetDictByKey(OnHourKey)
-
-## 保存OnDay
-# @param curPlayer 当前玩家
-# @param value key值
-# @return None
-# @remarks 函数详细说明.
-def Set_PlayerGameServerInitOK_OnDay(curPlayer, value):
- curPlayer.SetDict(OnDayKey, value)
- #GameWorld.Log('Set_PlayerGameServerInitOK_OnDay, value = %s'%( value ) , curPlayer.GetID())
- return
-
-## 获取玩家字典 OnDay
-# @param curPlayer 当前玩家
-# @return None
-# @remarks 函数详细说明.
-def Get_PlayerGameServerInitOK_OnDay(curPlayer):
- return curPlayer.GetDictByKey(OnDayKey)
-
-def Set_PlayerGameServerInitOK_OnDayEx(curPlayer, value): return curPlayer.SetDict(OnDayExKey, value)
-def Get_PlayerGameServerInitOK_OnDayEx(curPlayer): return curPlayer.GetDictByKey(OnDayExKey)
-
-## 保存OnWeek
-# @param curPlayer 当前玩家
-# @param value key值
-# @return None
-# @remarks 函数详细说明.
-def Set_PlayerGameServerInitOK_OnWeek(curPlayer, value):
- curPlayer.SetDict(OnWeekKey, value)
- #GameWorld.Log('Set_PlayerGameServerInitOK_OnWeek, value = %s'%( value ) , curPlayer.GetID())
- return
-
-## 获取玩家字典 OnWeek
-# @param curPlayer 当前玩家
-# @return None
-# @remarks 函数详细说明.
-def Get_PlayerGameServerInitOK_OnWeek(curPlayer):
- return curPlayer.GetDictByKey(OnWeekKey)
-
-def Set_PlayerGameServerInitOK_OnWeekEx(curPlayer, value): return curPlayer.SetDict(OnWeekExKey, value)
-def Get_PlayerGameServerInitOK_OnWeekEx(curPlayer): return curPlayer.GetDictByKey(OnWeekExKey)
-
-## 保存OnMonth
-# @param curPlayer 当前玩家
-# @param value key值
-# @return None
-# @remarks 函数详细说明.
-def Set_PlayerGameServerInitOK_OnMonth(curPlayer , value):
- curPlayer.SetDict(OnMonthKey , value)
- #GameWorld.Log('Set_PlayerGameServerInitOK_OnMonth, value = %s'%( value ) , curPlayer.GetID())
- return
-
-## 获取玩家字典 OnMonth
-# @param curPlayer 当前玩家
-# @return None
-# @remarks 函数详细说明.
-def Get_PlayerGameServerInitOK_OnMonth(curPlayer):
- return curPlayer.GetDictByKey(OnMonthKey)
-
-def Set_PlayerGameServerInitOK_OnMonthEx(curPlayer, value): return curPlayer.SetDict(OnMonthExKey, value)
-def Get_PlayerGameServerInitOK_OnMonthEx(curPlayer): return curPlayer.GetDictByKey(OnMonthExKey)
-
-## 保存OnYear
-# @param curPlayer 当前玩家
-# @param value key值
-# @return None
-# @remarks 函数详细说明.
-def Set_PlayerGameServerInitOK_OnYear(curPlayer, value):
- curPlayer.SetDict(OnYearKey, value)
- #GameWorld.Log('Set_PlayerGameServerInitOK_OnYear, value = %s'%( value ) , curPlayer.GetID())
- return
-
-## 获取玩家字典 OnYear
-# @param curPlayer 当前玩家
-# @return None
-# @remarks 函数详细说明.
-def Get_PlayerGameServerInitOK_OnYear(curPlayer):
- return curPlayer.GetDictByKey(OnYearKey)
#===============================================================================
# //01 15 玩家在RouteServer初始化成功#tagPlayerRouteServerInitOK
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index 2a84f19..54ae28a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -77,15 +77,6 @@
# 其他跨服功能
- # 游戏服额外处理玩家
- if GameWorld.IsMainServer():
- playerManager = GameWorld.GetPlayerManager()
- for i in xrange(playerManager.OnlineCount()):
- curPlayer = playerManager.OnlineAt(i)
- if not GameWorld.IsNormalPlayer(curPlayer):
- continue
- PlayerOnCrossCenterEvent(curPlayer, centerEventValue)
-
PlayerBillboard.OnDay(centerEventValue)
return
@@ -214,7 +205,7 @@
return
#--------------------------------------------------------
-def PlayerOnCrossCenterEvent(curPlayer, centerEventValue=0):
+def PlayerOnCrossCenterEvent(curPlayer, centerEventValue=0, gmEvent=""):
## 跨服中心过天
if not centerEventValue:
centerEventValue = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_CrossCenterEvent)
@@ -223,7 +214,7 @@
playerEventValue = centerEventValue
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnCrossEvent, centerEventValue)
- if playerEventValue == centerEventValue:
+ if playerEventValue == centerEventValue and not gmEvent:
return
centerEventTime = GameWorld.ChangeStrToDatetime("%s" % centerEventValue, ChConfig.TYPE_Time_Format_YmdH)
@@ -239,7 +230,7 @@
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnCrossEvent, centerEventValue)
- if (center_Day != player_Day or center_Month != player_Month or center_Year != player_Year):
+ if (center_Day != player_Day or center_Month != player_Month or center_Year != player_Year or gmEvent == "GMOnDay"):
PlayerCrossCenterOnDay(curPlayer, centerEventValue)
return
@@ -255,9 +246,10 @@
def PlayerOnDay(curPlayer):
#记录玩家字典值,待初始化后执行
- if not curPlayer.GetGameServerInitOK():
- GameServerRefresh.Set_PlayerGameServerInitOK_OnDay(curPlayer , 1)
- return
+ #GameServer已废弃,不再验证
+ #if not curPlayer.GetGameServerInitOK():
+ # GameServerRefresh.Set_PlayerGameServerInitOK_OnDay(curPlayer , 1)
+ # return
ondayValue = __Get_Can_OnDay(curPlayer)
if not ondayValue:
@@ -380,9 +372,10 @@
# @remarks 函数详细说明.
def PlayerOnWeek(curPlayer):
#记录玩家字典值,待初始化后执行
- if not curPlayer.GetGameServerInitOK():
- GameServerRefresh.Set_PlayerGameServerInitOK_OnWeek(curPlayer , 1)
- return
+ #GameServer已废弃,不再验证
+ #if not curPlayer.GetGameServerInitOK():
+ # GameServerRefresh.Set_PlayerGameServerInitOK_OnWeek(curPlayer , 1)
+ # return
onWeekValue = __Get_Can_OnWeek(curPlayer)
if not onWeekValue:
@@ -437,9 +430,10 @@
# @remarks 函数详细说明.
def PlayerOnMonth(curPlayer):
#记录玩家字典值,待初始化后执行
- if not curPlayer.GetGameServerInitOK():
- GameServerRefresh.Set_PlayerGameServerInitOK_OnMonth(curPlayer , 1)
- return
+ #GameServer已废弃,不再验证
+ #if not curPlayer.GetGameServerInitOK():
+ # GameServerRefresh.Set_PlayerGameServerInitOK_OnMonth(curPlayer , 1)
+ # return
onMonthValue = __Get_Can_OnMonth(curPlayer)
if not onMonthValue:
@@ -477,9 +471,10 @@
# @remarks 函数详细说明.
def PlayerOnYear(curPlayer):
#记录玩家字典值,待初始化后执行
- if not curPlayer.GetGameServerInitOK():
- GameServerRefresh.Set_PlayerGameServerInitOK_OnYear(curPlayer , 1)
- return
+ #GameServer已废弃,不再验证
+ #if not curPlayer.GetGameServerInitOK():
+ # GameServerRefresh.Set_PlayerGameServerInitOK_OnYear(curPlayer , 1)
+ # return
curPlayerID = curPlayer.GetPlayerID()
@@ -501,9 +496,10 @@
# @remarks 函数详细说明.
def PlayerOnHour(curPlayer):
#记录玩家字典值,待初始化后执行
- if not curPlayer.GetGameServerInitOK():
- GameServerRefresh.Set_PlayerGameServerInitOK_OnHour(curPlayer , 1)
- return
+ #GameServer已废弃,不再验证
+ #if not curPlayer.GetGameServerInitOK():
+ # GameServerRefresh.Set_PlayerGameServerInitOK_OnHour(curPlayer , 1)
+ # return
curPlayerID = curPlayer.GetPlayerID()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
index 5c1faa5..924a4e1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
@@ -149,11 +149,10 @@
def __doPlayerOnDay(curPlayer):
PlayerFamilyZhenbaoge.PlayerOnDay(curPlayer)
PlayerFamilyTaofa.PlayerOnDay(curPlayer)
- Do_MapServer_PlayerOnDay(curPlayer)
+ ResetDailyDonateCnt(curPlayer)
return
def OnPlayerLogin(curPlayer, tick):
- Do_MapServer_PlayerLogin(curPlayer)
if DBFamily.IsFamilyCross():
GameWorld.DebugLog("公会已跨服不处理,由所属跨服服务器处理成员登录逻辑 OnPlayerLogin", curPlayer.GetPlayerID())
return
@@ -163,10 +162,10 @@
def OnCrossPlayerLogin(crossPlayer):
## 玩家上线,游戏服跨服通用,流程上当做以前GameServer处理公会一样,处理后再通知地图(现在的游戏服)
- PlayerLoginRefreshFamily(crossPlayer)
+ PlayerLoginRefreshFamily(crossPlayer) # 必须先刷新
Sync_RequestAddFamilyInfo(crossPlayer, False)
PlayerTalk.NotifyTalkCache(crossPlayer, [IPY_GameWorld.tcFamily]) # 公会聊天缓存
- #PlayerFamilyTaofa.OnPlayerLogin(curPlayer) 讨伐待修改
+ PlayerFamilyTaofa.OnCrossPlayerLogin(crossPlayer)
return
def OnPlayerLogout(curPlayer):
@@ -205,12 +204,13 @@
C2S_FamilyMapPlayer(dataMsg, playerID)
return
-def MapServer_FamilyRefresh(crossPlayer, familyID, isVoluntarily=0):
+def MapServer_FamilyRefresh(crossPlayer, familyID, isVoluntarily=0, isLogin=False):
''' 相当于GameServer调用 curPlayer.MapServer_FamilyRefresh()
'''
playerID = crossPlayer.GetPlayerID()
FmLV = 0 # 职位
FamilyLV = 0 # 公会等级
+ JoinTime = 0
FamilyName = ""
EmblemID, EmblemWord = 0, ""
if familyID:
@@ -224,6 +224,7 @@
member = curFamily.FindMember(playerID)
if member:
FmLV = member.GetFmLV()
+ JoinTime = member.GetJoinTime()
else:
familyID = 0
@@ -233,9 +234,11 @@
doData = {"FamilyID":familyID}
if familyID:
- doData.update({"FmLV":FmLV, "FamilyLV":FamilyLV, "FamilyName":FamilyName, "EmblemID":EmblemID, "EmblemWord":EmblemWord})
+ doData.update({"FmLV":FmLV, "JoinTime":JoinTime, "FamilyLV":FamilyLV, "FamilyName":FamilyName, "EmblemID":EmblemID, "EmblemWord":EmblemWord})
if isVoluntarily:
doData["isVoluntarily"] = 1
+ if isLogin:
+ doData["isLogin"] = 1
SendToFamilyMapPlayer(crossPlayer, "FamilyRefresh", doData)
return
@@ -247,7 +250,7 @@
refreshFamilyID = familyMgr.GetPlayerFamilyID(playerID)
GameWorld.DebugLog("PlayerLoginRefreshFamily playerID=%s,refreshFamilyID=%s" % (playerID, refreshFamilyID))
crossPlayer.SetFamilyID(refreshFamilyID)
- MapServer_FamilyRefresh(crossPlayer, refreshFamilyID) # 登录
+ MapServer_FamilyRefresh(crossPlayer, refreshFamilyID, isLogin=True) # 登录
familyID = refreshFamilyID
if not familyID:
return
@@ -2056,27 +2059,20 @@
Do_MapServer_FamilyRefresh(curPlayer, doData)
return
-def Do_MapServer_PlayerOnDay(curPlayer):
- ResetDailyDonateCnt(curPlayer)
- return
-
-def Do_MapServer_PlayerLogin(curPlayer):
- DBFamily.Sync_FamilyCrossInfo(curPlayer)
- SyncDonateCntInfo(curPlayer)
- PlayerFamilyZhenbaoge.OnPlayerLogin(curPlayer)
- return
-
def Do_MapServer_FamilyRefresh(curPlayer, doData):
tick = GameWorld.GetGameWorld().GetTick()
playerID = curPlayer.GetPlayerID()
refreshFamilyID = doData["FamilyID"]
refreshFmLV = doData.get("FmLV", 0)
+ refreshJoinTime = doData.get("JoinTime", 0)
refreshFamilyLV = doData.get("FamilyLV", 0)
refreshFamilyName = doData.get("FamilyName", "")
refreshEmblemID = doData.get("EmblemID", 0)
refreshEmblemWord = doData.get("EmblemWord", "")
+ isLogin = doData.get("isLogin", 0) # 是否登录刷新的
PlayerViewCache.UpdPlayerViewFamilyInfo(playerID, refreshFamilyID, refreshFamilyName, refreshEmblemID, refreshEmblemWord)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyJoinTime, refreshJoinTime)
lastFamilyID = curPlayer.GetFamilyID()
lastFamilyLV = curPlayer.GetFamilyLV() # 公会等级,非职位等级
@@ -2118,6 +2114,17 @@
#---通知客户端刷新属性---
curPlayer.View_FamilyInfoRefresh() #//04 30 玩家家族名字职位等信息刷新#tagPlayerInFamilyInfoRefresh
+
+ if isLogin:
+ Do_MapServer_PlayerLogin(curPlayer)
+ return
+
+def Do_MapServer_PlayerLogin(curPlayer):
+ ## 地图公会玩家的登录逻辑由最新所属公会刷新后处理
+ DBFamily.Sync_FamilyCrossInfo(curPlayer)
+ SyncDonateCntInfo(curPlayer)
+ PlayerFamilyZhenbaoge.OnPlayerLogin(curPlayer)
+ PlayerFamilyTaofa.OnPlayerLogin(curPlayer)
return
def __OnEnterFamily(curPlayer, tick):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyTaofa.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyTaofa.py
index 5b6ec67..bf0bfd7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyTaofa.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyTaofa.py
@@ -24,6 +24,7 @@
import ItemControler
import PlayerControl
import PlayerFamily
+import CrossPlayer
import GameWorld
import DBDataMgr
@@ -64,38 +65,15 @@
#UserDict {"atkList":[[atkTime, 本次贡献箱子数, 本次总伤害, atkType], ...], ...}
#atkList = actionData.GetUserDict().get("atkList", [])
#actionData.GetUserDict().update({"atkList":atkList})
+#UserDict 存储的key定义
+UserKey_AtkList = "atkList" # 攻击记录
+UserKey_Info = "info" # 离开玩家基本信息
AtkType_Normal = 0 # 常规斩杀
AtkType_Anger = 1 # 怒气斩杀
def OnDay(family):
OnTaofaReset(family)
- return
-
-def PlayerOnDay(curPlayer):
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaCnt, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaItemAddCnt, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBuZhenState, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaAnger, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaLeaveGetCnt, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxTotalGetCnt, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxContribCnt, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurt, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtEx, 0)
- #玩家自己过天非时间过天的,需要刷新一下
- familyID = curPlayer.GetFamilyID()
- curFamily = DBDataMgr.GetFamilyMgr().FindFamily(familyID)
- RefreshPlayerAwardBoxCnt(curFamily, curPlayer, unSyncIDList=[curPlayer.GetPlayerID()])
- SyncTaofaInfo(curPlayer)
- return
-
-def OnPlayerLogin(curPlayer):
- familyID = curPlayer.GetFamilyID()
- curFamily = DBDataMgr.GetFamilyMgr().FindFamily(familyID)
- RefreshPlayerAwardBoxCnt(curFamily, curPlayer, unSyncIDList=[curPlayer.GetPlayerID()])
- SyncTaofaInfo(curPlayer)
- PlayerFamily.SendFamilyActionInfo(curPlayer, familyID, ActionType)
return
def OnTaofaReset(family):
@@ -109,20 +87,24 @@
PlayerFamily.SendFamilyAction(gActionData)
return
-def OnTaofaResetPlayer(curPlayer):
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaCnt, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaItemAddCnt, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBuZhenState, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaAnger, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaLeaveGetCnt, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxTotalGetCnt, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxContribCnt, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurt, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtEx, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtHis, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtHisEx, 0)
- SyncTaofaInfo(curPlayer)
+def OnCrossPlayerLogin(crossPlayer):
+ familyID = crossPlayer.GetFamilyID()
+ if not familyID:
+ return
+ curFamily = DBDataMgr.GetFamilyMgr().FindFamily(familyID)
+ if not curFamily:
+ return
+ playerID = crossPlayer.GetPlayerID()
+ PlayerFamily.SendFamilyActionInfo(crossPlayer, familyID, ActionType)
+ memContribDict = GetMemContriBoxInfo(curFamily)
+ if memContribDict:
+ SyncMemContribInfo(curFamily, [playerID])
+ return
+
+def OnCrossPlayerEnterFamily(crossPlayer):
+ ## 玩家进入新公会
+ familyID = crossPlayer.GetFamilyID()
+ PlayerFamily.SendFamilyActionInfo(crossPlayer, familyID, ActionType)
return
def OnFamilyMemberLeave(family, leavePlayerID):
@@ -132,148 +114,8 @@
if not actionData:
return
memInfo = PlayerViewCache.GetPlayerBaseViewInfo(leavePlayerID)
- actionData.GetUserDict().update({"info":memInfo})
+ actionData.GetUserDict().update({UserKey_Info:memInfo})
PlayerFamily.SendFamilyAction([actionData])
- return
-
-def OnPlayerLeaveFamily(curPlayer):
- ## 玩家退出了公会,针对玩家个人的处理
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaAnger, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt, 0)
- totalGetCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxTotalGetCnt)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaLeaveGetCnt, totalGetCnt)
- GameWorld.DebugLog("退出公会记录讨伐已累计领取宝箱数: totalGetCnt=%s" % totalGetCnt)
- SyncTaofaInfo(curPlayer)
- return
-
-def OnCrossPlayerEnterFamily(crossPlayer):
- ## 玩家进入新公会
- familyID = crossPlayer.GetFamilyID()
- PlayerFamily.SendFamilyActionInfo(crossPlayer, familyID, ActionType)
- return
-
-#def RefreshFamilyBuZhenInfo(family):
-# ## 刷新公会公共布阵信息
-# familyID = family.GetID()
-# curTime = int(time.time())
-# bzDuration = IpyGameDataPY.GetFuncCfg("FamilyTaofaBuzhen", 4) * 60 # 有效时长秒
-# maxLayer = IpyGameDataPY.GetFuncCfg("FamilyTaofaBuzhen", 3)
-#
-# gLayer = 0
-# gEndTime = 0
-# gActionData = None
-# familyAction = DBDataMgr.GetFamilyActionMgr().GetFamilyAction(familyID, ActionType)
-# for index in range(0, familyAction.Count()):
-# actionData = familyAction.At(index)
-# dataID = GetFAPlayerID(actionData)
-# if dataID == ActionGlobalID:
-# gActionData = actionData
-# continue
-# bzTime = GetFABuzhenTime(actionData)
-# if not bzTime:
-# continue
-# endTime = bzTime + bzDuration
-# if endTime <= curTime:
-# continue
-#
-# if not maxLayer or gLayer < maxLayer:
-# gLayer += 1
-#
-# if gEndTime < endTime:
-# gEndTime = endTime
-#
-# GameWorld.DebugLog("刷新公会公共布阵信息: familyID=%s,gLayer=%s,gEndTime=%s" % (familyID, gLayer, GameWorld.ChangeTimeNumToStr(gEndTime)))
-# if not gActionData:
-# gActionData = familyAction.AddAction()
-# SetFAPlayerID(gActionData, ActionGlobalID)
-#
-# SetFABuzhenEndTime(gActionData, gEndTime)
-# SetFABuzhenLayer(gActionData, gLayer)
-# PlayerFamily.SendFamilyAction(gActionData)
-# return
-
-def RefreshPlayerAwardBoxCnt(family, curPlayer=None, unSyncIDList=[]):
- ## 刷新玩家可领取的宝箱数
- # @param curPlayer: None时刷新所有成员
- if not family:
- return
-
- familyID = family.GetID()
- memContribDict = {}
- familyAction = DBDataMgr.GetFamilyActionMgr().GetFamilyAction(familyID, ActionType)
- for index in range(0, familyAction.Count()):
- actionData = familyAction.At(index)
- memID = GetFAPlayerID(actionData)
- if memID == ActionGlobalID:
- continue
- contribList = []
- atkList = actionData.GetUserDict().get("atkList", [])
- for atkInfo in atkList:
- atkTime = atkInfo[AtkIndex_AtkTime]
- contribBoxCnt = atkInfo[AtkIndex_ContribBoxCnt]
- if contribBoxCnt > 0:
- contribList.append([atkTime, contribBoxCnt])
- if contribList:
- memContribDict[memID] = contribList
-
- awardBoxMax = IpyGameDataPY.GetFuncCfg("FamilyTaofaBox", 3)
- GameWorld.DebugLog("刷新公会成员可领取的宝箱数: familyID=%s,memContribDict=%s" % (familyID, memContribDict))
- if curPlayer:
- member = family.FindMember(curPlayer.GetPlayerID())
- if not member:
- return
- __doUpdPlayerAwardBoxCnt(curPlayer, member, memContribDict, awardBoxMax, unSyncIDList)
- return
-
- playerManager = GameWorld.GetPlayerManager()
- for index in xrange(family.GetCount()):
- member = family.GetAt(index)
- playerID = member.GetPlayerID()
- curPlayer = playerManager.FindPlayerByID(playerID)
- if not curPlayer:
- continue
- __doUpdPlayerAwardBoxCnt(curPlayer, member, memContribDict, awardBoxMax, unSyncIDList)
- return
-
-def __doUpdPlayerAwardBoxCnt(curPlayer, member, memContribDict, awardBoxMax, unSyncIDList):
- playerID = curPlayer.GetPlayerID()
- joinTime = member.GetJoinTime()
- leaveGetCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaLeaveGetCnt) # 上次离开公会时累计领取数
- boxTotalGetCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxTotalGetCnt) # 已领取宝箱数
- curFamilyGetCnt = boxTotalGetCnt - leaveGetCnt # 来到本公会后累计领取数
- boxUnGetCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt) # 未领取宝箱数
- canAddBoxMax = awardBoxMax - boxTotalGetCnt - boxUnGetCnt # 还可领取的箱子数
- if canAddBoxMax <= 0:
- GameWorld.DebugLog(" 成员可领取宝箱已达上限不刷新: playerID=%s,boxTotalGetCnt(%s)+boxUnGetCnt(%s) >= %s"
- % (playerID, boxTotalGetCnt, boxUnGetCnt, awardBoxMax))
- return
-
- curFamilyCanGet = 0 # 在本公会累计可领取箱子数
- for contribList in memContribDict.values():
- for atkTime, contribBoxCnt in contribList:
- if joinTime >= atkTime:
- #GameWorld.DebugLog(" 加入公会之前的箱子不能领取: joinTime=%s > atkTime(%s),contribBoxCnt=%s" % (joinTime, atkTime, contribBoxCnt))
- continue
- curFamilyCanGet += contribBoxCnt
-
- addUnGetBox = min(curFamilyCanGet - curFamilyGetCnt - boxUnGetCnt, canAddBoxMax)
- if addUnGetBox <= 0:
- GameWorld.DebugLog(" 成员当前没有可领取的宝箱不刷新: playerID=%s,curFamilyCanGet=%s,curFamilyGetCnt=%s(%s-%s),boxUnGetCnt=%s,awardBoxMax=%s,canAddBoxMax=%s"
- % (playerID, curFamilyCanGet, curFamilyGetCnt, boxTotalGetCnt, leaveGetCnt, boxUnGetCnt, awardBoxMax, canAddBoxMax))
- return
- updBoxUnGetCnt = boxUnGetCnt + addUnGetBox
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt, updBoxUnGetCnt)
- GameWorld.DebugLog(" 成员可领取的宝箱数: playerID=%s,addUnGetBox=%s,updBoxUnGetCnt=%s,curFamilyCanGet=%s,curFamilyGetCnt=%s(%s-%s),boxUnGetCnt=%s,awardBoxMax=%s,canAddBoxMax=%s"
- % (playerID, addUnGetBox, updBoxUnGetCnt, curFamilyCanGet, curFamilyGetCnt, boxTotalGetCnt, leaveGetCnt, boxUnGetCnt, awardBoxMax, canAddBoxMax))
- if not unSyncIDList or playerID not in unSyncIDList:
- SyncTaofaInfo(curPlayer)
- return
-
-def AddTaofaCntByItem(curPlayer, addCnt):
- ## 物品增加副本次数
- itemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaItemAddCnt)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaItemAddCnt, itemAddCnt + addCnt)
- SyncTaofaInfo(curPlayer)
return
#// A6 13 公会讨伐 #tagCSFamilyTaofaOP
@@ -290,36 +132,63 @@
familyID = curPlayer.GetFamilyID()
if not familyID:
GameWorld.DebugLog("没有仙盟无法操作!", playerID)
- return
+ return
+
+ reqDataEx = {}
+
# 布阵
if opType == 1:
- __doBuzhen(curPlayer)
+ if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBuZhenState):
+ GameWorld.DebugLog("已布阵过!", playerID)
+ return
# 斩杀
else:
- __doZhanshaAtk(curPlayer)
+ _, _, maxAnger = IpyGameDataPY.GetFuncEvalCfg("FamilyTaofaAtk", 4)
+ anger = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaAnger)
+ atkType = AtkType_Anger if anger >= maxAnger else AtkType_Normal
+
+ atkCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaCnt)
+ if atkType == AtkType_Normal:
+ itemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaItemAddCnt)
+ freeCnt = IpyGameDataPY.GetFuncCfg("FamilyTaofaAtk", 1)
+ canAtkCnt = freeCnt + itemAddCnt - atkCnt
+ if canAtkCnt <= 0:
+ GameWorld.DebugLog("公会讨伐没有斩杀次数: atkCnt=%s >= freeCnt(%s) + itemAddCnt(%s)" % (atkCnt, freeCnt, itemAddCnt), playerID)
+ return
+
+ fightPower = PlayerControl.GetFightPower(curPlayer)
+ boxContribCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxContribCnt)
+ boxHurt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxHurt)
+ boxHurtEx = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtEx)
+ boxHurtTotal = boxHurt + boxHurtEx * ChConfig.Def_PerPointValue
+ boxHurtHis = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtHis)
+ boxHurtHisEx = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtHisEx)
+ boxHurtTotalHis = boxHurtHis + boxHurtHisEx * ChConfig.Def_PerPointValue
+ reqDataEx = {"anger":anger, "atkType":atkType, "atkCnt":atkCnt, "fightPower":fightPower,
+ "boxContribCnt":boxContribCnt, "boxHurtTotal":boxHurtTotal, "boxHurtTotalHis":boxHurtTotalHis}
+
+ PlayerFamily.FamilyPyPackForwarding(curPlayer, clientData, tick, "PlayerFamilyTaofa.__OnFamilyTaofaOP", True, 20, reqDataEx=reqDataEx)
+ return
+def __OnFamilyTaofaOP(crossPlayer, clientData, tick, fromServerID=0, reqDataEx=None):
+ opType = clientData.OpType
+ # 布阵
+ if opType == 1:
+ __doBuzhen(crossPlayer)
+ else:
+ __doZhanshaAtk(crossPlayer, reqDataEx)
+
+ return True
+
+def __OnFamilyTaofaOP_Ret(curPlayer, clientData, isOK):
+ if not isOK:
+ return
+ SyncTaofaInfo(curPlayer)
return
-def GetFamilyBuzhenLayer(familyID):
- ## 获取并刷新当前公会有效布阵层数
- familyAction = DBDataMgr.GetFamilyActionMgr().GetFamilyAction(familyID, ActionType)
- gActionData = familyAction.GetActionDataByValue1(ActionGlobalID, True)
- gEndTime = GetFABuzhenEndTime(gActionData)
- gLayer = GetFABuzhenLayer(gActionData)
- if (gEndTime or gLayer) and int(time.time()) > gEndTime:
- SetFABuzhenEndTime(gActionData, 0)
- SetFABuzhenLayer(gActionData, 0)
- #PlayerFamily.SendFamilyAction(gActionData) 失效不用同步,前端根据EndTime判断即可
- gEndTime = 0
- gLayer = 0
- return gLayer, gActionData
-
-def __doBuzhen(curPlayer):
+def __doBuzhen(crossPlayer):
## 布阵
- playerID = curPlayer.GetPlayerID()
- if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBuZhenState):
- GameWorld.DebugLog("已布阵过!", playerID)
- return
- familyID = curPlayer.GetFamilyID()
+ playerID = crossPlayer.GetPlayerID()
+ familyID = crossPlayer.GetFamilyID()
curFamily = DBDataMgr.GetFamilyMgr().FindFamily(familyID)
if not curFamily:
return
@@ -343,38 +212,34 @@
PlayerFamily.SendFamilyAction([gActionData, actionData])
# 个人记录
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBuZhenState, 1)
- SyncTaofaInfo(curPlayer)
+ CrossPlayer.SetPlayerNomalDict(crossPlayer, {ChConfig.Def_Player_Dict_FamilyTaofaBuZhenState:1}, True)
return
-def __doZhanshaAtk(curPlayer):
+def __doZhanshaAtk(crossPlayer, reqDataEx):
## 斩杀攻击
- playerID = curPlayer.GetPlayerID()
- familyID = curPlayer.GetFamilyID()
+ if not reqDataEx:
+ return
+ playerID = crossPlayer.GetPlayerID()
+ familyID = crossPlayer.GetFamilyID()
curFamily = DBDataMgr.GetFamilyMgr().FindFamily(familyID)
if not curFamily:
return
commAddAnger, superAddAnger, maxAnger = IpyGameDataPY.GetFuncEvalCfg("FamilyTaofaAtk", 4)
- anger = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaAnger)
- atkType = AtkType_Anger if anger >= maxAnger else AtkType_Normal
-
- if atkType == AtkType_Normal:
- atkCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaCnt)
- itemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaItemAddCnt)
- freeCnt = IpyGameDataPY.GetFuncCfg("FamilyTaofaAtk", 1)
- canAtkCnt = freeCnt + itemAddCnt - atkCnt
- if canAtkCnt <= 0:
- GameWorld.DebugLog("公会讨伐没有斩杀次数: atkCnt=%s >= freeCnt(%s) + itemAddCnt(%s)" % (atkCnt, freeCnt, itemAddCnt), playerID)
- return
-
atkTime = int(time.time())
+
+ fightPower = reqDataEx.get("fightPower", 1)
+ anger = reqDataEx.get("anger", 0)
+ atkCnt = reqDataEx.get("atkCnt", 0)
+ atkType = reqDataEx.get("atkType", AtkType_Normal)
+ boxContribCnt = reqDataEx.get("boxContribCnt", 0)
+ boxHurtTotal = reqDataEx.get("boxHurtTotal", 0)
+ boxHurtTotalHis = reqDataEx.get("boxHurtTotalHis", 0)
# 计算属性
gLayer, _ = GetFamilyBuzhenLayer(familyID)
maxLayer = IpyGameDataPY.GetFuncCfg("FamilyTaofaBuzhen", 3)
gLayer = min(gLayer, maxLayer) # 限制生效的最大布阵层数
- fightPower = PlayerControl.GetFightPower(curPlayer)
superRate = IpyGameDataPY.GetFuncCfg("FamilyTaofaBuzhen", 1)
superRatio = IpyGameDataPY.GetFuncCfg("FamilyTaofaAtk", 3) # 暴击伤害倍值
addSuperRatePerLayer, addDamPerLayer = IpyGameDataPY.GetFuncEvalCfg("FamilyTaofaBuzhen", 2)
@@ -393,13 +258,6 @@
faHurtTotal = GetFAHurtTotal(actionData) + GetFAHurtTotalEx(actionData) * ChConfig.Def_PerPointValue
GameWorld.DebugLog("faAtkCnt=%s,faHurtTotal=%s,faContribBoxCnt=%s" % (faAtkCnt, faHurtTotal, faContribBoxCnt), playerID)
- boxContribCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxContribCnt)
- boxHurt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxHurt)
- boxHurtEx = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtEx)
- boxHurtTotal = boxHurt + boxHurtEx * ChConfig.Def_PerPointValue
- boxHurtHis = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtHis)
- boxHurtHisEx = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtHisEx)
- boxHurtTotalHis = boxHurtHis + boxHurtHisEx * ChConfig.Def_PerPointValue
GameWorld.DebugLog("boxContribCnt=%s,boxHurtTotal=%s,boxHurtTotalHis=%s" % (boxContribCnt, boxHurtTotal, boxHurtTotalHis), playerID)
calcHurtCnt = 1 # 计算伤害次数
@@ -441,28 +299,36 @@
updContribBoxCnt = min(updContribBoxCnt + loopContribBoxCnt, contribBoxMax)
GameWorld.DebugLog("计算循环贡献宝箱: updContribBoxCnt=%s,loopHurtTotal=%s,loopNeedHurt=%s,loopContribBoxCnt=%s,contribBoxMax=%s"
% (updContribBoxCnt, loopHurtTotal, loopNeedHurt, loopContribBoxCnt, contribBoxMax), playerID)
+
+ setPlayerDict = {} # 更新玩家永久的字典值
+ setPlayerDayDict = {} # 更新玩家每日重置的字典值
addContribCnt = 0
if updContribBoxCnt > boxContribCnt:
addContribCnt = updContribBoxCnt - boxContribCnt
faContribBoxCnt += addContribCnt
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxContribCnt, updContribBoxCnt)
+ setPlayerDayDict[ChConfig.Def_Player_Dict_FamilyTaofaBoxContribCnt] = updContribBoxCnt
GameWorld.DebugLog("更新增加贡献宝箱: addContribCnt=%s,updContribBoxCnt=%s,faContribBoxCnt=%s" % (addContribCnt, updContribBoxCnt, faContribBoxCnt), playerID)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaAnger, anger)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurt, boxHurtTotal % ChConfig.Def_PerPointValue)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtEx, boxHurtTotal / ChConfig.Def_PerPointValue)
+ setPlayerDayDict[ChConfig.Def_Player_Dict_FamilyTaofaAnger] = anger
+ setPlayerDayDict[ChConfig.Def_Player_Dict_FamilyTaofaBoxHurt] = boxHurtTotal % ChConfig.Def_PerPointValue
+ setPlayerDayDict[ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtEx] = boxHurtTotal / ChConfig.Def_PerPointValue
if boxHurtTotal > boxHurtTotalHis:
boxHurtTotalHis = boxHurtTotal
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtHis, boxHurtTotalHis % ChConfig.Def_PerPointValue)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtHisEx, boxHurtTotalHis / ChConfig.Def_PerPointValue)
+ setPlayerDict[ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtHis] = boxHurtTotalHis % ChConfig.Def_PerPointValue
+ setPlayerDict[ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtHisEx] = boxHurtTotalHis / ChConfig.Def_PerPointValue
awardItemList = []
# 常规攻击: 给斩杀攻击奖励,加次数
if atkType == AtkType_Normal:
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaCnt, atkCnt + 1)
+ setPlayerDayDict[ChConfig.Def_Player_Dict_FamilyTaofaCnt] = atkCnt + 1
atkItemAwardList = IpyGameDataPY.GetFuncEvalCfg("FamilyTaofaAtk", 2) # 每次斩杀获得个人奖励列表 [[物品ID,个数], ...]
awardItemList += atkItemAwardList
- ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["FamilyTaofa", False, {}], isNotifyAward=False)
+
+ CrossPlayer.SetPlayerNomalDict(crossPlayer, setPlayerDayDict, True)
+ if setPlayerDict:
+ CrossPlayer.SetPlayerNomalDict(crossPlayer, setPlayerDayDict, False)
+ if awardItemList:
+ CrossPlayer.GivePlayerResources(crossPlayer, awardItemList, eventName="FamilyTaofa", isNotifyAward=False)
# 更新Action记录
SetFAAtkTime(actionData, atkTime)
@@ -470,19 +336,63 @@
SetFAHurtTotal(actionData, faHurtTotal % ChConfig.Def_PerPointValue)
SetFAHurtTotalEx(actionData, faHurtTotal / ChConfig.Def_PerPointValue)
SetFAContribBoxCnt(actionData, faContribBoxCnt)
- atkList = actionData.GetUserDict().get("atkList", [])
+ atkList = actionData.GetUserDict().get(UserKey_AtkList, [])
atkList.append([atkTime, addContribCnt, hurtTotal, atkType])
- actionData.GetUserDict().update({"atkList":atkList})
+ actionData.GetUserDict().update({UserKey_AtkList:atkList})
PlayerFamily.SendFamilyAction([actionData])
# 同步: 攻击 -> 宝箱 -> 其他
- SyncTaofaAtkRet(curPlayer, atkType, hurtList, awardItemList)
+ SyncTaofaAtkRet(crossPlayer, atkType, hurtList, awardItemList)
if addContribCnt:
- RefreshPlayerAwardBoxCnt(curFamily, unSyncIDList=[playerID])
- SyncTaofaInfo(curPlayer)
+ SyncMemContribInfo(curFamily)
return
-def GMAddMemTaofaAtk(curPlayer, curFamily, playerID, hurtValue, isAnger):
+def SyncMemContribInfo(curFamily, onlyIDList=[]):
+ memContribDict = GetMemContriBoxInfo(curFamily)
+ if not memContribDict:
+ return
+ CrossPlayer.SendToFamilyPlayer(curFamily.GetID(), ShareDefine.C2S_TaofaMemContrib, {"memContribDict":memContribDict},
+ onlyIDList=onlyIDList, havePlayerCall=__doUpdPlayerAwardBoxCnt)
+ return
+
+def GetFamilyBuzhenLayer(familyID):
+ ## 获取并刷新当前公会有效布阵层数
+ familyAction = DBDataMgr.GetFamilyActionMgr().GetFamilyAction(familyID, ActionType)
+ gActionData = familyAction.GetActionDataByValue1(ActionGlobalID, True)
+ gEndTime = GetFABuzhenEndTime(gActionData)
+ gLayer = GetFABuzhenLayer(gActionData)
+ if (gEndTime or gLayer) and int(time.time()) > gEndTime:
+ SetFABuzhenEndTime(gActionData, 0)
+ SetFABuzhenLayer(gActionData, 0)
+ #PlayerFamily.SendFamilyAction(gActionData) 失效不用同步,前端根据EndTime判断即可
+ gEndTime = 0
+ gLayer = 0
+ return gLayer, gActionData
+
+def GetMemContriBoxInfo(family):
+ ## 获取公会成员贡献宝箱记录
+ if not family:
+ return {}
+ familyID = family.GetID()
+ memContribDict = {}
+ familyAction = DBDataMgr.GetFamilyActionMgr().GetFamilyAction(familyID, ActionType)
+ for index in range(0, familyAction.Count()):
+ actionData = familyAction.At(index)
+ memID = GetFAPlayerID(actionData)
+ if memID == ActionGlobalID:
+ continue
+ contribList = []
+ atkList = actionData.GetUserDict().get("atkList", [])
+ for atkInfo in atkList:
+ atkTime = atkInfo[AtkIndex_AtkTime]
+ contribBoxCnt = atkInfo[AtkIndex_ContribBoxCnt]
+ if contribBoxCnt > 0:
+ contribList.append([atkTime, contribBoxCnt])
+ if contribList:
+ memContribDict[memID] = contribList
+ return memContribDict
+
+def GMAddMemTaofaAtk(crossPlayer, curFamily, playerID, hurtValue, isAnger):
## GM添加假的讨伐数据
familyID = curFamily.GetID()
@@ -540,7 +450,7 @@
addContribCnt = updContribBoxCnt - boxContribCnt
faContribBoxCnt += addContribCnt
- GameWorld.DebugAnswer(curPlayer, "讨伐ID:%s,伤:%s,箱:%s/%s,怒:%s" % (playerID, hurtValue, addContribCnt, updContribBoxCnt, int(isAnger)))
+ GameWorld.DebugAnswer(crossPlayer, "讨伐ID:%s,伤:%s,箱:%s/%s,怒:%s" % (playerID, hurtValue, addContribCnt, updContribBoxCnt, int(isAnger)))
# 更新Action记录
SetFAAtkTime(actionData, atkTime)
@@ -548,11 +458,139 @@
SetFAHurtTotal(actionData, faHurtTotal % ChConfig.Def_PerPointValue)
SetFAHurtTotalEx(actionData, faHurtTotal / ChConfig.Def_PerPointValue)
SetFAContribBoxCnt(actionData, faContribBoxCnt)
- atkList = actionData.GetUserDict().get("atkList", [])
+ atkList = actionData.GetUserDict().get(UserKey_AtkList, [])
atkList.append([atkTime, addContribCnt, hurtTotal, atkType])
- actionData.GetUserDict().update({"atkList":atkList})
+ actionData.GetUserDict().update({UserKey_AtkList:atkList})
return actionData
+
+def SyncTaofaAtkRet(crossPlayer, atkType, hurtList, awardItemList):
+ atkHurtList = []
+ for totalHurt, isSuper in hurtList:
+ atkHurt = ChPyNetSendPack.tagSCFamilyTaofaAtkHurt()
+ atkHurt.IsSuper = isSuper
+ atkHurt.HurtValue = totalHurt % ChConfig.Def_PerPointValue
+ atkHurt.HurtValueEx = totalHurt / ChConfig.Def_PerPointValue
+ atkHurtList.append(atkHurt)
+
+ itemList = []
+ for itemID, itemCount in awardItemList:
+ item = ChPyNetSendPack.tagSCFamilyTaofaAtkItem()
+ item.ItemID = itemID
+ item.Count = itemCount
+ itemList.append(item)
+
+ clientPack = ChPyNetSendPack.tagSCFamilyTaofaAtkRet()
+ clientPack.AtkType = atkType
+ clientPack.HurtList = atkHurtList
+ clientPack.HurtCount = len(clientPack.HurtList)
+ clientPack.ItemList = itemList
+ clientPack.ItemCount = len(clientPack.ItemList)
+ CrossPlayer.SendFakePack(crossPlayer, clientPack)
+ return
+
+## -----------------------------------以下为游戏服地图逻辑-------------------------------------------
+
+def PlayerOnDay(curPlayer):
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaCnt, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaItemAddCnt, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBuZhenState, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaAnger, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaLeaveGetCnt, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxTotalGetCnt, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxContribCnt, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurt, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtEx, 0)
+ SyncTaofaInfo(curPlayer)
+ return
+
+def OnPlayerLogin(curPlayer):
+ SyncTaofaInfo(curPlayer)
+ return
+
+def OnTaofaResetPlayer(curPlayer):
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaCnt, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaItemAddCnt, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBuZhenState, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaAnger, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaLeaveGetCnt, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxTotalGetCnt, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxContribCnt, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurt, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtEx, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtHis, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxHurtHisEx, 0)
+ SyncTaofaInfo(curPlayer)
+ return
+
+def OnPlayerLeaveFamily(curPlayer):
+ ## 玩家退出了公会,针对玩家个人的处理
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaAnger, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt, 0)
+ totalGetCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxTotalGetCnt)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaLeaveGetCnt, totalGetCnt)
+ GameWorld.DebugLog("退出公会记录讨伐已累计领取宝箱数: totalGetCnt=%s" % totalGetCnt)
+ SyncTaofaInfo(curPlayer)
+ return
+
+def C2S_TaofaMemContrib(dataMsg):
+ familyID = dataMsg["familyID"]
+ playerIDList = dataMsg["playerIDList"]
+ playerManager = GameWorld.GetPlayerManager()
+ for playerID in playerIDList:
+ curPlayer = playerManager.FindPlayerByID(playerID)
+ if curPlayer == None:
+ continue
+ __doUpdPlayerAwardBoxCnt(curPlayer, familyID, dataMsg)
+ return
+
+def __doUpdPlayerAwardBoxCnt(curPlayer, familyID, dataMsg):
+ memContribDict = dataMsg["memContribDict"]
+ playerFamilyID = curPlayer.GetFamilyID()
+ playerID = curPlayer.GetPlayerID()
+ joinTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyJoinTime)
+ if not joinTime or not playerFamilyID or playerFamilyID != familyID or not memContribDict:
+ return
+
+ awardBoxMax = IpyGameDataPY.GetFuncCfg("FamilyTaofaBox", 3)
+ leaveGetCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaLeaveGetCnt) # 上次离开公会时累计领取数
+ boxTotalGetCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxTotalGetCnt) # 已领取宝箱数
+ curFamilyGetCnt = boxTotalGetCnt - leaveGetCnt # 来到本公会后累计领取数
+ boxUnGetCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt) # 未领取宝箱数
+ canAddBoxMax = awardBoxMax - boxTotalGetCnt - boxUnGetCnt # 还可领取的箱子数
+ if canAddBoxMax <= 0:
+ GameWorld.DebugLog(" 成员可领取宝箱已达上限不刷新: playerID=%s,boxTotalGetCnt(%s)+boxUnGetCnt(%s) >= %s"
+ % (playerID, boxTotalGetCnt, boxUnGetCnt, awardBoxMax))
+ return
+
+ curFamilyCanGet = 0 # 在本公会累计可领取箱子数
+ for contribList in memContribDict.values():
+ for atkTime, contribBoxCnt in contribList:
+ if joinTime >= atkTime:
+ GameWorld.DebugLog(" 加入公会之前的箱子不能领取: joinTime=%s > atkTime(%s),contribBoxCnt=%s" % (joinTime, atkTime, contribBoxCnt))
+ continue
+ curFamilyCanGet += contribBoxCnt
+
+ addUnGetBox = min(curFamilyCanGet - curFamilyGetCnt - boxUnGetCnt, canAddBoxMax)
+ if addUnGetBox <= 0:
+ GameWorld.DebugLog(" 成员当前没有可领取的宝箱不刷新: playerID=%s,curFamilyCanGet=%s,curFamilyGetCnt=%s(%s-%s),boxUnGetCnt=%s,awardBoxMax=%s,canAddBoxMax=%s"
+ % (playerID, curFamilyCanGet, curFamilyGetCnt, boxTotalGetCnt, leaveGetCnt, boxUnGetCnt, awardBoxMax, canAddBoxMax))
+ return
+ updBoxUnGetCnt = boxUnGetCnt + addUnGetBox
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt, updBoxUnGetCnt)
+ GameWorld.DebugLog(" 成员可领取的宝箱数: playerID=%s,addUnGetBox=%s,updBoxUnGetCnt=%s,curFamilyCanGet=%s,curFamilyGetCnt=%s(%s-%s),boxUnGetCnt=%s,awardBoxMax=%s,canAddBoxMax=%s"
+ % (playerID, addUnGetBox, updBoxUnGetCnt, curFamilyCanGet, curFamilyGetCnt, boxTotalGetCnt, leaveGetCnt, boxUnGetCnt, awardBoxMax, canAddBoxMax))
+ SyncTaofaInfo(curPlayer)
+ return
+
+def AddTaofaCntByItem(curPlayer, addCnt):
+ ## 物品增加副本次数
+ itemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaItemAddCnt)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyTaofaItemAddCnt, itemAddCnt + addCnt)
+ SyncTaofaInfo(curPlayer)
+ return
def GetTaofaBoxAward(curPlayer):
boxUnGetCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTaofaBoxUnGetCnt)
@@ -599,27 +637,3 @@
NetPackCommon.SendFakePack(curPlayer, clientPack)
return
-def SyncTaofaAtkRet(curPlayer, atkType, hurtList, awardItemList):
- atkHurtList = []
- for totalHurt, isSuper in hurtList:
- atkHurt = ChPyNetSendPack.tagSCFamilyTaofaAtkHurt()
- atkHurt.IsSuper = isSuper
- atkHurt.HurtValue = totalHurt % ChConfig.Def_PerPointValue
- atkHurt.HurtValueEx = totalHurt / ChConfig.Def_PerPointValue
- atkHurtList.append(atkHurt)
-
- itemList = []
- for itemID, itemCount in awardItemList:
- item = ChPyNetSendPack.tagSCFamilyTaofaAtkItem()
- item.ItemID = itemID
- item.Count = itemCount
- itemList.append(item)
-
- clientPack = ChPyNetSendPack.tagSCFamilyTaofaAtkRet()
- clientPack.AtkType = atkType
- clientPack.HurtList = atkHurtList
- clientPack.HurtCount = len(clientPack.HurtList)
- clientPack.ItemList = itemList
- clientPack.ItemCount = len(clientPack.ItemList)
- NetPackCommon.SendFakePack(curPlayer, clientPack)
- return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 779b473..e0fb6cb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1047,6 +1047,7 @@
C2S_GivePlayerResources = "C2S_GivePlayerResources" # 奖励玩家资源,货币、物品等
C2S_SetPlayerNomalDict = "C2S_SetPlayerNomalDict" # 设置玩家字典值
C2S_SendPlayerMail = "C2S_SendPlayerMail" # 发送玩家个人邮件
+C2S_TaofaMemContrib = "C2S_TaofaMemContrib" # 讨伐成员贡献信息
# 游戏服 -> 跨服
S2C_OnlineState = "S2C_OnlineState" # 玩家在线状态同步
--
Gitblit v1.8.0