hxp
2024-06-20 40f41d737bb9f7df71c6260b766756ba8a2ea1fc
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py
@@ -20,6 +20,7 @@
#import ReadChConfig
import ShareDefine
import ChPyNetSendPack
import CrossRealmPlayer
import NetPackCommon
import EventReport
import PlayerSuccess
@@ -27,6 +28,10 @@
import ItemCommon
import ChItem
import PlayerTJG
import EventShell
import PyGameData
import PlayerLove
import math
#---------------------------------------------------------------------
@@ -45,7 +50,7 @@
    content = sendPack.GetContent()
    
    #通用判断
    if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick):
    if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick, talkType=IPY_GameWorld.tcArea):
        return
    
    #通用设置
@@ -53,7 +58,7 @@
    
    
    #如果在普通地图, 就广播, 如果在副本就单个通知
    if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull:
    if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull and not GameWorld.IsCrossServer():
        #广播
        extras = GetTalkExtraValue(curPlayer)
        curPlayer.ChatArea(content, 0, extras)
@@ -95,7 +100,7 @@
    content = sendPack.GetContent()
    
    #通用检测
    if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick, checkSameMsg = False):
    if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick, checkSameMsg = False, talkType=IPY_GameWorld.tcWorld):
        return
            
    #通用设置
@@ -104,7 +109,9 @@
    extras = GetTalkExtraValue(curPlayer)
    curPlayer.ChatGong(content, 0, extras)
    #世界频道发言成就
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_TalkWorld, 1)
    #PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_TalkWorld, 1)
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_TalkWorld, 1)
    EventShell.EventRespons_Talk(curPlayer, 'talkworld')
    return
## 国家频道(封包参数)
@@ -113,44 +120,29 @@
#  @return None
#  @remarks 函数详细说明.
def TalkCountry(index, tick):
    #===========================================================================
    # #20150918 hxp目前作为跨服阵营聊天频道
    # #20151009 hxp增加py自定义聊天频道
    # return
    # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    #
    #
    # #等级判断
    # #if curPlayer.GetLV() < ChConfig.Def_PlayerTalkCountryLV:
    # #    PlayerControl.NotifyCode(curPlayer, "PlayerCall_Error_NoCountry")
    # #    return
    #
    # #获得国家频封包
    # sendPack = IPY_GameWorld.IPY_CTalkCountry()
    # #玩家聊天内容
    # content = sendPack.GetContent()
    #
    # #通用判断
    # if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick):
    #    return
    #
    # #国王说话免费
    # #if PlayerCountry.CheckIsCountryKing(curPlayer.GetCountry() , curPlayer.GetID()):
    # #    PlayerControl.NotifyCode(curPlayer , "C16615EF-FDBC-49AF-9285668F7C8930AA")
    # #else:
    # #    moneyType = curPlayer.GetUseSilverType()
    # #    #金钱判定
    # #    if not PlayerControl.PayMoney(curPlayer, moneyType, ChConfig.Def_PlayerTalkCoutryMoney):
    # #        return False
    #
    # #通用设置
    # SetTalkTime(curPlayer, content, IPY_GameWorld.tcCountry, tick)
    #
    # #说话
    # extraValue = GetTalkExtraValue(curPlayer)
    # extras = ''
    # curPlayer.ChatCountry(content, extraValue, extras)
    #===========================================================================
    ## 跨服世界频道
    if GameWorld.IsCrossServer():
        return
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    if not CrossRealmPlayer.IsCrossServerOpen():
        PlayerControl.NotifyCode(curPlayer, "CrossMatching18")
        return
    sendPack = IPY_GameWorld.IPY_CTalkCountry()
    #玩家聊天内容
    content = sendPack.GetContent()
    #通用检测
    if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick, checkSameMsg = False, talkType=IPY_GameWorld.tcCountry):
        return
    #通用设置
    SetTalkTime(curPlayer, content, IPY_GameWorld.tcCountry, tick)
    #发送聊天内容
    extras = GetTalkExtraValue(curPlayer)
    curPlayer.ChatCountry(content, 0, extras)
    return
## 联盟家族频道(封包参数)
@@ -168,13 +160,17 @@
    #玩家聊天内容
    content = sendPack.GetContent()
    
    if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick):
    if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick, talkType=IPY_GameWorld.tcFamily):
        return
    #通用设置
    SetTalkTime(curPlayer, content, IPY_GameWorld.tcFamily, tick)
    
    extras = GetTalkExtraValue(curPlayer)
    curPlayer.ChatFamily(content, 0, extras)
    #仙盟频道发言成就
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_TalkFamily, 1)
    EventShell.EventRespons_Talk(curPlayer, 'talkfamily')
    return
## 队伍频道(封包参数)
@@ -192,7 +188,7 @@
    #玩家聊天内容
    content = sendPack.GetContent()
    
    if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick):
    if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick, talkType=IPY_GameWorld.tcTeam):
        return
    
    #通用设置
@@ -215,7 +211,7 @@
    #玩家聊天内容
    content = sendPack.GetContent()
    
    if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick):
    if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick, talkType=IPY_GameWorld.tcPrivate):
        return
    
    #通用设置
@@ -224,6 +220,14 @@
    extras = GetTalkExtraValue(curPlayer)
    curPlayer.ChatMiByID(sendPack.GetTalkType(), sendPack.GetPlayerID(), content, 0, extras)
    return
def TalkPrivateByID(curPlayer, tagPlayerID, content):
    #私聊 0为默认 1为1对1聊天
    talkType = 1
    extras = GetTalkExtraValue(curPlayer)
    curPlayer.ChatMiByID(talkType, tagPlayerID, content, 0, extras)
    return
## 私聊频道(封包参数)
@@ -237,7 +241,7 @@
    #玩家聊天内容
    content = sendPack.GetContent()
    
    if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick):
    if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick, talkType=IPY_GameWorld.tcPrivate):
        return
    
    #通用设置
@@ -258,7 +262,7 @@
#  @param checkSameMsg 是否检查相同信息
#  @return True or False
#  @remarks 函数详细说明.
def __CheckTalk(curPlayer, content, length, tick, checkGMForbidenTalk = True, checkSameMsg = True):
def __CheckTalk(curPlayer, content, length, tick, checkGMForbidenTalk = True, checkSameMsg = True, talkType=None):
    if checkGMForbidenTalk and GetGMToolForbidTalk(curPlayer):
        #GeRen_chenxin_921745 对不起,您已被GM禁言,发送信息失败
        #PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_921745")
@@ -269,6 +273,17 @@
        #PlayerControl.NotifyCode(curPlayer, "CanootTalk02")
        return False
    
    #频道各自间隔时间
    if talkType != None:
        talkCDDict = IpyGameDataPY.GetFuncEvalCfg("TalkCD", 1, {})
        if str(talkType) in talkCDDict:
            cdTicks = talkCDDict[str(talkType)] * 1000
            lastTalkTick = curPlayer.GetTalkTick(talkType)
            remainTick = cdTicks - (tick - lastTalkTick)
            if remainTick > 0:
                PlayerControl.NotifyCode(curPlayer, "CanootTalk01", [int(math.ceil(remainTick/1000.0))])
                return False
    #聊天信息太长
    if length > ChConfig.Def_PlayerTalkMaxCount :
        PlayerControl.NotifyCode(curPlayer, "CanootTalk13")
@@ -305,7 +320,7 @@
    #设置当前聊天内容为玩家本次聊天内容
    #curPlayer.SetLastChatContent(content)
    #设置当前频道时间
    #curPlayer.SetTalkTick(type, tick)
    curPlayer.SetTalkTick(type, tick)
    return
## 信件2B封包
@@ -365,8 +380,7 @@
    vipLv = objTalk.GetVIPLv()  # 玩家vip等级
    GMLevel = objTalk.GetGMLevel()
    job = objTalk.GetJob()
    #mergeWarRank = PlayerControl.GetMergeWarRank(objTalk)
    #freshmanGuiderDay = PlayerFreshmanGuide.GetFreshmanGuiderDay(objTalk)
    playerID = objTalk.GetID()
    
    extraValueStr = ""
    # vip等级
@@ -377,14 +391,15 @@
    extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_JOB)% job
    # 气泡框
    extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_BubbleBox) % PlayerControl.GetChatBubbleBox(objTalk)
    # 跨服预选赛排位(称呼)
    #extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_MergeWarRank)%mergeWarRank
    # 新手指导员
    #extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_NewGuider)% (freshmanGuiderDay > 0)
    # QQ会员
    #operateInfo = int(objTalk.GetOperateInfo())
    #extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_QQOperate)% (operateInfo)
    # 服务器组ID
    extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_ServerGroupID) % PlayerControl.GetPlayerServerGroupID(objTalk)
    # 等级
    extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_LV) % objTalk.GetLV()
    # 伴侣信息
    coupleName = PlayerControl.GetCoupleName(objTalk)
    coupleJob = PlayerControl.GetCoupleJob(objTalk)
    bridePriceMaxID = PlayerControl.GetBridePriceMaxID(objTalk)
    extraValueStr = "%s|%s|%s|%s" % (extraValueStr, coupleName, coupleJob, bridePriceMaxID)
    return extraValueStr
@@ -467,7 +482,6 @@
#  @param tick
#  @return
def OnPyTalk(index, clientData, tick):
    return
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    
    #GameWorld.DebugLog("OnPyTalk, Name:%s" % curPlayer.GetPlayerName())
@@ -556,39 +570,39 @@
# };
#===============================================================================
def OnVoiceChat(index, clientPack, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    if GetGMToolForbidTalk(curPlayer):
        return
    if clientPack.ChannelType != ShareDefine.Def_ChannelChat_Area:
        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)
    # 区域频道
    #如果在普通地图, 就广播, 如果在副本就单个通知
    if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull:
        curPlayer.BroadCastAll(sendPack.GetBuffer(), len(sendPack.GetBuffer()))
    else:
        playerManager = GameWorld.GetMapCopyPlayerManager()
        for index in range(0 , playerManager.GetPlayerCount()):
            #广播玩家
            tempPlayer = playerManager.GetPlayerByIndex(index)
            if not tempPlayer.GetPlayerID():
                continue
            if PlayerTJG.GetIsTJG(tempPlayer):
                continue
            NetPackCommon.SendFakePack(tempPlayer, sendPack)
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
#    if GetGMToolForbidTalk(curPlayer):
#        return
#    if clientPack.ChannelType != ShareDefine.Def_ChannelChat_Area:
#        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)
#
#    # 区域频道
#
#    #如果在普通地图, 就广播, 如果在副本就单个通知
#    if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull:
#        curPlayer.BroadCastAll(sendPack.GetBuffer(), len(sendPack.GetBuffer()))
#    else:
#        playerManager = GameWorld.GetMapCopyPlayerManager()
#
#        for index in range(0 , playerManager.GetPlayerCount()):
#            #广播玩家
#            tempPlayer = playerManager.GetPlayerByIndex(index)
#            if not tempPlayer.GetPlayerID():
#                continue
#
#            if PlayerTJG.GetIsTJG(tempPlayer):
#                continue
#
#            NetPackCommon.SendFakePack(tempPlayer, sendPack)
    return