From b4b72d0c241ffc26dbbbd7a047578f1f4fead2f4 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 09 十二月 2021 16:11:53 +0800
Subject: [PATCH] 9341 【BT5】【主干】【后端】情缘系统(Couple命令增加添加喜糖宴会;修复多个喜糖宴会同时存在时吃喜糖同步错误bug)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py | 97 +++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 91 insertions(+), 6 deletions(-)
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 771b91a..3fbf392 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
@@ -28,6 +28,7 @@
import GameLogic_FamilyWar
import ChMapToGamePyPack
import PlayerFamilyTech
+import PlayerFamilyRedPacket
import SkillCommon
import BuffSkill
import ItemCommon
@@ -35,6 +36,7 @@
import GameFuncComm
import PlayerTJG
import IpyGameDataPY
+import cPickle
import time
import random
@@ -106,9 +108,11 @@
EventShell.EventResponse_OnFamilyLVUp(curPlayer)
if curPlayer.GetFamilyMemberLV() != refreshPack.GetFamilyMemberLV():
+ # 因为仙盟职位没有存DBPlayer,而跨服后又没有Family信息,所以这里做个存储,用于跨服用
+ curPlayer.SetReceivedSalary(refreshPack.GetFamilyMemberLV())
curPlayer.SetFamilyMemberLV(refreshPack.GetFamilyMemberLV())
#通知周围玩家家族职位刷新
- curPlayer.Notify_FamilyMemberLVRefresh()
+ #curPlayer.Notify_FamilyMemberLVRefresh()
GameLogic_FamilyWar.DoCheckChampionFamilyTitle(curPlayer)
if curPlayer.GetFamilyMoney() != refreshPack.GetFamilyMoney():
@@ -152,6 +156,7 @@
PlayerFamilyTech.Sync_PlayerFamilyTechLV(curPlayer)
DelAddFamilyRecord(curPlayer)
GameLogic_FamilyWar.DoCheckChampionFamilyTitle(curPlayer)
+ PlayerFamilyRedPacket.CreatCacheRedPacktet(curPlayer)
return
## 退出家族触发事件
@@ -184,7 +189,7 @@
def __OnFamilyLVBuffChange(curPlayer, tick):
return
# 跨服服务器不处理,防止登录跨服服务器后无战盟导致战力下降
- if GameWorld.IsMergeServer():
+ if GameWorld.IsCrossServer():
return
familyLVBuffSkillTypeID = ReadChConfig.GetEvalChConfig("FamilyLVBuff")
@@ -586,7 +591,7 @@
return
#请求记录申请进入家族信息
- sendMsg = str([familyID, curPlayer.GetFightPower()])
+ sendMsg = cPickle.dumps([familyID, PlayerControl.GetFightPower(curPlayer)], 2)
curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_AddFamilyAction,
ShareDefine.Def_ActionType_FamilyAdd, '', sendMsg, len(sendMsg))
@@ -630,6 +635,15 @@
PlayerFamilyTech.Sync_PlayerFamilyTechLV(curPlayer)
SyncFamilyActivityInfo(curPlayer)
Sync_FamilyDayRewardState(curPlayer)
+ return
+
+def FamilyPlayerOnLoginCross(curPlayer):
+ ## 登录跨服服务器
+ crossFamilyMemberLV = curPlayer.GetReceivedSalary()
+ if crossFamilyMemberLV:
+ curPlayer.SetFamilyMemberLV(crossFamilyMemberLV)
+ GameWorld.DebugLog("跨服登录设置仙盟职位等级: %s" % crossFamilyMemberLV, curPlayer.GetPlayerID())
+
return
@@ -732,7 +746,7 @@
## 添加家族事件记录
def AddFamilyEventNote(curPlayer, eventType, valueList):
##同步记录到GameServer, eventType默认为value1
- sendMsg = str([eventType] + valueList)
+ sendMsg = cPickle.dumps([eventType] + valueList, 2)
curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_AddFamilyAction, ShareDefine.Def_ActionType_FamilyEvent, '', sendMsg, len(sendMsg))
GameWorld.DebugLog("AddFamilyEventNote sendMsg=%s" % sendMsg)
return
@@ -753,6 +767,7 @@
# @param awardIndex
# @return None
def GetFamilyActivityAward(curPlayer, awardIndex):
+ return
familyActiveList = IpyGameDataPY.GetFuncEvalCfg('FamilyActive')
familyActiveAwardList = IpyGameDataPY.GetFuncEvalCfg('FamilyActive', 2)
if awardIndex < 0 or awardIndex >= len(familyActiveList):
@@ -788,6 +803,7 @@
return
def AddFamilyActivity(curPlayer, actionid, addCnt=1):
+ return
ipyData = IpyGameDataPY.GetIpyGameData('FamilyActivity', actionid)
if not ipyData:
return
@@ -815,6 +831,7 @@
return totalPoint
def SyncFamilyActivityInfo(curPlayer, syncActionid=-1):
+ return
#通知活跃领取情况
syncActionIDList = ShareDefine.FamilyActiveIDList if syncActionid==-1 else [syncActionid]
sendPack = ChPyNetSendPack.tagMCFamilyActivityInfo()
@@ -843,7 +860,7 @@
def UpdateFamilyName(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- if GameWorld.IsMergeServer():
+ if GameWorld.IsCrossServer():
#itemuse_lzxkoy_0:不可在跨服环境下使用改名功能。
PlayerControl.NotifyCode(curPlayer, "itemuse_lzxkoy_0")
return
@@ -915,4 +932,72 @@
clientPack = ChPyNetSendPack.tagMCFamilyDayAward()
clientPack.GetState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyDayAward)
NetPackCommon.SendFakePack(curPlayer, clientPack)
- return
\ No newline at end of file
+ return
+
+
+#// A6 06 家族兑换活跃令 #tagCMFamilyActivityExchange
+#
+#struct tagCMFamilyActivityExchange
+#{
+# tagHead Head;
+# BYTE Count; //材料所在背包索引的数量
+# WORD IndexList[Count]; //材料所在背包索引列表
+# DWORD ItemIDList[Count]; //材料所在背包物品ID列表
+#};
+## 家族兑换活跃令
+# @param playerIndex 玩家索引
+# @param clientData 客户端封包
+# @param tick 时间
+# @return None
+def OnFamilyActivityExchange(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ if not clientData.Count:
+ return
+ playerID = curPlayer.GetID()
+ eatIndexList = clientData.IndexList
+ eatItemIDList = clientData.ItemIDList
+ givePoint = 0 #分解得到活跃令
+ familyDonateDict = IpyGameDataPY.GetFuncEvalCfg('FamilyDonate', 1, {})
+ familyDonateSpecialDict = IpyGameDataPY.GetFuncEvalCfg('FamilyDonate', 2, {})
+ itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+ for i, index in enumerate(eatIndexList):
+ eatItem = itemPack.GetAt(index)
+ if not ItemCommon.CheckItemCanUse(eatItem):
+ GameWorld.DebugLog("物品不可用,无法兑换!itemIndex=%s" % index)
+ continue
+ eatItemID = eatItem.GetItemTypeID()
+ if eatItemID != eatItemIDList[i]:
+ GameWorld.Log('家族兑换活跃令 发的物品ID不对应index=%s eatItemID=%s,ItemIDList[i]=%s' % (index, eatItemID, eatItemIDList[i]), playerID)
+ continue
+ #if eatItem.GetIsBind():
+ # GameWorld.DebugLog("装备已绑定,无法兑换!itemIndex=%s" % index)
+ # continue
+ if eatItem.GetEndureReduceType():
+ GameWorld.DebugLog("有时效耐久物品,无法兑换!itemIndex=%s" % index)
+ continue
+ if eatItemID in familyDonateSpecialDict:
+ addPoint = familyDonateSpecialDict[eatItemID]
+ else:
+ if not ItemCommon.CheckItemIsEquip(eatItem):
+ GameWorld.DebugLog("非装备,无法兑换!itemIndex=%s" % index)
+ continue
+ itemColor = eatItem.GetItemColor()
+ if str(itemColor) not in familyDonateDict:
+ continue
+ isSuite = eatItem.GetSuiteID()
+ addPoint = familyDonateDict[str(itemColor)][1 if isSuite else 0]
+ itemCnt = eatItem.GetCount()
+ givePoint += addPoint * itemCnt
+ ItemCommon.DelItem(curPlayer, eatItem, itemCnt, True, ChConfig.ItemDel_FamilyStore, {'addPoint':addPoint}, True)
+
+ if not givePoint:
+ GameWorld.DebugLog("家族兑换活跃令,没有装备可兑换!")
+ return
+ PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_FamilyActivity, givePoint)
+
+ #通知结果
+ packData = ChPyNetSendPack.tagMCFamilyActivityExchangeResult()
+ packData.Clear()
+ packData.Point = givePoint
+ NetPackCommon.SendFakePack(curPlayer, packData)
+ return
--
Gitblit v1.8.0