From 01a0e539b786ae0f1c46646874502367f5410aca Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 04 二月 2026 18:18:51 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(优化游戏服及跨服启动、通讯逻辑;服务器类型增加跨服中心、跨服事件、时间管理;跨服玩家在线状态、基础信息、玩家资源增减管理、发送跨服个人邮件等;跨服公会初版,修复公会成员审核、成员战力刷新等bug,增加公会名次同步;跨服公会暂未测试;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyZhenbaoge.py |   91 +++++++++++++++++++++++++++++----------------
 1 files changed, 59 insertions(+), 32 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyZhenbaoge.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyZhenbaoge.py
index b06784e..44cd284 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyZhenbaoge.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyZhenbaoge.py
@@ -20,9 +20,9 @@
 import IpyGameDataPY
 import NetPackCommon
 import ChPyNetSendPack
-import ItemControler
 import PlayerControl
 import PlayerFamily
+import CrossPlayer
 import GameWorld
 import DBDataMgr
 
@@ -205,9 +205,37 @@
 #};
 def OnZhenbaogeOP(index, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    opType = clientData.OpType
     playerID = curPlayer.GetPlayerID()
-    familyID = curPlayer.GetFamilyID()
+    opType = clientData.OpType
+    
+    reqDataEx = {}
+    # 砍价
+    if opType == 0:
+        leaveTimeEx = PlayerControl.GetLeaveFamilyTimeEx(curPlayer)
+        cutState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyZhenbaogeCut)
+        if cutState and leaveTimeEx:
+            cutCDTimes = IpyGameDataPY.GetFuncCfg("Zhenbaoge", 3) * 60
+            passTimes = int(time.time()) - leaveTimeEx
+            if passTimes < cutCDTimes:
+                GameWorld.DebugLog("今日已砍价变更仙盟砍价CD中! passTimes=%s < %s" % (passTimes, cutCDTimes), playerID)
+                return
+        reqDataEx["cutState"] = cutState
+    # 购买
+    elif opType == 1:
+        buyState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyZhenbaogeBuy)
+        if buyState:
+            GameWorld.DebugLog("珍宝阁今日已购买!", playerID)
+            return
+        moneyType = IpyGameDataPY.GetFuncCfg("Zhenbaoge", 1)
+        playerMoneyValue = PlayerControl.GetMoney(curPlayer, moneyType)
+        reqDataEx["playerMoneyValue"] = playerMoneyValue
+        
+    PlayerFamily.FamilyPyPackForwarding(curPlayer, clientData, tick, "PlayerFamilyZhenbaoge.__OnZhenbaogeOP", True, 20, reqDataEx=reqDataEx)
+    return
+def __OnZhenbaogeOP(crossPlayer, clientData, tick, fromServerID=0, reqDataEx=None):
+    opType = clientData.OpType
+    playerID = crossPlayer.GetPlayerID()
+    familyID = crossPlayer.GetFamilyID()
     if not familyID:
         GameWorld.DebugLog("没有仙盟无法操作珍宝阁!", playerID)
         return
@@ -219,35 +247,31 @@
         GameWorld.DebugLog("珍宝阁还没有刷新! familyID=%s" % familyID, playerID)
         return
     
+    if not reqDataEx:
+        return
+    
     # 砍价
     if opType == 0:
-        leaveTimeEx = PlayerControl.GetLeaveFamilyTimeEx(curPlayer)
-        cutState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyZhenbaogeCut)
-        if cutState and leaveTimeEx:
-            cutCDTimes = IpyGameDataPY.GetFuncCfg("Zhenbaoge", 3) * 60
-            passTimes = int(time.time()) - leaveTimeEx
-            if passTimes < cutCDTimes:
-                GameWorld.DebugLog("今日已砍价变更仙盟砍价CD中! passTimes=%s < %s" % (passTimes, cutCDTimes), playerID)
-                return
-            
+        cutState = reqDataEx["cutState"]
+        
         cutPrice = CalcCutPrice(curFamily, gActionData, playerID)
         if not cutPrice:
             return
         
-        AddCutPrice(familyID, playerID, curPlayer.GetName(), cutPrice, gActionData)
-        PlayerControl.NotifyCode(curPlayer, "ZhenbaogeCut", [cutPrice])
-        if not curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyZhenbaogeCut):
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyZhenbaogeCut, 1)
-            Sync_ZhenbaogeInfo(curPlayer)
+        AddCutPrice(familyID, playerID, crossPlayer.GetPlayerName(), cutPrice, gActionData)
+        CrossPlayer.NotifyCode(crossPlayer, "ZhenbaogeCut", [cutPrice])
+        if not cutState:
+            CrossPlayer.SetPlayerNomalDict(crossPlayer, {ChConfig.Def_Player_Dict_FamilyZhenbaogeCut:1}, True)
+            #Sync_ZhenbaogeInfo(crossPlayer)
             
     # 购买
     elif opType == 1:
-        buyState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyZhenbaogeBuy)
-        if buyState:
-            GameWorld.DebugLog("珍宝阁今日已购买!", playerID)
-            return
+        #buyState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyZhenbaogeBuy)
+        #if buyState:
+        #    GameWorld.DebugLog("珍宝阁今日已购买!", playerID)
+        #    return
         moneyType = IpyGameDataPY.GetFuncCfg("Zhenbaoge", 1)
-        playerMoneyValue = PlayerControl.GetMoney(curPlayer, moneyType)
+        playerMoneyValue = reqDataEx["playerMoneyValue"]
         
         actionData = GetZhenbaogeActionData(familyID, playerID)
         if not actionData:
@@ -269,22 +293,25 @@
         SetFABuyState(actionData, 1)
         PlayerFamily.SendFamilyAction(actionData)
         
+        moneyDict = {moneyType:0} # 奖励货币
         if nowPrice > 0:
-            if not PlayerControl.PayMoney(curPlayer, moneyType, nowPrice, "Zhenbaoge"):
-                GameWorld.ErrLog("珍宝阁购买货币不足! nowPrice=%s" % nowPrice, playerID)
-                return
+            CrossPlayer.CostPlayerResources(crossPlayer, "Zhenbaoge", {moneyType:nowPrice})
         elif nowPrice < 0:
-            PlayerControl.GiveMoney(curPlayer, moneyType, -nowPrice, "Zhenbaoge")
+            moneyDict[moneyType] = -nowPrice
         else: # 0不处理
             pass
         
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyZhenbaogeBuy, 1)
-        Sync_ZhenbaogeInfo(curPlayer)
+        CrossPlayer.SetPlayerNomalDict(crossPlayer, {ChConfig.Def_Player_Dict_FamilyZhenbaogeBuy:1}, True)
+        #Sync_ZhenbaogeInfo(curPlayer)
         
-        if giveItemList:
-            ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList, event=["Zhenbaoge", False, {}], isNotifyAward=False)
-        ItemControler.NotifyGiveAwardInfo(curPlayer, giveItemList, "Zhenbaoge", moneyInfo={moneyType:0 if nowPrice > 0 else -nowPrice})
-                
+        CrossPlayer.GivePlayerResources(crossPlayer, giveItemList, moneyDict, eventName="Zhenbaoge")
+        
+    return True
+
+def __OnZhenbaogeOP_Ret(curPlayer, clientData, isOK):
+    if not isOK:
+        return
+    Sync_ZhenbaogeInfo(curPlayer)
     return
 
 def Sync_ZhenbaogeInfo(curPlayer):

--
Gitblit v1.8.0