From 39821284a5372dce91658b8b9dfffc217a0f96f8 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 23 十月 2020 16:14:53 +0800
Subject: [PATCH] 8415 【BT开发】]初始赠送 / 【后端】新号上线赠送物品
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py | 320 ++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 230 insertions(+), 90 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py
index 6e8d033..c7b1261 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py
@@ -18,16 +18,21 @@
import PyDataManager
import ChConfig
import EventReport
-import ChPyNetSendPack
-import NetPackCommon
import PlayerFamilyParty
import ChPyNetSendPack
import ShareDefine
import PlayerViewCache
+import CrossRealmPlayer
+import CrossRealmMsg
import ChNetSendPack
import NetPackCommon
import PlayerGeTui
+import PyGameData
+
import re
+import time
+import IpyGameDataPY
+
g_ChatMi = {} # 离线聊天记录 {玩家ID:[信息]} 一个玩家最多8条
@@ -86,7 +91,7 @@
curCache = None
tagPlayerName = ""
if tagPlayer == None:
- curCache = PlayerViewCache.ViewCacheMgr.FindCache(tagPlayerID)
+ curCache = PlayerViewCache.FindViewCache(tagPlayerID)
if not curCache:
PlayerControl.NotifyCode(curPlayer, "CanootTalk10")
return
@@ -98,7 +103,7 @@
return
if curCache:
- cacheDict = eval(curCache.GetPropData())
+ cacheDict = PlayerViewCache.GetCachePropDataDict(curCache)
tagPlayerName = cacheDict["Name"]
talkType = sendPack.GetTalkType()
@@ -142,7 +147,7 @@
g_ChatMi[tagPlayerID].pop(0)
return
- PlayerGeTui.ChatMiGeTui(tagPlayerID, tagPlayerName, curPlayer.GetName())
+ #PlayerGeTui.ChatMiGeTui(tagPlayerID, tagPlayerName, curPlayer.GetName())
# 登录时将离线消息下发
def LoginChatMi(curPlayer):
@@ -160,6 +165,66 @@
NetPackCommon.SendFakePack(curPlayer, chatPack)
return
+## 国家频(封包参数)
+# @param index 玩家索引
+# @param tick 当前时间
+# @return None
+# @remarks 函数详细说明.
+def ChatCountry(index, tick):
+ ## 跨服频道
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ sendPack = IPY_GameServer.IPY_GTalkCountry()
+ content = sendPack.GetContent()
+ extraValue = sendPack.GetExtraValue()
+ extras = sendPack.GetExtras()
+ crossPlayerName = CrossRealmPlayer.GetCrossPlayerName(curPlayer)
+
+ ## 发送到跨服服务器,直接使用跨服boss的分区配置
+ dataMsg = {"PlayerID":playerID, "Name":crossPlayerName, "Content":content, "ExtraValue":extraValue, "Extras":extras}
+ CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ChatCrossWorld, dataMsg)
+ return
+
+def ClientServerMsg_ChatCrossWorld(serverGroupID, msgData, tick):
+ ## 收到子服跨服世界频道聊天
+ zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByServerGroupID(0, serverGroupID)
+ if not zoneIpyData:
+ return
+ serverGroupIDList = zoneIpyData.GetServerGroupIDList()
+ CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_ChatCrossWorld, msgData, serverGroupIDList)
+ return
+
+def CrossServerMsg_ChatCrossWorld(msgData):
+ ## 收到跨服世界频道聊天
+
+ playerID = msgData["PlayerID"]
+ crossPlayerName = msgData["Name"]
+ content = msgData["Content"]
+ extraValue = msgData["ExtraValue"]
+ extras = msgData["Extras"]
+
+ sendPack = ChNetSendPack.tagTalkCountry()
+ sendPack.Clear()
+ sendPack.Name = crossPlayerName
+ sendPack.NameLen = len(sendPack.Name)
+ sendPack.PlayerID = playerID
+ sendPack.Content = content
+ sendPack.Len = len(sendPack.Content)
+ sendPack.ExtraValue = extraValue
+ sendPack.Extras = extras
+
+ # 全服广播在线玩家
+ playerManager = GameWorld.GetPlayerManager()
+ for i in xrange(playerManager.GetActivePlayerCount()):
+ player = playerManager.GetActivePlayerAt(i)
+ if player == None:
+ continue
+ if PlayerControl.GetIsTJG(player):
+ continue
+ NetPackCommon.SendFakePack(player, sendPack)
+ #curPlayer.ChatCountry(content, extraValue, extras)
+ return
+
## 公频(封包参数)
# @param index 玩家索引
# @param tick 当前时间
@@ -172,7 +237,8 @@
extraValue = sendPack.GetExtraValue()
extras = sendPack.GetExtras()
curPlayer.ChatGong(content, extraValue, extras)
-
+ #缓存
+ DoTalkCache(0, curPlayer.GetName(), curPlayer.GetPlayerID(), content, extras)
return
@@ -210,6 +276,8 @@
curPlayer.ChatFamily(content, extraValue, extras)
#仙盟宴会答题
PlayerFamilyParty.OnTalkFamily(curPlayer, content, tick)
+ #缓存
+ DoTalkCache(curPlayer.GetFamilyID(), curPlayer.GetName(), curPlayer.GetPlayerID(), content, extras)
return
@@ -223,12 +291,6 @@
# 跨服喇叭
if SpeakerType == 2:
pass
- #=======================================================================
- # playerName = PlayerControl.GetMergePlayerName(accID, playerName) # 转化为跨服的名字
- # dataMsg = [accID, 0, playerName, SpeakerType, Text, extraValue, extras]
- # MergeChildMsg.SendMergerChildToCenterStringData(ChConfig.Def_SendMergeLoudspeaker, dataMsg)
- # GameWorld.Log("发送跨服喇叭聊天: accID=%s,Text=%s" % (accID, Text), playerID)
- #=======================================================================
else:
#GameWorld.DebugLog("发送本服喇叭聊天: accID=%s,Text=%s" % (accID, Text), playerID)
@@ -288,83 +350,83 @@
# };
#===============================================================================
def OnVoiceChat(index, clientPack, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- if not CheckTalk(curPlayer, tick):
- return
-
- sendPack = ChPyNetSendPack.tagGCVoiceChat()
- sendPack.Clear()
- sendPack.ChannelType = clientPack.ChannelType
- sendPack.SrcName = curPlayer.GetName()
- sendPack.SrcNameLen = len(curPlayer.GetName())
- sendPack.PlayerID = curPlayer.GetID()
- sendPack.Len = clientPack.Len
- sendPack.Content = clientPack.Content
- sendPack.Extras = GetTalkExtraValue(curPlayer)
- sendPack.ExtraValue = len(sendPack.Extras)
-
- playerManager = GameWorld.GetPlayerManager()
- if clientPack.ChannelType == ShareDefine.Def_ChannelChat_World:
- # 世界频道
- curPlayer.BroadCastAll(sendPack.GetBuffer(), len(sendPack.GetBuffer()))
- elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Family:
- # 家族频道
- curFamily = curPlayer.GetFamily()
- if curFamily == None:
- return
- for i in range(0, curFamily.GetCount()):
- notifyMember = curFamily.GetAt(i)
- notifyPlayer = playerManager.FindPlayerByID(notifyMember.GetPlayerID())
-
- if notifyPlayer == None or not notifyPlayer.GetInitOK():
- continue
-
- if PlayerControl.GetIsTJG(notifyPlayer):
- continue
- #===================================================================
- # if notifyPlayer.GetPlayerID() == curPlayer.GetPlayerID():
- # #不包括自己
- # continue
- #===================================================================
-
- NetPackCommon.SendFakePack(notifyPlayer, sendPack)
- elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Team:
- # 队伍
- curTeam = curPlayer.GetTeam()
- if curTeam == None:
- return
- for index in xrange(curTeam.GetMemberCount()):
- curMember = curTeam.GetMemberPlayer(index)
- if not curMember or not curMember.GetPlayerID():
- continue
-
- #===================================================================
- # if curMember.GetPlayerID() == curPlayer.GetPlayerID():
- # #不包括自己
- # continue
- #===================================================================
-
- if PlayerControl.GetIsTJG(curMember):
- continue
- NetPackCommon.SendFakePack(curMember, sendPack)
-
- elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Private:
- # 私聊
- tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(clientPack.TargetID)
- if not tagPlayer:
- tagPlayer = GameWorld.GetPlayerManager().FindPlayerByName(clientPack.TargetName)
- if tagPlayer == None:
- return
-
- # 黑名单检查
- if PyDataManager.GetBlacklistManager().CheckBlacklistBoth(curPlayer.GetID(), tagPlayer.GetID(), curPlayer):
- return
-
- sendPack.ToName = tagPlayer.GetName()
- sendPack.ToNameLen = len(tagPlayer.GetName())
- sendPack.ToPlayerID = tagPlayer.GetID()
- NetPackCommon.SendFakePack(tagPlayer, sendPack)
- NetPackCommon.SendFakePack(curPlayer, sendPack)
+# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+# if not CheckTalk(curPlayer, tick):
+# return
+#
+# sendPack = ChPyNetSendPack.tagGCVoiceChat()
+# sendPack.Clear()
+# sendPack.ChannelType = clientPack.ChannelType
+# sendPack.SrcName = curPlayer.GetName()
+# sendPack.SrcNameLen = len(curPlayer.GetName())
+# sendPack.PlayerID = curPlayer.GetID()
+# sendPack.Len = clientPack.Len
+# sendPack.Content = clientPack.Content
+# sendPack.Extras = GetTalkExtraValue(curPlayer)
+# sendPack.ExtraValue = len(sendPack.Extras)
+#
+# playerManager = GameWorld.GetPlayerManager()
+# if clientPack.ChannelType == ShareDefine.Def_ChannelChat_World:
+# # 世界频道
+# curPlayer.BroadCastAll(sendPack.GetBuffer(), len(sendPack.GetBuffer()))
+# elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Family:
+# # 家族频道
+# curFamily = curPlayer.GetFamily()
+# if curFamily == None:
+# return
+# for i in range(0, curFamily.GetCount()):
+# notifyMember = curFamily.GetAt(i)
+# notifyPlayer = playerManager.FindPlayerByID(notifyMember.GetPlayerID())
+#
+# if notifyPlayer == None or not notifyPlayer.GetInitOK():
+# continue
+#
+# if PlayerControl.GetIsTJG(notifyPlayer):
+# continue
+# #===================================================================
+# # if notifyPlayer.GetPlayerID() == curPlayer.GetPlayerID():
+# # #不包括自己
+# # continue
+# #===================================================================
+#
+# NetPackCommon.SendFakePack(notifyPlayer, sendPack)
+# elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Team:
+# # 队伍
+# curTeam = curPlayer.GetTeam()
+# if curTeam == None:
+# return
+# for index in xrange(curTeam.GetMemberCount()):
+# curMember = curTeam.GetMemberPlayer(index)
+# if not curMember or not curMember.GetPlayerID():
+# continue
+#
+# #===================================================================
+# # if curMember.GetPlayerID() == curPlayer.GetPlayerID():
+# # #不包括自己
+# # continue
+# #===================================================================
+#
+# if PlayerControl.GetIsTJG(curMember):
+# continue
+# NetPackCommon.SendFakePack(curMember, sendPack)
+#
+# elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Private:
+# # 私聊
+# tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(clientPack.TargetID)
+# if not tagPlayer:
+# tagPlayer = GameWorld.GetPlayerManager().FindPlayerByName(clientPack.TargetName)
+# if tagPlayer == None:
+# return
+#
+# # 黑名单检查
+# if PyDataManager.GetBlacklistManager().CheckBlacklistBoth(curPlayer.GetID(), tagPlayer.GetID(), curPlayer):
+# return
+#
+# sendPack.ToName = tagPlayer.GetName()
+# sendPack.ToNameLen = len(tagPlayer.GetName())
+# sendPack.ToPlayerID = tagPlayer.GetID()
+# NetPackCommon.SendFakePack(tagPlayer, sendPack)
+# NetPackCommon.SendFakePack(curPlayer, sendPack)
return
@@ -384,7 +446,11 @@
# job
extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_JOB)% job
# 气泡框
- extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_BubbleBox) % PlayerControl.GetChatBubbleBox(objTalk)
+ extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_BubbleBox) % PlayerControl.GetChatBubbleBox(player)
+ # 服务器组ID
+ extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_ServerGroupID) % PlayerControl.GetPlayerServerGroupID(player)
+ # 等级
+ extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_LV) % player.GetLV()
return extraValueStr
@@ -409,3 +475,77 @@
return True
+
+def DoTalkCache(familyID, name, playerID, content, extras):
+ #仙盟、世界频道聊天缓存
+ curTime = int(time.time())
+ saveInfo = [curTime, name, playerID, content, extras]
+ if familyID:
+ if familyID not in PyGameData.g_familyTalkCache:
+ PyGameData.g_familyTalkCache[familyID] = []
+ else:
+ maxCnt = IpyGameDataPY.GetFuncCfg('TalkCache', 2)
+ if maxCnt and len(PyGameData.g_familyTalkCache[familyID]) >= maxCnt:
+ del PyGameData.g_familyTalkCache[familyID][0]
+ PyGameData.g_familyTalkCache[familyID].append(saveInfo)
+ else:
+ maxCnt = IpyGameDataPY.GetFuncCfg('TalkCache', 1)
+ if maxCnt and len(PyGameData.g_worldTalkCache) >= maxCnt:
+ del PyGameData.g_worldTalkCache[0]
+ PyGameData.g_worldTalkCache.append(saveInfo)
+ return
+
+def NotifyTalkCache(curPlayer):
+ ##上线通知非脱机离线后的聊天缓存
+ if PlayerControl.GetIsTJG(curPlayer):
+ return
+ playerID = curPlayer.GetPlayerID()
+ unTJLogoffTime = PyGameData.g_unTJLogoffTime.get(playerID, 0)
+
+ familyCacheList, worldCacheList = [], []
+ familyID = curPlayer.GetFamilyID()
+ if familyID and familyID in PyGameData.g_familyTalkCache:
+ for curTime, name, playerID, content, extras in PyGameData.g_familyTalkCache[familyID]:
+ if curTime < unTJLogoffTime:
+ continue
+ contentInfo = ChPyNetSendPack.tagGCTalkCacheInfo()
+ contentInfo.Clear()
+ contentInfo.ChannelType = 2
+ contentInfo.Name = name
+ contentInfo.NameLen = len(name)
+ contentInfo.PlayerID = playerID
+ contentInfo.Time = curTime
+ contentInfo.Content = content
+ contentInfo.Len = len(content)
+ contentInfo.Extras = extras
+ familyCacheList.append(contentInfo)
+
+ for curTime, name, playerID, content, extras in PyGameData.g_worldTalkCache:
+ if curTime < unTJLogoffTime:
+ continue
+ contentInfo = ChPyNetSendPack.tagGCTalkCacheInfo()
+ contentInfo.Clear()
+ contentInfo.ChannelType = 1
+ contentInfo.Name = name
+ contentInfo.NameLen = len(name)
+ contentInfo.PlayerID = playerID
+ contentInfo.Time = curTime
+ contentInfo.Content = content
+ contentInfo.Len = len(content)
+ contentInfo.Extras = extras
+ worldCacheList.append(contentInfo)
+
+ if familyCacheList:
+ sendPack = ChPyNetSendPack.tagGCTalkCache()
+ sendPack.Clear()
+ sendPack.InfoList = familyCacheList
+ sendPack.Count = len(sendPack.InfoList)
+ NetPackCommon.SendFakePack(curPlayer, sendPack)
+
+ if worldCacheList:
+ sendPack = ChPyNetSendPack.tagGCTalkCache()
+ sendPack.Clear()
+ sendPack.InfoList = worldCacheList
+ sendPack.Count = len(sendPack.InfoList)
+ NetPackCommon.SendFakePack(curPlayer, sendPack)
+ return
\ No newline at end of file
--
Gitblit v1.8.0