#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.PlayerFace
|
#
|
# @todo:Í·ÏñÍ·Ïñ¿ò
|
# @author hxp
|
# @date 2024-09-12
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: Í·ÏñÍ·Ïñ¿ò
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2024-09-12 12:00"""
|
#-------------------------------------------------------------------------------
|
|
import GameWorld
|
import ShareDefine
|
import PlayerControl
|
import IPY_GameWorld
|
import ChPyNetSendPack
|
import IpyGameDataPY
|
import NetPackCommon
|
import ItemCommon
|
import ChConfig
|
|
import random
|
import time
|
|
def OnPlayerLogin(curPlayer):
|
SyncFaceInfo(curPlayer)
|
SyncFacePicInfo(curPlayer)
|
return
|
|
def OnMinute(curPlayer):
|
curTime = int(time.time())
|
|
delFaceList = []
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for index in range(ipyDataMgr.GetPlayerFaceCount()):
|
ipyData = ipyDataMgr.GetPlayerFaceByIndex(index)
|
faceID = ipyData.GetFaceID()
|
if ipyData.GetUnlockDefault():
|
# ĬÈϼ¤»îµÄ²»´¦Àí
|
continue
|
lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceLightTime % faceID)
|
expireTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceExpireTimes % faceID) # ÓÐЧʱ³¤£¬Ãë
|
if not lightTime or not expireTimes:
|
# δ¼¤»î»òÓÀ¾ÃµÄ²»´¦Àí
|
continue
|
endTime = lightTime + expireTimes
|
if endTime > curTime:
|
continue
|
if DelFace(curPlayer, faceID, False, "FaceTimeout"):
|
delFaceList.append(faceID)
|
|
if delFaceList:
|
RefreshFaceAttr(curPlayer)
|
|
delFacePicList = []
|
for index in range(ipyDataMgr.GetPlayerFacePicCount()):
|
ipyData = ipyDataMgr.GetPlayerFacePicByIndex(index)
|
facePicID = ipyData.GetFacePicID()
|
if ipyData.GetUnlockDefault():
|
# ĬÈϼ¤»îµÄ²»´¦Àí
|
continue
|
lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicLightTime % facePicID)
|
expireTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicExpireTimes % facePicID) # ÓÐЧʱ³¤£¬Ãë
|
if not lightTime or not expireTimes:
|
# δ¼¤»î»òÓÀ¾ÃµÄ²»´¦Àí
|
continue
|
endTime = lightTime + expireTimes
|
if endTime > curTime:
|
continue
|
if DelFacePic(curPlayer, facePicID, False, "FacePicTimeout"):
|
delFacePicList.append(facePicID)
|
|
if delFacePicList:
|
RefreshFacePicAttr(curPlayer)
|
return
|
|
def AddFace(curPlayer, faceID, setExpireTimes=None):
|
if faceID <= 0:
|
return
|
playerID = curPlayer.GetPlayerID()
|
ipyData = IpyGameDataPY.GetIpyGameData("PlayerFace", faceID)
|
if not ipyData:
|
return
|
if ipyData.GetUnlockDefault():
|
GameWorld.DebugLog("ĬÈϽâËøµÄÍ·Ïñ²»ÓÃÌí¼Ó: faceID=%s" % (faceID), playerID)
|
return
|
ipyExpireSeconds = ipyData.GetExpireMinutes() * 60
|
|
curTime = int(time.time())
|
lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceLightTime % faceID)
|
expireTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceExpireTimes % faceID) # ÓÐЧʱ³¤£¬Ãë
|
GameWorld.Log("Ìí¼ÓÍ·Ïñ: faceID=%s,setExpireTimes=%s,lightTime=%s,expireTimes=%s,ipyExpireSeconds=%s,curTime=%s"
|
% (faceID, setExpireTimes, lightTime, expireTimes, ipyExpireSeconds, curTime), playerID)
|
updLightTime = lightTime
|
updExpireTimes = expireTimes
|
|
# Ö¸¶¨Ê±³¤µÄ£¬ÈçGMÖ¸¶¨
|
if setExpireTimes >= 0:
|
updLightTime = curTime
|
updExpireTimes = setExpireTimes
|
GameWorld.Log(" Ö¸¶¨Í·Ïñʱ³¤: faceID=%s,updLightTime=%s,updExpireTimes=%s" % (faceID, updLightTime, updExpireTimes), playerID)
|
|
# ÓÀ¾Ã
|
elif ipyExpireSeconds == 0:
|
updLightTime = curTime
|
updExpireTimes = 0
|
GameWorld.Log(" Ìí¼ÓÓÀ¾ÃÍ·Ïñ: faceID=%s,updLightTime=%s,updExpireTimes=%s" % (faceID, updLightTime, updExpireTimes), playerID)
|
|
else:
|
# δ¹ýÆÚ
|
if lightTime and expireTimes and (lightTime + expireTimes) > curTime:
|
updExpireTimes = expireTimes + ipyExpireSeconds
|
GameWorld.Log(" ÀÛ¼ÓÍ·Ïñʱ³¤: faceID=%s,updLightTime=%s,updExpireTimes=%s" % (faceID, updLightTime, updExpireTimes), playerID)
|
else:
|
updLightTime = curTime
|
updExpireTimes = ipyExpireSeconds
|
GameWorld.Log(" ÖØÐ¼¤»îÍ·Ïñ: faceID=%s,updLightTime=%s,updExpireTimes=%s" % (faceID, updLightTime, updExpireTimes), playerID)
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaceLightTime % faceID, updLightTime)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaceExpireTimes % faceID, updExpireTimes)
|
RefreshFaceAttr(curPlayer)
|
SyncFaceInfo(curPlayer, [faceID])
|
return True
|
|
def DelFace(curPlayer, faceID, isRefreshAttr=True, notifyMail=""):
|
playerID = curPlayer.GetPlayerID()
|
ipyData = IpyGameDataPY.GetIpyGameData("PlayerFace", faceID)
|
if not ipyData:
|
return
|
if ipyData.GetUnlockDefault():
|
return
|
GameWorld.Log("ɾ³ýÍ·Ïñ: faceID=%s,notifyMail=%s" % (faceID, notifyMail), playerID)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaceLightTime % faceID, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaceExpireTimes % faceID, 0)
|
# ÐǼ¶²»ÖØÖã¬ÖØÐ¼¤»îºóÔÙ´ÎÉúЧ
|
|
if curPlayer.GetFace() == faceID:
|
defaultFaceIDList = GetDefaultFaceIDList()
|
randFace = random.choice(defaultFaceIDList) if defaultFaceIDList else 0
|
curPlayer.SetFace(randFace)
|
GameWorld.DebugLog("Íæ¼ÒÅå´÷µÄÍ·Ïñ±»É¾³ý£¬Ëæ»úÖØÖÃĬÈÏÍ·Ïñ! randFace=%s" % randFace, playerID)
|
|
if isRefreshAttr:
|
RefreshFaceAttr(curPlayer)
|
SyncFaceInfo(curPlayer, [faceID])
|
if notifyMail:
|
PlayerControl.SendMailByKey(notifyMail, [playerID], [], [faceID])
|
|
return True
|
|
def GetDefaultFaceIDList():
|
defaultFaceIDList = []
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for index in range(ipyDataMgr.GetPlayerFaceCount()):
|
ipyData = ipyDataMgr.GetPlayerFaceByIndex(index)
|
faceID = ipyData.GetFaceID()
|
if not ipyData.GetUnlockDefault():
|
continue
|
defaultFaceIDList.append(faceID)
|
return defaultFaceIDList
|
|
def GetDefaultFacePicIDList():
|
defaultFacePicIDList = []
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for index in range(ipyDataMgr.GetPlayerFacePicCount()):
|
ipyData = ipyDataMgr.GetPlayerFacePicByIndex(index)
|
facePicID = ipyData.GetFacePicID()
|
if not ipyData.GetUnlockDefault():
|
continue
|
defaultFacePicIDList.append(facePicID)
|
return defaultFacePicIDList
|
|
def AddFacePic(curPlayer, facePicID, setExpireTimes=None):
|
if facePicID <= 0:
|
return
|
playerID = curPlayer.GetPlayerID()
|
ipyData = IpyGameDataPY.GetIpyGameData("PlayerFacePic", facePicID)
|
if not ipyData:
|
return
|
if ipyData.GetUnlockDefault():
|
GameWorld.DebugLog("ĬÈϽâËøµÄÍ·Ïñ¿ò²»ÓÃÌí¼Ó: facePicID=%s" % (facePicID), playerID)
|
return
|
ipyExpireSeconds = ipyData.GetExpireMinutes() * 60
|
|
curTime = int(time.time())
|
lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicLightTime % facePicID)
|
expireTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicExpireTimes % facePicID) # ÓÐЧʱ³¤£¬Ãë
|
GameWorld.Log("Ìí¼ÓÍ·Ïñ¿ò: facePicID=%s,setExpireTimes=%s,lightTime=%s,expireTimes=%s,ipyExpireSeconds=%s,curTime=%s"
|
% (facePicID, setExpireTimes, lightTime, expireTimes, ipyExpireSeconds, curTime), playerID)
|
updLightTime = lightTime
|
updExpireTimes = expireTimes
|
|
# Ö¸¶¨Ê±³¤µÄ£¬ÈçGMÖ¸¶¨
|
if setExpireTimes >= 0:
|
updLightTime = curTime
|
updExpireTimes = setExpireTimes
|
GameWorld.Log(" Ö¸¶¨Í·Ïñ¿òʱ³¤: facePicID=%s,updLightTime=%s,updExpireTimes=%s" % (facePicID, updLightTime, updExpireTimes), playerID)
|
|
# ÓÀ¾Ã
|
elif ipyExpireSeconds == 0:
|
updLightTime = curTime
|
updExpireTimes = 0
|
GameWorld.Log(" Ìí¼ÓÓÀ¾ÃÍ·Ïñ¿ò: facePicID=%s,updLightTime=%s,updExpireTimes=%s" % (facePicID, updLightTime, updExpireTimes), playerID)
|
|
else:
|
# δ¹ýÆÚ
|
if lightTime and expireTimes and (lightTime + expireTimes) > curTime:
|
updExpireTimes = expireTimes + ipyExpireSeconds
|
GameWorld.Log(" ÀÛ¼ÓÍ·Ïñ¿òʱ³¤: facePicID=%s,updLightTime=%s,updExpireTimes=%s" % (facePicID, updLightTime, updExpireTimes), playerID)
|
else:
|
updLightTime = curTime
|
updExpireTimes = ipyExpireSeconds
|
GameWorld.Log(" ÖØÐ¼¤»îÍ·Ïñ¿ò: facePicID=%s,updLightTime=%s,updExpireTimes=%s" % (facePicID, updLightTime, updExpireTimes), playerID)
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FacePicLightTime % facePicID, updLightTime)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FacePicExpireTimes % facePicID, updExpireTimes)
|
RefreshFacePicAttr(curPlayer)
|
SyncFacePicInfo(curPlayer, [facePicID])
|
return True
|
|
def DelFacePic(curPlayer, facePicID, isRefreshAttr=True, notifyMail=""):
|
playerID = curPlayer.GetPlayerID()
|
ipyData = IpyGameDataPY.GetIpyGameData("PlayerFacePic", facePicID)
|
if not ipyData:
|
return
|
if ipyData.GetUnlockDefault():
|
return
|
GameWorld.Log("ɾ³ýÍ·Ïñ¿ò: facePicID=%s,notifyMail=%s" % (facePicID, notifyMail), playerID)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FacePicLightTime % facePicID, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FacePicExpireTimes % facePicID, 0)
|
# ÐǼ¶²»ÖØÖã¬ÖØÐ¼¤»îºóÔÙ´ÎÉúЧ
|
|
if curPlayer.GetFacePic() == facePicID:
|
defaultFacePicIDList = GetDefaultFacePicIDList()
|
randFacePic = random.choice(defaultFacePicIDList) if defaultFacePicIDList else 0
|
curPlayer.SetFacePic(randFacePic)
|
GameWorld.DebugLog("Íæ¼ÒÅå´÷µÄÍ·Ïñ¿ò¹ýÆÚ£¬Ëæ»úÖØÖÃĬÈÏÍ·Ïñ¿ò! randFacePic=%s" % randFacePic, playerID)
|
|
if isRefreshAttr:
|
RefreshFacePicAttr(curPlayer)
|
SyncFacePicInfo(curPlayer, [facePicID])
|
if notifyMail:
|
PlayerControl.SendMailByKey(notifyMail, [playerID], [], [facePicID])
|
return True
|
|
def GetFaceEndTime(curPlayer, faceID, ipyData=None):
|
## Í·Ïñ½áÊøÊ±¼ä´Á
|
# @return: -1-δ¼¤»î£»0-ÓÀ¾Ã£»>0-¾ßÌå½áÊøÊ±¼ä´Á
|
lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceLightTime % faceID)
|
expireTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceExpireTimes % faceID)
|
if lightTime:
|
if expireTimes:
|
return lightTime + expireTimes
|
return 0
|
if not ipyData:
|
ipyData = IpyGameDataPY.GetIpyGameData("PlayerFace", faceID)
|
if ipyData and ipyData.GetUnlockDefault():
|
return 0
|
return -1
|
|
def IsFaceCanUse(curPlayer, faceID, ipyData=None):
|
## Í·ÏñÊÇ·ñ¿ÉÓÃ
|
# ÕâÀï²»ÅжÏÑϽ÷µÄ¹ýÆÚʱ¼ä£¬¼´²»¶Ô±Èµ±Ç°Ê±¼ä£¬Ö»ÒªendTime>=0¼´¿É
|
# ¹ýÆÚÂß¼ÓɹýÆÚº¯Êý¶¨Ê±´¦Àíɾ³ý¼´¿É£¬¿ÉÄÜÓÐ1·ÖÖÓÑÓ³Ù
|
return GetFaceEndTime(curPlayer, faceID, ipyData) >= 0
|
|
def GetFacePicEndTime(curPlayer, facePicID, ipyData=None):
|
## Í·Ïñ¿ò½áÊøÊ±¼ä´Á
|
# @return: -1-δ¼¤»î£»0-ÓÀ¾Ã£»>0-¾ßÌå½áÊøÊ±¼ä´Á
|
lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicLightTime % facePicID)
|
expireTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicExpireTimes % facePicID)
|
if lightTime:
|
if expireTimes:
|
return lightTime + expireTimes
|
return 0
|
if not ipyData:
|
ipyData = IpyGameDataPY.GetIpyGameData("PlayerFacePic", facePicID)
|
if ipyData and ipyData.GetUnlockDefault():
|
return 0
|
return -1
|
|
def IsFacePicCanUse(curPlayer, facePicID, ipyData=None):
|
## Í·Ïñ¿òÊÇ·ñ¿ÉÓÃ
|
# ÕâÀï²»ÅжÏÑϽ÷µÄ¹ýÆÚʱ¼ä£¬¼´²»¶Ô±Èµ±Ç°Ê±¼ä£¬Ö»ÒªendTime>=0¼´¿É
|
# ¹ýÆÚÂß¼ÓɹýÆÚº¯Êý¶¨Ê±´¦Àíɾ³ý¼´¿É£¬¿ÉÄÜÓÐ1·ÖÖÓÑÓ³Ù
|
return GetFacePicEndTime(curPlayer, facePicID, ipyData) >= 0
|
|
def GetEndTimeStr(endTime):
|
endTimeStr = "δ¼¤»î"
|
if endTime == 0:
|
endTimeStr = "ÓÀ¾Ã"
|
elif endTime > 0:
|
endTimeStr = GameWorld.ChangeTimeNumToStr(endTime)
|
return endTimeStr
|
|
def RefreshFaceAttr(curPlayer):
|
CalcFaceAttr(curPlayer)
|
PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
|
return
|
|
def RefreshFacePicAttr(curPlayer):
|
CalcFacePicAttr(curPlayer)
|
PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
|
return
|
|
def CalcFaceAttr(curPlayer):
|
## ¼ÆËãÍ·ÏñÊôÐÔ
|
|
fightPowerEx = 0
|
allAttrList = [{} for i in range(4)]
|
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for index in range(ipyDataMgr.GetPlayerFaceCount()):
|
ipyData = ipyDataMgr.GetPlayerFaceByIndex(index)
|
faceID = ipyData.GetFaceID()
|
if not IsFaceCanUse(curPlayer, faceID, ipyData):
|
continue
|
|
fightPowerEx += ipyData.GetLightFightPower()
|
# ¼¤»îÊôÐÔ
|
lightAttrType = ipyData.GetLightAttrType()
|
lightAttrValue = ipyData.GetLightAttrValue()
|
for i, attrID in enumerate(lightAttrType):
|
attrValue = lightAttrValue[i]
|
PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
|
|
# ÐǼ¶ÊôÐÔ
|
faceStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceStar % faceID)
|
starIpyData = IpyGameDataPY.GetIpyGameDataNotLog("PlayerFaceStar", faceID, faceStar)
|
if starIpyData:
|
starAttrType = starIpyData.GetStarAttrType()
|
starAttrValue = starIpyData.GetStarAttrValue()
|
for i, attrID in enumerate(starAttrType):
|
attrValue = starAttrValue[i]
|
PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
|
|
# ±£´æ¼ÆËãÖµ
|
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Face, allAttrList)
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Face, fightPowerEx)
|
return
|
|
def CalcFacePicAttr(curPlayer):
|
## ¼ÆËãÍ·Ïñ¿òÊôÐÔ
|
|
fightPowerEx = 0
|
allAttrList = [{} for _ in range(4)]
|
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for index in range(ipyDataMgr.GetPlayerFacePicCount()):
|
ipyData = ipyDataMgr.GetPlayerFacePicByIndex(index)
|
facePicID = ipyData.GetFacePicID()
|
if not IsFacePicCanUse(curPlayer, facePicID, ipyData):
|
continue
|
|
fightPowerEx += ipyData.GetLightFightPower()
|
# ¼¤»îÊôÐÔ
|
lightAttrType = ipyData.GetLightAttrType()
|
lightAttrValue = ipyData.GetLightAttrValue()
|
for i, attrID in enumerate(lightAttrType):
|
attrValue = lightAttrValue[i]
|
PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
|
|
# ÐǼ¶ÊôÐÔ
|
facePicStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicStar % facePicID)
|
starIpyData = IpyGameDataPY.GetIpyGameDataNotLog("PlayerFacePicStar", facePicID, facePicStar)
|
if starIpyData:
|
starAttrType = starIpyData.GetStarAttrType()
|
starAttrValue = starIpyData.GetStarAttrValue()
|
for i, attrID in enumerate(starAttrType):
|
attrValue = starAttrValue[i]
|
PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
|
|
# ±£´æ¼ÆËãÖµ
|
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FacePic, allAttrList)
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_FacePic, fightPowerEx)
|
return
|
|
#// B2 26 Í·Ïñ»Ã»¯ #tagCMFaceChange
|
#
|
#struct tagCMFaceChange
|
#{
|
# tagHead Head;
|
# DWORD FaceID; // »Ã»¯µÄID
|
#};
|
def OnFaceChange(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
playerID = curPlayer.GetPlayerID()
|
faceID = clientData.FaceID
|
|
if not IsFaceCanUse(curPlayer, faceID):
|
GameWorld.DebugLog("¸ÃÍ·Ïñ²»¿ÉÓÃ! faceID=%s" % (faceID), playerID)
|
return
|
GameWorld.DebugLog("Í·Ïñ»Ã»¯! faceID=%s" % (faceID), playerID)
|
curPlayer.SetFace(faceID)
|
return
|
|
#// B2 27 Í·ÏñÉýÐÇ #tagCMFaceStarUP
|
#
|
#struct tagCMFaceStarUP
|
#{
|
# tagHead Head;
|
# DWORD FaceID;
|
#};
|
def OnFaceStarUP(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
playerID = curPlayer.GetPlayerID()
|
faceID = clientData.FaceID
|
|
if not IsFaceCanUse(curPlayer, faceID):
|
GameWorld.DebugLog("¸ÃÍ·Ïñ²»¿ÉÓÃ! faceID=%s" % (faceID), playerID)
|
return
|
|
curStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceStar % faceID)
|
nextStar = curStar + 1
|
nextIpyData = IpyGameDataPY.GetIpyGameData("PlayerFaceStar", faceID, nextStar)
|
if not nextIpyData:
|
GameWorld.DebugLog("²»´æÔÚ¸ÃÍ·ÏñÐǼ¶! faceID=%s,nextStar=%s" % (faceID, nextStar), playerID)
|
return
|
needItemList = nextIpyData.GetStarUpNeedItemList()
|
if not needItemList:
|
return
|
itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
|
if lackItemDict:
|
GameWorld.DebugLog("Í·ÏñÉýÐÇËùÐèÎïÆ·²»×ã! faceID=%s,nextStar=%s,needItemList=%s,lackItemDict=%s"
|
% (faceID, nextStar, needItemList, lackItemDict), playerID)
|
return
|
ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "FaceStarUP")
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaceStar % faceID, nextStar)
|
|
GameWorld.DebugLog("Í·ÏñÉýÐÇ! faceID=%s,curStar=%s,nextStar=%s" % (faceID, curStar, nextStar), playerID)
|
|
RefreshFaceAttr(curPlayer)
|
SyncFaceInfo(curPlayer, [faceID])
|
return
|
|
#// B2 28 Í·Ïñ¿ò»Ã»¯ #tagCMFacePicChange
|
#
|
#struct tagCMFacePicChange
|
#{
|
# tagHead Head;
|
# DWORD FacePicID; // »Ã»¯µÄID
|
#};
|
def OnFacePicChange(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
playerID = curPlayer.GetPlayerID()
|
facePicID = clientData.FacePicID
|
|
if not IsFacePicCanUse(curPlayer, facePicID):
|
GameWorld.DebugLog("¸ÃÍ·Ïñ¿ò²»¿ÉÓÃ! facePicID=%s" % (facePicID), playerID)
|
return
|
GameWorld.DebugLog("Í·Ïñ¿ò»Ã»¯! facePicID=%s" % (facePicID), playerID)
|
curPlayer.SetFacePic(facePicID)
|
return
|
|
#// B2 29 Í·Ïñ¿òÉýÐÇ #tagCMFacePicStarUP
|
#
|
#struct tagCMFacePicStarUP
|
#{
|
# tagHead Head;
|
# DWORD FacePicID;
|
#};
|
def OnFacePicStarUP(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
playerID = curPlayer.GetPlayerID()
|
facePicID = clientData.FacePicID
|
|
if not IsFacePicCanUse(curPlayer, facePicID):
|
GameWorld.DebugLog("¸ÃÍ·Ïñ¿ò²»¿ÉÓÃ! facePicID=%s" % (facePicID), playerID)
|
return
|
|
curStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicStar % facePicID)
|
nextStar = curStar + 1
|
nextIpyData = IpyGameDataPY.GetIpyGameData("PlayerFacePicStar", facePicID, nextStar)
|
if not nextIpyData:
|
GameWorld.DebugLog("²»´æÔÚ¸ÃÍ·Ïñ¿òÐǼ¶! facePicID=%s,nextStar=%s" % (facePicID, nextStar), playerID)
|
return
|
needItemList = nextIpyData.GetStarUpNeedItemList()
|
if not needItemList:
|
return
|
itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
|
if lackItemDict:
|
GameWorld.DebugLog("Í·Ïñ¿òÉýÐÇËùÐèÎïÆ·²»×ã! facePicID=%s,nextStar=%s,needItemList=%s,lackItemDict=%s"
|
% (facePicID, nextStar, needItemList, lackItemDict), playerID)
|
return
|
ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "FacePicStarUP")
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FacePicStar % facePicID, nextStar)
|
|
GameWorld.DebugLog("Í·Ïñ¿òÉýÐÇ! facePicID=%s,curStar=%s,nextStar=%s" % (facePicID, curStar, nextStar), playerID)
|
|
RefreshFacePicAttr(curPlayer)
|
SyncFacePicInfo(curPlayer, [facePicID])
|
return
|
|
def SyncFaceInfo(curPlayer, faceIDList=None):
|
if faceIDList == None:
|
syncIDList = []
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for index in range(ipyDataMgr.GetPlayerFaceCount()):
|
ipyData = ipyDataMgr.GetPlayerFaceByIndex(index)
|
syncIDList.append(ipyData.GetFaceID())
|
else:
|
syncIDList = faceIDList
|
|
faceList = []
|
for faceID in syncIDList:
|
lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceLightTime % faceID)
|
if not lightTime and faceIDList == None:
|
continue
|
face = ChPyNetSendPack.tagMCFace()
|
face.FaceID = faceID
|
face.LightTime = lightTime
|
face.ExpireTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceExpireTimes % faceID)
|
face.Star = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceStar % faceID)
|
faceList.append(face)
|
|
if not faceList:
|
return
|
|
clientPack = ChPyNetSendPack.tagMCFaceInfo()
|
clientPack.FaceList = faceList
|
clientPack.Count = len(clientPack.FaceList)
|
NetPackCommon.SendFakePack(curPlayer, clientPack)
|
return
|
|
def SyncFacePicInfo(curPlayer, facePicIDList=None):
|
if facePicIDList == None:
|
syncIDList = []
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for index in range(ipyDataMgr.GetPlayerFacePicCount()):
|
ipyData = ipyDataMgr.GetPlayerFacePicByIndex(index)
|
syncIDList.append(ipyData.GetFacePicID())
|
else:
|
syncIDList = facePicIDList
|
|
facePicList = []
|
for facePicID in syncIDList:
|
lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicLightTime % facePicID)
|
if not lightTime and facePicIDList == None:
|
continue
|
facePic = ChPyNetSendPack.tagMCFacePic()
|
facePic.FacePicID = facePicID
|
facePic.LightTime = lightTime
|
facePic.ExpireTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicExpireTimes % facePicID)
|
facePic.Star = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicStar % facePicID)
|
facePicList.append(facePic)
|
|
if not facePicList:
|
return
|
|
clientPack = ChPyNetSendPack.tagMCFacePicInfo()
|
clientPack.FacePicList = facePicList
|
clientPack.Count = len(clientPack.FacePicList)
|
NetPackCommon.SendFakePack(curPlayer, clientPack)
|
return
|