#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#
|
##@package
|
#
|
# @todo: Íæ¼ÒÁÄÌìÂß¼ Ö§³ÖÓïÒô
|
#
|
# @author: Alee
|
# @date 2018-4-24 ÏÂÎç07:36:28
|
# @version 1.0
|
#
|
# @note:
|
#
|
#---------------------------------------------------------------------
|
import IPY_GameWorld
|
import GameWorld
|
import PlayerControl
|
import ChConfig
|
import FBLogic
|
#import ReadChConfig
|
import ShareDefine
|
import ChPyNetSendPack
|
import CrossRealmPlayer
|
import NetPackCommon
|
import EventReport
|
import PlayerSuccess
|
import IpyGameDataPY
|
import ItemCommon
|
import ChItem
|
import PlayerTJG
|
import EventShell
|
import PyGameData
|
import PlayerLove
|
#---------------------------------------------------------------------
|
|
|
## ÇøÓòƵµÀ(·â°ü²ÎÊý)
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
# Õû¸öµØÍ¼µÄÈ˶¼¿ÉÒÔÌýµ½
|
def TalkArea(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
#»ñµÃÇøÓòƵ·â°ü
|
sendPack = IPY_GameWorld.IPY_CTalkArea()
|
#Íæ¼ÒÁÄÌìÄÚÈÝ
|
content = sendPack.GetContent()
|
|
#ͨÓÃÅжÏ
|
if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick):
|
return
|
|
#ͨÓÃÉèÖÃ
|
SetTalkTime(curPlayer, content, IPY_GameWorld.tcArea, tick)
|
|
|
#Èç¹ûÔÚÆÕͨµØÍ¼, ¾Í¹ã²¥, Èç¹ûÔÚ¸±±¾¾Íµ¥¸ö֪ͨ
|
if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull and not GameWorld.IsCrossServer():
|
#¹ã²¥
|
extras = GetTalkExtraValue(curPlayer)
|
curPlayer.ChatArea(content, 0, extras)
|
else:
|
__DoLogic_FB_TalkArea(curPlayer, content)
|
|
return True
|
|
## ¸±±¾ÖÐ˵»°
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param content ½²»°µÄÄÚÈÝ
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def __DoLogic_FB_TalkArea(curPlayer, content):
|
playerManager = GameWorld.GetMapCopyPlayerManager()
|
|
for index in range(0 , playerManager.GetPlayerCount()):
|
#¹ã²¥Íæ¼Ò
|
tempPlayer = playerManager.GetPlayerByIndex(index)
|
if not tempPlayer.GetPlayerID():
|
continue
|
|
#µ¥¸ö¹ã²¥Ëµ»°
|
extras = GetTalkExtraValue(curPlayer)
|
tempPlayer.Sync_ChatArea(curPlayer.GetPlayerID(), content, 0, extras)
|
|
return
|
|
## ÊÀ½çƵµÀ(·â°ü²ÎÊý)
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def TalkWorld(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
sendPack = IPY_GameWorld.IPY_CTalkGong()
|
#Íæ¼ÒÁÄÌìÄÚÈÝ
|
content = sendPack.GetContent()
|
|
#ͨÓüì²â
|
if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick, checkSameMsg = False):
|
return
|
|
#ͨÓÃÉèÖÃ
|
SetTalkTime(curPlayer, content, IPY_GameWorld.tcWorld, tick)
|
#·¢ËÍÁÄÌìÄÚÈÝ
|
extras = GetTalkExtraValue(curPlayer)
|
curPlayer.ChatGong(content, 0, extras)
|
#ÊÀ½çƵµÀ·¢ÑԳɾÍ
|
#PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_TalkWorld, 1)
|
PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_TalkWorld, 1)
|
EventShell.EventRespons_Talk(curPlayer, 'talkworld')
|
return
|
|
## ¹ú¼ÒƵµÀ(·â°ü²ÎÊý)
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def TalkCountry(index, tick):
|
## ¿ç·þÊÀ½çƵµÀ
|
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):
|
return
|
|
#ͨÓÃÉèÖÃ
|
SetTalkTime(curPlayer, content, IPY_GameWorld.tcCountry, tick)
|
#·¢ËÍÁÄÌìÄÚÈÝ
|
extras = GetTalkExtraValue(curPlayer)
|
curPlayer.ChatCountry(content, 0, extras)
|
return
|
|
## ÁªÃ˼Ò×寵µÀ(·â°ü²ÎÊý)
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def TalkFamily(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
if curPlayer.GetFamilyID() == 0:
|
PlayerControl.NotifyCode(curPlayer, "jiazu_lhs_0 ")
|
return
|
|
sendPack = IPY_GameWorld.IPY_CTalkBang()
|
#Íæ¼ÒÁÄÌìÄÚÈÝ
|
content = sendPack.GetContent()
|
|
if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick):
|
return
|
|
extras = GetTalkExtraValue(curPlayer)
|
curPlayer.ChatFamily(content, 0, extras)
|
#ÏÉÃËÆµµÀ·¢ÑԳɾÍ
|
PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_TalkFamily, 1)
|
EventShell.EventRespons_Talk(curPlayer, 'talkfamily')
|
return
|
|
## ¶ÓÎ鯵µÀ(·â°ü²ÎÊý)
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def TalkTeam(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
if curPlayer.GetTeam() == None:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_161795 ")
|
return
|
|
sendPack = IPY_GameWorld.IPY_CTalkDui()
|
#Íæ¼ÒÁÄÌìÄÚÈÝ
|
content = sendPack.GetContent()
|
|
if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick):
|
return
|
|
#ͨÓÃÉèÖÃ
|
SetTalkTime(curPlayer, content, IPY_GameWorld.tcTeam, tick)
|
#˵»°
|
extras = GetTalkExtraValue(curPlayer)
|
curPlayer.ChatTeam(content, 0, extras)
|
return
|
|
|
## ˽ÁÄÆµµÀ(·â°ü²ÎÊý)
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def TalkPrivate(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
sendPack = IPY_GameWorld.IPY_CTalkMiFix()
|
|
#Íæ¼ÒÁÄÌìÄÚÈÝ
|
content = sendPack.GetContent()
|
|
if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick):
|
return
|
|
#ͨÓÃÉèÖÃ
|
SetTalkTime(curPlayer, content, IPY_GameWorld.tcPrivate, tick)
|
#˵»°
|
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
|
|
|
|
## ˽ÁÄÆµµÀ(·â°ü²ÎÊý)
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def TalkPrivateName(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
sendPack = IPY_GameWorld.IPY_CTalkMi()
|
#Íæ¼ÒÁÄÌìÄÚÈÝ
|
content = sendPack.GetContent()
|
|
if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick):
|
return
|
|
#ͨÓÃÉèÖÃ
|
SetTalkTime(curPlayer, content, IPY_GameWorld.tcPrivate, tick)
|
#˵»°
|
extras = GetTalkExtraValue(curPlayer)
|
curPlayer.ChatMiByName(sendPack.GetTalkType(), sendPack.GetTargetName(), content, 0, extras)
|
return
|
|
|
#-3ÃëÖØ¸´,;ÁÄÌìÐÅϢ̫³¤
|
## ÁÄÌìͨÓüì²é
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param content ÁÄÌìÄÚÈÝ
|
# @param length ÁÄÌ쳤¶È
|
# @param tick µ±Ç°Ê±¼ä
|
# @param checkGMForbidenTalk ¼ì²éÊÇ·ñ½ûÑÔ
|
# @param checkSameMsg ÊÇ·ñ¼ì²éÏàͬÐÅÏ¢
|
# @return True or False
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def __CheckTalk(curPlayer, content, length, tick, checkGMForbidenTalk = True, checkSameMsg = True):
|
if checkGMForbidenTalk and GetGMToolForbidTalk(curPlayer):
|
#GeRen_chenxin_921745 ¶Ô²»Æð£¬ÄúÒѱ»GM½ûÑÔ£¬·¢ËÍÐÅϢʧ°Ü
|
#PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_921745")
|
return False
|
|
#¼ä¸ôʱ¼ä
|
if tick - curPlayer.GetLastChatTick() < ChConfig.Def_PlayerTalkTick:
|
#PlayerControl.NotifyCode(curPlayer, "CanootTalk02")
|
return False
|
|
#ÁÄÌìÐÅϢ̫³¤
|
if length > ChConfig.Def_PlayerTalkMaxCount :
|
PlayerControl.NotifyCode(curPlayer, "CanootTalk13")
|
return False
|
|
#²»ÄÜÖ»·¢¿Õ¸ñ
|
if content.strip() == '':
|
PlayerControl.NotifyCode(curPlayer, "CanootTalk14")
|
return False
|
|
return True
|
|
|
## »ñµÃÍæ¼ÒÊÇ·ñ±»½ûÑÔ
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @return ÊÇ·ñ½ûÑÔ
|
def GetGMToolForbidTalk(curPlayer):
|
|
#accIDForbid = (curPlayer.GetAccState() & pow(2, ChConfig.Def_PysForbidTalk)) > 0
|
|
return curPlayer.GetGMForbidenTalk()# or accIDForbid
|
|
|
## ÁÄÌìʱ¼äͨÓÃÉèÖÃ
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param content ÁÄÌìÄÚÈÝ
|
# @param type ÀàÐÍ
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def SetTalkTime(curPlayer, content, type, tick):
|
#ÉèÖõ±Ç°Ê±¼äÎªÍæ¼Ò¿ªÊ¼ÁÄÌìʱ¼ä
|
curPlayer.SetLastChatTick(tick)
|
#ÉèÖõ±Ç°ÁÄÌìÄÚÈÝÎªÍæ¼Ò±¾´ÎÁÄÌìÄÚÈÝ
|
#curPlayer.SetLastChatContent(content)
|
#ÉèÖõ±Ç°ÆµµÀʱ¼ä
|
#curPlayer.SetTalkTick(type, tick)
|
return
|
|
## Ðżþ2B·â°ü
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def GBLetter(index, tick):
|
#===========================================================================
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
# sendPack = IPY_GameWorld.IPY_CGBLetter()
|
#
|
# if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_GBLetter) <= ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_GBLetter]:
|
# #·¢ÐÅ1Ãë¼ä¸ô
|
# return
|
#
|
# curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_GBLetter, tick)
|
#
|
# #Ðżþ±êÌâºÍÄÚÈÝ
|
# titleStr = sendPack.GetTitle()
|
# contentStr = sendPack.GetContent()
|
#
|
# #·¢¸øGM
|
# curPlayer.Interface_SendGMLetter(titleStr, contentStr)
|
#===========================================================================
|
return
|
|
## ¼ÇÂ¼Íæ¼ÒÁÄÌìÄÚÈÝ
|
# @param messageStr ÁÄÌìÀàÐÍ
|
# @param curPlayer ÁÄÌìµÄÍæ¼Ò
|
# @param tagPlayer None
|
# @param content ÁÄÌìÄÚÈÝ
|
# @param addinfo ¶îÍâÐÅÏ¢
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def __LogInDBPlayerTalk(messageStr , curPlayer , tagPlayer , content, addinfo=""):
|
# Óɿͻ§¶ËÏòºǫ́·¢ËÍ
|
return
|
#===========================================================================
|
# tagName = "" if not tagPlayer else tagPlayer.GetName()
|
# #EventReport.WriteEvent_chat_log(curPlayer, content, messageStr, tagName, addinfo)
|
# gameWorld = GameWorld.GetGameWorld()
|
# #¿ª¹ØÎ´¿ªÆô
|
# if not gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_PurTalk):
|
# return
|
#
|
# #½«ÁÄÌìÄÚÈÝ´æÈëÊý¾Ý¿â
|
# gameWorld.DataServer_TalkTrace('%s'%(messageStr), curPlayer, tagPlayer, content)
|
# return
|
#===========================================================================
|
|
|
## »ñÈ¡ÁÄÌìÄÚÈݸ½¼ÓÖµ
|
# @param objTalk: ÁÄÌì¶ÔÏó
|
# @return: ÁÄÌìÄÚÈݸ½¼ÓÖµ
|
def GetTalkExtraValue(objTalk):
|
vipLv = objTalk.GetVIPLv() # Íæ¼ÒvipµÈ¼¶
|
GMLevel = objTalk.GetGMLevel()
|
job = objTalk.GetJob()
|
playerID = objTalk.GetID()
|
|
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(objTalk)
|
# ·þÎñÆ÷×é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
|
|
|
## ¸½¼ÓÐÅÏ¢µÄ³¤¶ÈÆ¥Åä
|
# @param extraValueInfo: ¸½¼ÓÐÅÏ¢µÄ³¤¶È
|
# @return:
|
def GetTalkExtraValueStar(extraValueType):
|
extraValueInfo = ShareDefine.Def_TalkExtraValue_LenDict.get(extraValueType)
|
extraValueLen = extraValueInfo[1] - extraValueInfo[0]
|
|
return "%0" + str(extraValueLen) + "d"
|
|
|
#// A2 17 À®°ÈÁÄÌì #tagCMPYSpeaker
|
#
|
#struct tagCMPYSpeaker
|
#{
|
# tagHead Head;
|
# BYTE SpeakerType; //1-±¾·þ£»2-¿ç·þ
|
# BYTE IsUseGold; //ÊÇ·ñʹÓÃ×êʯ
|
# BYTE ItemIndex; //ʹÓÃÎïÆ·Ëµ»°Ê±, ÎïÆ·Index
|
# BYTE TextLen; //×Ö·û³¤¶È
|
# char Text[TextLen]; //size = TextLen
|
#};
|
def OnUsePYSpeaker(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
playerID = curPlayer.GetPlayerID()
|
SpeakerType = clientData.SpeakerType
|
IsUseGold = clientData.IsUseGold
|
ItemIndex = clientData.ItemIndex
|
TextLen = clientData.TextLen
|
Text = clientData.Text
|
|
#GameWorld.Log("Íæ¼ÒÀ®°ÈÁÄÌì: SpeakerType=%s,IsUseGold=%s,ItemIndex=%s"
|
# % (SpeakerType, IsUseGold, ItemIndex), playerID)
|
if not __CheckTalk(curPlayer, Text, TextLen, tick):
|
return
|
|
|
if IsUseGold:
|
bugleItemID = IpyGameDataPY.GetFuncCfg('BugleItem', SpeakerType)
|
if not bugleItemID:
|
GameWorld.ErrLog("¹¦ÄÜÅäÖñíûÓÐÅäÖöÔÓ¦À®°ÈÀàÐÍÎïÆ·ÏûºÄ£¡SpeakerType=%s,Çë¼ì²éBugleItem!" % SpeakerType)
|
return
|
costMoney = ItemCommon.GetAutoBuyItemNeedGold({bugleItemID:1})
|
if not costMoney:
|
return
|
moneyType = IPY_GameWorld.TYPE_Price_Gold_Money
|
infoDict = {"SpeakerType":SpeakerType, ChConfig.Def_Cost_Reason_SonKey:bugleItemID}
|
if not PlayerControl.PayMoney(curPlayer, moneyType, costMoney, ChConfig.Def_Cost_UseSpeaker, infoDict, 1):
|
return
|
|
# ¼ì²éʹÓÃÀ®°ÈµÀ¾ß
|
elif not ChItem.DoSpeaker_UseItem(curPlayer, ItemIndex, SpeakerType):
|
GameWorld.Log(" À®°ÈµÀ¾ß²»¿ÉÓã¡", playerID)
|
return
|
|
#֪ͨÊÀ½ç·þÎñÆ÷,ʹÓÃСÀ®°È
|
extraValue = 0
|
extras = GetTalkExtraValue(curPlayer)
|
msgList = str([SpeakerType, Text, extraValue, extras])
|
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, 'PYSpeaker', msgList, len(msgList))
|
|
return
|
|
|
|
#// A2 16 ×Ô¶¨ÒåÍæ¼ÒÁÄÌì #tagCMPyTalk
|
#
|
#struct tagCMPyTalk
|
#{
|
# tagHead Head;
|
# BYTE TalkType; // ×Ô¶¨ÒåÁÄÌìÀàÐÍ
|
# WORD Len;
|
# char Content[Len]; //size = Len
|
#};
|
## ×Ô¶¨ÒåÍæ¼ÒÁÄÌì
|
# @param index
|
# @param clientData
|
# @param tick
|
# @return
|
def OnPyTalk(index, clientData, tick):
|
return
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
#GameWorld.DebugLog("OnPyTalk, Name:%s" % curPlayer.GetPlayerName())
|
|
talkType = clientData.TalkType
|
contentLen = clientData.Len
|
content = clientData.Content
|
|
if talkType not in ShareDefine.TalkTypeList:
|
GameWorld.ErrLog("OnPyTalk talkType(%s) is not define!" % talkType, curPlayer.GetPlayerID())
|
return
|
|
#ͨÓÃÅжÏ
|
if not __CheckTalk(curPlayer, content, contentLen, tick):
|
return
|
|
#˵»°
|
extraValue = 0
|
extras = GetTalkExtraValue(curPlayer)
|
|
isChatOK = False
|
if talkType == ShareDefine.Def_TalkType_FBFaction:
|
isChatOK = __ChatFBFaction(curPlayer, talkType, content, extraValue, extras)
|
|
if not isChatOK:
|
return
|
|
#ÉèÖõ±Ç°Ê±¼äÎªÍæ¼Ò¿ªÊ¼ÁÄÌìʱ¼ä
|
curPlayer.SetLastChatTick(tick)
|
#ÉèÖõ±Ç°ÁÄÌìÄÚÈÝÎªÍæ¼Ò±¾´ÎÁÄÌìÄÚÈÝ
|
curPlayer.SetLastChatContent(content)
|
|
return True
|
|
## py×Ô¶¨ÒåÁÄÌìÍÆËͰü
|
def __GetPyTalkPack(curPlayer, talkType, content, extraValue, extras):
|
pyTalk = ChPyNetSendPack.tagMCPyTalk()
|
pyTalk.Clear()
|
pyTalk.TalkType = talkType
|
pyTalk.Name = curPlayer.GetPlayerName()
|
pyTalk.NameLen = len(pyTalk.Name)
|
pyTalk.PlayerID = curPlayer.GetPlayerID()
|
pyTalk.Len = len(content)
|
pyTalk.Content = content
|
pyTalk.ExtraValue = extraValue
|
pyTalk.Extras = extras
|
return pyTalk
|
|
## ¸±±¾ÕóÓªÁÄÌì
|
def __ChatFBFaction(curPlayer, talkType, content, extraValue, extras):
|
curFaction = curPlayer.GetFaction()
|
if not curFaction:
|
return False
|
|
pyTalkPack = __GetPyTalkPack(curPlayer, talkType, content, extraValue, extras)
|
|
playerManager = GameWorld.GetMapCopyPlayerManager()
|
for index in range(playerManager.GetPlayerCount()):
|
player = playerManager.GetPlayerByIndex(index)
|
if not player:
|
continue
|
|
if player.GetFaction() != curFaction:
|
continue
|
|
if PlayerTJG.GetIsTJG(player):
|
continue
|
|
NetPackCommon.SendFakePack(player, pyTalkPack)
|
|
return True
|
|
|
#===============================================================================
|
# //A2 26 ÓïÒôÁÄÌì #tagCMVoiceChat
|
#
|
# struct tagCMVoiceChat
|
# {
|
# tagHead Head;
|
# BYTE ChannelType; // 5 ÇøÓò --- ²é¿´·â°ütagCGVoiceChat 1 ÊÀ½ç 2 ÏÉÃË 3 ˽ÁÄ(ºÃÓÑ) 4 ¶ÓÎé
|
# 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 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
|
|