From 1d3b44ba8b959cb66322d896efd3a03f6ee03feb Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 10 十二月 2021 14:13:46 +0800
Subject: [PATCH] 9341 【BT5】【主干】【后端】情缘系统(1.删除拉黑伴侣限制提示;2.邮件支持配置物品邮件过天不删除;3.礼物魅力字段改为支持小数;4.合服首登同步魅力榜)
---
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 8 ++--
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py | 4 +-
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py | 3 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 5 ++
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerCharm.py | 15 +++++++
ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py | 9 +++-
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFriend.py | 6 ++-
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerCompensation.py | 16 ++++---
PySysDB/PySysDBG.h | 4 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 1
10 files changed, 49 insertions(+), 22 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index cb665b4..45f0def 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -867,8 +867,8 @@
struct tagLoveGift
{
BYTE _GiftNum; //聘礼ID
- DWORD AddCharmSelf; //单个增加自身魅力
- DWORD AddCharmTag; //单个增加对方魅力
+ float AddCharmSelf; //单个增加自身魅力
+ float AddCharmTag; //单个增加对方魅力
DWORD AddIntimacy; //单个增加双方亲密度
char WorldNotifyKey; //广播key
};
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index cf44f8f..5b3fffb 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -710,8 +710,8 @@
"LoveGift":(
("BYTE", "GiftNum", 1),
- ("DWORD", "AddCharmSelf", 0),
- ("DWORD", "AddCharmTag", 0),
+ ("float", "AddCharmSelf", 0),
+ ("float", "AddCharmTag", 0),
("DWORD", "AddIntimacy", 0),
("char", "WorldNotifyKey", 0),
),
@@ -2211,8 +2211,8 @@
def __init__(self):
self.GiftNum = 0
- self.AddCharmSelf = 0
- self.AddCharmTag = 0
+ self.AddCharmSelf = 0.0
+ self.AddCharmTag = 0.0
self.AddIntimacy = 0
self.WorldNotifyKey = ""
return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
index 1a784f9..efcbdec 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -202,13 +202,13 @@
return
-def DoPlayerRealLoginOK(curPlayer, tick):
+def DoPlayerRealLoginOK(curPlayer, loginMsg, tick):
''' 玩家最终登录成功处理, 由 MapServer DoPlayerRealLoginOK 通知
该函数为地图最终登录成功才会执行到,以后一些功能类的登录处理建议均写到这里
旧的功能先不动( __DoPlayerLoginServer 函数中的功能),如果有登录相关的bug再考虑是否移动到此函数
'''
-
- GameWorld.Log("GameServer->DoPlayerRealLoginOK", curPlayer.GetPlayerID())
+ isMixServerFirstLogin = loginMsg[0]
+ GameWorld.Log("GameServer->DoPlayerRealLoginOK, isMixServerFirstLogin=%s" % isMixServerFirstLogin, curPlayer.GetPlayerID())
if not PlayerControl.GetIsTJG(curPlayer):
#家族副本boss状态通知
@@ -218,6 +218,9 @@
#情缘
PlayerLove.OnPlayerLogin(curPlayer)
+ if isMixServerFirstLogin:
+ PlayerCharm.OnMixServerFirstLogin(curPlayer)
+
return
def __UpdOnedayJobPlayerLoginoffTime(curPlayer):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerCharm.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerCharm.py
index fa0e9b7..dd31438 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerCharm.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerCharm.py
@@ -126,6 +126,21 @@
Sync_PlayerCharmInfo(curPlayer)
return
+def OnMixServerFirstLogin(curPlayer):
+ playerID = curPlayer.GetPlayerID()
+ charmValueRecMgr = PyDataManager.GetDBPyCharmValueRecManager()
+ if playerID not in charmValueRecMgr.charmTotalDict:
+ return
+ recTypeValueDict = charmValueRecMgr.charmTotalDict.get(playerID, {})
+ charmTotal = recTypeValueDict.get(CharmValueRecType_Total, 0)
+ charmWeek = recTypeValueDict.get(CharmValueRecType_Week, 0)
+ charmDay = recTypeValueDict.get(CharmValueRecType_Day, 0)
+ GameWorld.Log("合服首登同步魅力榜单: charmTotal=%s,charmWeek=%s,charmDay=%s" % (charmTotal, charmWeek, charmDay), playerID)
+ PlayerBillboard.UpdatePlayerBillboardEx(curPlayer, playerID, ShareDefine.Def_BT_CharmTotal, charmTotal)
+ PlayerBillboard.UpdatePlayerBillboardEx(curPlayer, playerID, ShareDefine.Def_BT_CharmWeek, charmWeek)
+ PlayerBillboard.UpdatePlayerBillboardEx(curPlayer, playerID, ShareDefine.Def_BT_CharmDay, charmDay)
+ return
+
def GetPlayerCharmOfferSortList(playerID, recType):
## 获取排序后的玩家魅力贡献榜
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerCompensation.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerCompensation.py
index 97cba28..464f830 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerCompensation.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerCompensation.py
@@ -1234,13 +1234,15 @@
mailText = curMail.Text
# 通知类模板邮件,过天可直接删除
if tempSign in mailText and tempSignEnd in mailText and CheckCanDelCompensation(curMail, curMail.GUID):
- #tempKey = mailText[mailText.index(tempSign) + len(tempSign):mailText.index(tempSignEnd)]
- #GameWorld.DebugLog("过天删除无附件通知类邮件模板! tempKey=%s %s, %s" % (tempKey, curMail.PlayerID, curMail.GUID))
- needClearGUIDList.append([curMail.PlayerID, curMail.GUID])
- player = GameWorld.GetPlayerManager().FindPlayerByID(curMail.PlayerID)
- if player and player.GetInitOK():
- NotifyCompensationResult(player, curMail.GUID, 1)
- continue
+ tempKey = mailText[mailText.index(tempSign) + len(tempSign):mailText.index(tempSignEnd)]
+ notClearMailKeyList = IpyGameDataPY.GetFuncEvalCfg("MailSet", 1)
+ if tempKey not in notClearMailKeyList:
+ #GameWorld.DebugLog("过天删除无附件通知类邮件模板! tempKey=%s %s, %s" % (tempKey, curMail.PlayerID, curMail.GUID))
+ needClearGUIDList.append([curMail.PlayerID, curMail.GUID])
+ player = GameWorld.GetPlayerManager().FindPlayerByID(curMail.PlayerID)
+ if player and player.GetInitOK():
+ NotifyCompensationResult(player, curMail.GUID, 1)
+ continue
# 超过接收邮件30天则完全删除此邮件
limitTime = datetime.datetime.strptime(curMail.CreateTime, ChConfig.TYPE_Time_Format) + datetime.timedelta(days = 30)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFriend.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFriend.py
index f8cadde..fd8589d 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFriend.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFriend.py
@@ -216,7 +216,8 @@
couple = PyDataManager.GetDBPyCoupleManager().GetCouple(playerID)
if couple and couple.GetCoupleID(playerID) == friendID:
- GameWorld.Log('DeleteFriend -> 封包异常 ->伴侣不能删除好友.friendID=%s' % friendID, playerID)
+ #GameWorld.Log('DeleteFriend -> 封包异常 ->伴侣不能删除好友.friendID=%s' % friendID, playerID)
+ PlayerControl.NotifyCode(curPlayer, "DelFriendCoupleLimit")
return
#离线好友同时删除记录
@@ -402,7 +403,8 @@
couple = PyDataManager.GetDBPyCoupleManager().GetCouple(curPlayer.GetID())
if couple and couple.GetCoupleID(curPlayer.GetID()) == tagID:
- GameWorld.DebugLog("伴侣不能加入黑名单! tagID=%s" % tagID, curPlayer.GetID())
+ #GameWorld.DebugLog("伴侣不能加入黑名单! tagID=%s" % tagID, curPlayer.GetID())
+ PlayerControl.NotifyCode(curPlayer, "AddBlackCoupleLimit")
return
tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagID)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py
index 019ac6e..bb25a91 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py
@@ -796,8 +796,8 @@
if not ipyData:
return
- addCharmSelf = ipyData.GetAddCharmSelf() * giftCount
- addCharmTag = ipyData.GetAddCharmTag() * giftCount
+ addCharmSelf = int(ipyData.GetAddCharmSelf() * giftCount)
+ addCharmTag = int(ipyData.GetAddCharmTag() * giftCount)
addIntimacy = ipyData.GetAddIntimacy() * giftCount
worldNotifyKey = ipyData.GetWorldNotifyKey()
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
index 6159577..e3a8409 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
@@ -503,7 +503,8 @@
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
if not curPlayer:
return
- ChPlayer.DoPlayerRealLoginOK(curPlayer, tick)
+ loginMsg = eval(resultName)
+ ChPlayer.DoPlayerRealLoginOK(curPlayer, loginMsg, tick)
return
if callName == "SendMail":
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index d355b3a..d92cdd9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3133,6 +3133,7 @@
Def_PlayerKey_LoadMapIsLogin = 'LoadMapIsLogin' # 本次进入地图是否是登录的
Def_PlayerKey_NotifyAllAttrState = 'NotifyAllAttrState' # 是否同步过所有属性,切图时第一次刷属性需要同步
Def_PlayerKey_LoginTick = 'PlayerKey_LoginTick' # 玩家上线的当前服务器tick
+Def_PlayerKey_MixServerFirstLogin = 'MixServerFirstLogin' # 本次登录是否是合服首登
Def_PlayerKey_CalcOLTimeTick = 'CalcOLTimeTick' # 上一次计算累计在线时长tick
Def_PlayerKey_SitForZhenQi = 'PlayerKey_SitForZhenQi' # 打坐真气恢复时间
Def_PlayerKey_Muse = 'PlayerKey_Muse' # 冥想恢复时间
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 3f8bc7c..47807a9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -873,7 +873,8 @@
GameWorld.Log("MapServer->DoPlayerRealLoginOK", curPlayer.GetPlayerID())
# 通知GameServer地图最终登录成功了
- msg = ""
+ isMixServerFirstLogin = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MixServerFirstLogin)
+ msg = str([isMixServerFirstLogin])
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "PlayerRealLoginOK", msg, len(msg))
return
@@ -913,6 +914,8 @@
GameWorld.Log(" 新号不给合服奖励!", playerID)
return
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_MixServerFirstLogin, 1)
+
# 重置首充双倍
PlayerCoin.DoResetCTGCount(curPlayer, "MixServer")
--
Gitblit v1.8.0