#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#  
 | 
##@package  
 | 
#  
 | 
# @todo: Íæ¼ÒÁÄÌ죬ÓïÒô  
 | 
#  
 | 
# @author: Alee  
 | 
# @date 2018-4-25 ÏÂÎç02:30:25  
 | 
# @version 1.0  
 | 
#  
 | 
# @note:   
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
import GameWorld  
 | 
import IPY_GameServer  
 | 
import PlayerControl  
 | 
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 json  
 | 
import PlayerGeTui  
 | 
import re  
 | 
  
 | 
g_ChatMi = {}   # ÀëÏßÁÄÌì¼Ç¼ {Íæ¼ÒID:[ÐÅÏ¢]} Ò»¸öÍæ¼Ò×î¶à8Ìõ  
 | 
  
 | 
  
 | 
def ChangeVoiceChat(content):  
 | 
    #»ñÈ¡ÓïÒôÎÄ×ֵıêʶ  
 | 
    #ÓïÒôĬÈÏ¿ªÍ·±ê¼Ç<v=tick_length>  
 | 
    pat = re.compile(r'<v=\d+_\d+>')  
 | 
    keyStrList = pat.findall(content)  
 | 
    if not keyStrList:  
 | 
        return content  
 | 
    lIndex = content.index(keyStrList[0])  
 | 
    if lIndex !=0: #±ê¼Ç±ØÐëÔÚ¿ªÍ·  
 | 
        return content  
 | 
    return content[len(keyStrList[0]):]  
 | 
  
 | 
  
 | 
## ÃÜÆµ(·â°ü²ÎÊý)  
 | 
#  @param index Íæ¼ÒË÷Òý   
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def ChatMi(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    sendPack = IPY_GameServer.IPY_GTalkMi()  
 | 
    tagPlayer = GameWorld.GetPlayerManager().FindPlayerByName(sendPack.GetTargetName())  
 | 
    if tagPlayer == None:  
 | 
          
 | 
        PlayerControl.NotifyCode(curPlayer, "CanootTalk10")  
 | 
        return  
 | 
      
 | 
    # ºÚÃûµ¥¼ì²é  
 | 
    if PyDataManager.GetBlacklistManager().CheckBlacklistBoth(curPlayer.GetID(), tagPlayer.GetID(), curPlayer):  
 | 
        return  
 | 
      
 | 
    talkType = sendPack.GetTalkType()  
 | 
    content = sendPack.GetContent()  
 | 
    extraValue = sendPack.GetExtraValue()  
 | 
    extras = sendPack.GetExtras()  
 | 
    curPlayer.ChatMi(tagPlayer, talkType, content, extraValue, extras)  
 | 
      
 | 
    PyDataManager.GetContactsManager().AddContactsBoth(curPlayer.GetID(), tagPlayer.GetID())  
 | 
      
 | 
    return  
 | 
  
 | 
## ÃÜÆµÓÅ»¯(·â°ü²ÎÊý)  
 | 
#  @param index Íæ¼ÒË÷Òý   
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def ChatMiFix(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    sendPack = IPY_GameServer.IPY_GTalkMiFix()  
 | 
    tagPlayerID = sendPack.GetPlayerID()  
 | 
    tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID)  
 | 
    curCache = None  
 | 
    tagPlayerName = ""  
 | 
    if tagPlayer == None:  
 | 
        curCache = PlayerViewCache.ViewCacheMgr.FindCache(tagPlayerID)  
 | 
        if not curCache:  
 | 
            PlayerControl.NotifyCode(curPlayer, "CanootTalk10")  
 | 
            return  
 | 
    else:  
 | 
        tagPlayerName = tagPlayer.GetName()  
 | 
          
 | 
    # ºÚÃûµ¥¼ì²é  
 | 
    if PyDataManager.GetBlacklistManager().CheckBlacklistBoth(curPlayer.GetID(), tagPlayerID, curPlayer):  
 | 
        return  
 | 
      
 | 
    if curCache:  
 | 
        cacheDict = json.loads(curCache.GetPropData())  
 | 
        tagPlayerName = cacheDict["Name"]  
 | 
          
 | 
    talkType = sendPack.GetTalkType()  
 | 
    content = sendPack.GetContent()  
 | 
    extraValue = sendPack.GetExtraValue()  
 | 
    extras = sendPack.GetExtras()  
 | 
      
 | 
    SendChatMi(curPlayer, tagPlayer, tagPlayerName, tagPlayerID, talkType, content, extraValue, extras)  
 | 
    #curPlayer.ChatMi(tagPlayer, talkType, content, extraValue, extras)  
 | 
      
 | 
    PyDataManager.GetContactsManager().AddContactsBoth(curPlayer.GetID(), tagPlayerID)  
 | 
      
 | 
    return  
 | 
  
 | 
def SendChatMi(curPlayer, tagPlayer, tagPlayerName, tagPlayerID, talkType, content, extraValue, extras):  
 | 
    global g_ChatMi  
 | 
    sendPack = ChNetSendPack.tagTalkMi()  
 | 
    sendPack.Clear()  
 | 
    sendPack.TalkType = talkType    #(BYTE TalkType)//0ΪĬÈÏ, 1Ϊ1¶Ô1ÁÄÌìÓà  
 | 
    sendPack.SrcName = curPlayer.GetName()    #(String SrcName)//size = SrcNameLen  
 | 
    sendPack.SrcNameLen = len(sendPack.SrcName)    #(BYTE SrcNameLen)  
 | 
    sendPack.PlayerID = curPlayer.GetID()    #(DWORD PlayerID)  
 | 
    sendPack.ToNameLen = len(tagPlayerName)    #(BYTE ToNameLen)  
 | 
    sendPack.ToName = tagPlayerName    #(String ToName)//size = ToNameLen  
 | 
    sendPack.ToPlayerID = tagPlayerID    #(DWORD ToPlayerID)  
 | 
    sendPack.Len = len(content)    #(WORD Len)  
 | 
    sendPack.Content = content    #(String Content)//size = Len  
 | 
    sendPack.ExtraValue = extraValue    #(DWORD ExtraValue)//¸½¼ÓÖµ  
 | 
    sendPack.Extras = extras    #(char Extras[256])//¸½¼ÓÖµÁÐ±í  
 | 
      
 | 
    NetPackCommon.SendFakePack(curPlayer, sendPack)  
 | 
    if tagPlayer and not PlayerControl.GetIsTJG(tagPlayer):  
 | 
        NetPackCommon.SendFakePack(tagPlayer, sendPack)  
 | 
    else:  
 | 
        # ÁôÑÔ ÉÏÏß֪ͨ£¬×î¶à8Ìõ,Ö±½Ó´æ´¢½á¹¹Ìå  
 | 
        if tagPlayerID not in g_ChatMi:  
 | 
            g_ChatMi[tagPlayerID] = [sendPack]  
 | 
        else:  
 | 
            g_ChatMi[tagPlayerID].append(sendPack)  
 | 
            if len(g_ChatMi[tagPlayerID]) > 8:  
 | 
                g_ChatMi[tagPlayerID].pop(0)  
 | 
                return  
 | 
          
 | 
        PlayerGeTui.ChatMiGeTui(tagPlayerID, tagPlayerName, curPlayer.GetName())  
 | 
  
 | 
# µÇ¼ʱ½«ÀëÏßÏûϢϷ¢  
 | 
def LoginChatMi(curPlayer):  
 | 
    global g_ChatMi  
 | 
    playerID = curPlayer.GetID()  
 | 
    if playerID not in g_ChatMi:  
 | 
        return  
 | 
      
 | 
    chatList = g_ChatMi.pop(playerID)  
 | 
      
 | 
    for chatPack in chatList:  
 | 
        if not PyDataManager.GetContactsManager().FindContact(playerID, chatPack.PlayerID):  
 | 
            # ÀëÏß˽ÁÄÌ«¶à£¬´ËÍæ¼Ò±»¼·³ö¶ÓÁÐ  
 | 
            continue  
 | 
        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.GetCrossCommZoneIpyDataByServerGroupID(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 µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def ChatGong(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    sendPack = IPY_GameServer.IPY_GTalkGong()  
 | 
    content = sendPack.GetContent()  
 | 
    extraValue = sendPack.GetExtraValue()  
 | 
    extras = sendPack.GetExtras()  
 | 
    curPlayer.ChatGong(content, extraValue, extras)  
 | 
      
 | 
    return  
 | 
  
 | 
  
 | 
## ¶ÔƵ(·â°ü²ÎÊý)  
 | 
#  @param index Íæ¼ÒË÷Òý   
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def ChatTeam(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    sendPack = IPY_GameServer.IPY_GTalkDui()  
 | 
    content = sendPack.GetContent()  
 | 
    extraValue = sendPack.GetExtraValue()  
 | 
    extras = sendPack.GetExtras()  
 | 
    curPlayer.ChatTeam(content, extraValue, extras)  
 | 
  
 | 
    return  
 | 
  
 | 
  
 | 
## ¼Ò×寵µÀÁÄÌì  
 | 
#  @param index Íæ¼ÒË÷Òý   
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def ChatFamily(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    if curPlayer.GetFamilyID() == 0:  
 | 
        GameWorld.Log("¼Ò×寵µÀÁÄÌì·â°ü´íÎó,Íæ¼ÒûÓмÒ×å" , curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
    sendPack = IPY_GameServer.IPY_GTalkBang()  
 | 
    content = sendPack.GetContent()  
 | 
    extraValue = sendPack.GetExtraValue()  
 | 
    extras = sendPack.GetExtras()  
 | 
    curPlayer.ChatFamily(content, extraValue, extras)  
 | 
    #ÏÉÃËÑç»á´ðÌâ  
 | 
    PlayerFamilyParty.OnTalkFamily(curPlayer, content, tick)  
 | 
    return  
 | 
  
 | 
  
 | 
## pyÀ®°È£¬Ö§³Ö¿ç·þ  
 | 
def ChatPYSpeaker(curPlayer, chatInfoList):  
 | 
    SpeakerType, Text, extraValue, extras = chatInfoList  
 | 
    accID = curPlayer.GetAccID()  
 | 
    playerName = curPlayer.GetName()  
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
      
 | 
    # ¿ç·þÀ®°È  
 | 
    if SpeakerType == 2:  
 | 
        pass  
 | 
          
 | 
    else:  
 | 
        #GameWorld.DebugLog("·¢Ëͱ¾·þÀ®°ÈÁÄÌì: accID=%s,Text=%s" % (accID, Text), playerID)  
 | 
        BroadCastPYSpeaker(accID, playerID, playerName, SpeakerType, Text, extraValue, extras)  
 | 
      
 | 
    return  
 | 
  
 | 
## ¹ã²¥À®°ÈÄÚÈÝ£¬Ö§³Ö¿ç·þ  
 | 
def BroadCastPYSpeaker(accID, playerID, playerName, SpeakerType, Text, extraValue, extras):  
 | 
    if playerID == 0:  
 | 
        player = GameWorld.GetPlayerManager().FindPlayerByAccID(accID)  
 | 
        if player:  
 | 
            playerID = player.GetPlayerID()  
 | 
              
 | 
    speakerPack = ChPyNetSendPack.tagGCPYSpeakerContent()  
 | 
    speakerPack.Clear()  
 | 
    speakerPack.AccIDLen = len(accID)  
 | 
    speakerPack.AccID = accID  
 | 
    speakerPack.PlayerID = playerID  
 | 
    speakerPack.NameLen = len(playerName)  
 | 
    speakerPack.Name = playerName  
 | 
    speakerPack.SpeakerType = SpeakerType  
 | 
    speakerPack.TextLen = len(Text)  
 | 
    speakerPack.Text = Text  
 | 
    speakerPack.ExtraValue = extraValue  
 | 
    speakerPack.Extras = extras  
 | 
      
 | 
    # È«·þ¹ã²¥ÔÚÏßÍæ¼Ò  
 | 
    playerManager = GameWorld.GetPlayerManager()  
 | 
    for i in range(playerManager.GetPlayerCount()):  
 | 
        player = playerManager.GetPlayerByIndex(i)  
 | 
        if player == None or not player.GetInitOK():  
 | 
            continue  
 | 
          
 | 
        if PlayerControl.GetIsTJG(player):  
 | 
            continue  
 | 
        NetPackCommon.SendFakePack(player, speakerPack)  
 | 
    return  
 | 
  
 | 
  
 | 
  
 | 
#----------ÓïÒô´¦Àí------------------------------------------------------  
 | 
# ÔÝ×ö³ÉÍêȫת·¢£¬Èç¹ûºóÐøIOѹÁ¦¹ý´ó¸Ä³Éֻת·¢»ù±¾ÐÅÏ¢ ÈçÓïÒôÀ´Ô´¡¢Ê±³¤ºÍΨһ±êÖ¾  
 | 
# ÓïÒôÊý¾ÝÉÏ´«×¨ÃÅ·þÎñÆ÷£¬½ÓÊÕÓû§¿É¸ù¾ÝΨһ±êÖ¾ÇëÇóÏÂÔØ£¬¿ÉÉ趨Êý¾Ý±£Áôʱ³¤  
 | 
#===============================================================================  
 | 
# //B3 07 ÓïÒôÁÄÌì #tagCGVoiceChat  
 | 
#   
 | 
# struct    tagCGVoiceChat  
 | 
# {  
 | 
#    tagHead        Head;  
 | 
#    BYTE        ChannelType;     // 1 ÊÀ½ç 2 ÏÉÃË 3 Ë½ÁÄ(ºÃÓÑ) 4 ¶ÓÎé -------²é¿´·â°ütagCMVoiceChat 5 ÇøÓò      
 | 
#    BYTE        TargetNameLen;  
 | 
#    char        TargetName[TargetNameLen];        //size = TargetNameLen  
 | 
#    DWORD        TargetID;        // Ë½ÁÄĬÈÏ·¢Íæ¼ÒID£¬Ã»ÓÐID²Å·¢Ãû³Æ  
 | 
#    WORD        Len;  
 | 
#    BYTE        Content[Len];        //size = Len  
 | 
# };  
 | 
#===============================================================================  
 | 
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)  
 | 
    return  
 | 
  
 | 
  
 | 
## »ñÈ¡ÁÄÌìÄÚÈݸ½¼ÓÖµ  
 | 
#  @param player: ÁÄÌì¶ÔÏó  
 | 
#  @return: ÁÄÌìÄÚÈݸ½¼ÓÖµ  
 | 
def GetTalkExtraValue(player):  
 | 
    vipLv = player.GetVIPLv()  # Íæ¼ÒvipµÈ¼¶  
 | 
    GMLevel = player.GetGMLevel()  
 | 
    job = player.GetJob()  
 | 
  
 | 
    extraValueStr = ""  
 | 
    # vipµÈ¼¶  
 | 
    extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_VipLv)%vipLv  
 | 
    # GM  
 | 
    extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_GM)% (GMLevel > 0)  
 | 
    # job  
 | 
    extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_JOB)% job  
 | 
    # ÆøÅÝ¿ò  
 | 
    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  
 | 
  
 | 
  
 | 
## ¸½¼ÓÐÅÏ¢µÄ³¤¶ÈÆ¥Åä  
 | 
#  @param extraValueInfo: ¸½¼ÓÐÅÏ¢µÄ³¤¶È  
 | 
#  @return:   
 | 
def GetTalkExtraValueStar(extraValueType):  
 | 
    extraValueInfo = ShareDefine.Def_TalkExtraValue_LenDict.get(extraValueType)  
 | 
    extraValueLen = extraValueInfo[1] - extraValueInfo[0]  
 | 
      
 | 
    return "%0" + str(extraValueLen) + "d"  
 | 
  
 | 
  
 | 
  
 | 
def CheckTalk(curPlayer, tick):  
 | 
    if PlayerControl.GetGMForbidenTalk(curPlayer):  
 | 
        return False  
 | 
      
 | 
    #¼ä¸ôʱ¼ä  
 | 
    if tick - curPlayer.GetDictByKey(ChConfig.Def_TalkTick) < 1000:  
 | 
        return False  
 | 
  
 | 
    return True  
 | 
  
 |