#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.PlayerGubao
|
#
|
# @todo:¹Å±¦ÏµÍ³
|
# @author hxp
|
# @date 2023-01-05
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ¹Å±¦ÏµÍ³
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2023-01-05 15:30"""
|
#-------------------------------------------------------------------------------
|
|
import GameWorld
|
import PlayerRune
|
import ItemCommon
|
import PlayerControl
|
import IpyGameDataPY
|
import ChPyNetSendPack
|
import PlayerGatherSoul
|
import NetPackCommon
|
import IPY_GameWorld
|
import PlayerHorse
|
import PlayerDogz
|
import PlayerPet
|
import ChConfig
|
|
def GetGubaoLVInfo(curPlayer, gubaoID):
|
lvInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoLVInfo % gubaoID)
|
lv = lvInfo / 100
|
star = lvInfo % 100
|
return lv, star
|
def SetGubaoLVInfo(curPlayer, gubaoID, lv, star):
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoLVInfo % gubaoID, lv * 100 + star)
|
return
|
|
def OnPlayerLogin(curPlayer):
|
Sync_GubaoInfo(curPlayer)
|
return
|
|
#// B2 16 ¹Å±¦¼¤»î #tagCMGubaoActivate
|
#
|
#struct tagCMGubaoActivate
|
#{
|
# tagHead Head;
|
# WORD GubaoID;
|
#};
|
def OnGubaoActivate(index, curPackData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
playerID = curPlayer.GetPlayerID()
|
gubaoID = curPackData.GubaoID
|
ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID)
|
if not ipyData:
|
return
|
needItemID = ipyData.GetUnlockItemID()
|
needItemCnt = ipyData.GetUnlockItemCnt()
|
if not needItemID or not needItemCnt:
|
return
|
|
lv, star = GetGubaoLVInfo(curPlayer, gubaoID)
|
if lv or star:
|
GameWorld.DebugLog("¹Å±¦ÒѾ¼¤»î¹ý£¡ gubaoID=%s" % gubaoID, playerID)
|
return
|
|
itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(needItemID, itemPack, needItemCnt)
|
if not hasEnough:
|
GameWorld.DebugLog("¼¤»î¹Å±¦µÀ¾ß²»×ã! needItemID=%s,needItemCnt=%s" % (needItemID, needItemCnt), playerID)
|
return
|
ItemCommon.ReduceItem(curPlayer, itemPack, itemList, needItemCnt, False, "Gubao")
|
|
lv, star = 1, 1
|
SetGubaoLVInfo(curPlayer, gubaoID, lv, star)
|
GameWorld.Log("¹Å±¦¼¤»î³É¹¦£¡ gubaoID=%s" % gubaoID, playerID)
|
|
RefreshGubaoAttr(curPlayer)
|
Sync_GubaoInfo(curPlayer, [gubaoID])
|
return
|
|
#// B2 17 ¹Å±¦ÉýÐÇ #tagCMGubaoStarUp
|
#
|
#struct tagCMGubaoStarUp
|
#{
|
# tagHead Head;
|
# WORD GubaoID;
|
#};
|
def OnGubaoStarUp(index, curPackData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
playerID = curPlayer.GetPlayerID()
|
gubaoID = curPackData.GubaoID
|
|
lv, star = GetGubaoLVInfo(curPlayer, gubaoID)
|
if not star:
|
GameWorld.DebugLog("¹Å±¦Î´¼¤»î£¬ÎÞ·¨ÉýÐÇ£¡ gubaoID=%s" % gubaoID, playerID)
|
return
|
|
if not IpyGameDataPY.GetIpyGameDataNotLog("GubaoStar", gubaoID, star + 1):
|
GameWorld.DebugLog("¹Å±¦ÒÑÂúÐÇ£¡ gubaoID=%s,star=%s" % (gubaoID, star), playerID)
|
return
|
|
ipyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star)
|
if not ipyData:
|
return
|
needItemList = ipyData.GetStarUPNeedItemInfo()
|
if not needItemList:
|
return
|
|
itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
|
if lackItemDict:
|
GameWorld.DebugLog("¹Å±¦ÉýÐÇËùÐèÎïÆ·²»×㣡 star=%s,needItemList=%s,lackItemDict=%s" % (star, needItemList, lackItemDict), playerID)
|
return
|
#¿ÛÏûºÄ
|
ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Gubao")
|
|
updStar = star + 1
|
SetGubaoLVInfo(curPlayer, gubaoID, lv, updStar)
|
GameWorld.Log("¹Å±¦ÉýÐÇ: gubaoID=%s,updStar=%s" % (gubaoID, updStar), playerID)
|
RefreshGubaoAttr(curPlayer)
|
Sync_GubaoInfo(curPlayer, [gubaoID])
|
return
|
|
#// B2 18 ¹Å±¦Éý¼¶ #tagCMGubaoLVUp
|
#
|
#struct tagCMGubaoLVUp
|
#{
|
# tagHead Head;
|
# WORD GubaoID;
|
#};
|
def OnGubaoLVUp(index, curPackData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
playerID = curPlayer.GetPlayerID()
|
gubaoID = curPackData.GubaoID
|
|
lv, star = GetGubaoLVInfo(curPlayer, gubaoID)
|
if not star:
|
GameWorld.DebugLog("¹Å±¦Î´¼¤»î£¬ÎÞ·¨Éý¼¶£¡ gubaoID=%s" % gubaoID, playerID)
|
return
|
|
ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID)
|
if not ipyData:
|
return
|
quality = ipyData.GetGubaoQuality()
|
|
if not IpyGameDataPY.GetIpyGameDataNotLog("GubaoLV", quality, lv + 1):
|
GameWorld.DebugLog("¹Å±¦ÒÑÂú¼¶£¡ gubaoID=%s,quality=%s,lv=%s" % (gubaoID, quality, lv), playerID)
|
return
|
|
lvIpyData = IpyGameDataPY.GetIpyGameData("GubaoLV", quality, lv)
|
if not lvIpyData:
|
return
|
needItemList = lvIpyData.GetLVUPNeedItemInfo()
|
if not needItemList:
|
return
|
|
itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
|
if lackItemDict:
|
GameWorld.DebugLog("¹Å±¦Éý¼¶ËùÐèÎïÆ·²»×㣡 quality=%s,lv=%s,needItemList=%s,lackItemDict=%s"
|
% (quality, lv, needItemList, lackItemDict), playerID)
|
return
|
#¿ÛÏûºÄ
|
ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Gubao")
|
|
updLV = lv + 1
|
SetGubaoLVInfo(curPlayer, gubaoID, updLV, star)
|
GameWorld.Log("¹Å±¦Éý¼¶: gubaoID=%s,quality=%s,updLV=%s" % (gubaoID, quality, updLV), playerID)
|
RefreshGubaoAttr(curPlayer)
|
Sync_GubaoInfo(curPlayer, [gubaoID])
|
return
|
|
def RefreshGubaoAttr(curPlayer):
|
#CalcGubaoAttr(curPlayer)
|
PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
|
return
|
|
def CalcGubaoAttr(curPlayer):
|
|
allAttrList = [{} for _ in range(4)]
|
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for index in xrange(ipyDataMgr.GetGubaoCount()):
|
ipyData = ipyDataMgr.GetGubaoByIndex(index)
|
gubaoID = ipyData.GetGubaoID()
|
lv, star = GetGubaoLVInfo(curPlayer, gubaoID)
|
if not star:
|
continue
|
|
quality = ipyData.GetGubaoQuality()
|
lvIpyData = IpyGameDataPY.GetIpyGameData("GubaoLV", quality, lv)
|
if lvIpyData:
|
lvAttrTypeList = lvIpyData.GetLVAttrTypeList()
|
lvAttrValueList = lvIpyData.GetLVAttrValueList()
|
for i, attrID in enumerate(lvAttrTypeList):
|
attrValue = lvAttrValueList[i]
|
PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
|
|
starIpyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star)
|
if starIpyData:
|
starEffIDList = starIpyData.GetStarEffIDList()
|
effAttrInfo = {}
|
#GameWorld.DebugLog("GubaoStarÊôÐÔ: gubaoID=%s,star=%s,starEffIDList=%s" % (gubaoID, star, starEffIDList))
|
for effID in starEffIDList:
|
__calcStarEffAttrByID(curPlayer, effID, effAttrInfo)
|
#GameWorld.DebugLog(" effID=%s,effAttrInfo=%s" % (effID, effAttrInfo))
|
for attrID, attrValue in effAttrInfo.items():
|
PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
|
|
# ±£´æ¼ÆËãÖµ
|
#GameWorld.DebugLog("¹Å±¦ÊôÐÔ: %s" % allAttrList)
|
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Gubao, allAttrList)
|
return
|
|
def __calcStarEffAttrByID(curPlayer, effID, effAttrInfo):
|
''' ¼ÆËã¹Å±¦ÌØÊâЧ¹ûID¶ÔÓ¦ÌáÉýÊôÐÔ
|
'''
|
ipyData = IpyGameDataPY.GetIpyGameData("GubaoEffAttr", effID)
|
if not ipyData:
|
return
|
effType = ipyData.GetGubaoEffType()
|
effCond = ipyData.GetEffCond()
|
effCond2 = ipyData.GetEffCond2()
|
effCond3 = ipyData.GetEffCond3()
|
attrID = ipyData.GetEffAttrID()
|
effAttrValue = ipyData.GetEffAttrValue()
|
if effAttrValue <= 0:
|
return
|
#Ч¹ûÀàÐÍ ÀàÐÍ˵Ã÷ Ìõ¼þ
|
# 10 xÆ·ÖÊÁé³è¹¥»÷ÊôÐÔÌáÉýx% xÆ·ÖÊ
|
if effType == 10:
|
customAttrDictPet = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Pet)[2]
|
petQualityAttrInfo = customAttrDictPet.get("petQualityAttrInfo", {})
|
quality = effCond
|
#GameWorld.DebugLog(" effID=%s,effType=%s,quality=%s,petQualityAttrInfo=%s" % (effID, effType, quality, petQualityAttrInfo))
|
if quality not in petQualityAttrInfo:
|
return
|
__addStarEffFuncAttr(ipyData, effAttrInfo, petQualityAttrInfo[quality], effAttrValue)
|
|
# 11 Áé³è×ܵȼ¶Ã¿x¼¶+xxÊôÐÔ x¼¶
|
elif effType == 11:
|
totalPetLV = PlayerPet.GetTotalPetLV(curPlayer)
|
addAttrValue = int(totalPetLV / effCond * effAttrValue)
|
#GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,totalPetLV=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, totalPetLV, attrID, addAttrValue))
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
|
# 12 Áé³èÿ¼¤»îxÖ»+xxÊôÐÔ xÖ»
|
elif effType == 12:
|
totalPetCount = PlayerPet.GetTotalPetCount(curPlayer)
|
addAttrValue = int(totalPetCount / effCond * effAttrValue)
|
#GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,totalPetCount=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, totalPetCount, attrID, addAttrValue))
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
|
# 13 xÆ·ÖÊ×øÆï»Ã»¯ÊôÐÔÌáÉýx% xÆ·ÖÊ
|
elif effType == 13:
|
customAttrDictSkin = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSkin)[2]
|
horseSkinQualityAttrInfo = customAttrDictSkin.get("horseSkinQualityAttrInfo", {})
|
quality = effCond
|
#GameWorld.DebugLog(" effID=%s,effType=%s,quality=%s,horseSkinQualityAttrInfo=%s" % (effID, effType, quality, horseSkinQualityAttrInfo))
|
if quality not in horseSkinQualityAttrInfo:
|
return
|
__addStarEffFuncAttr(ipyData, effAttrInfo, horseSkinQualityAttrInfo[quality], effAttrValue)
|
|
# 14 ×øÆï»Ã»¯¼¤»îxÖ»+xxÊôÐÔ xÖ»
|
elif effType == 14:
|
horseSkinActCount = PlayerHorse.GetHorseSkinActCount(curPlayer)
|
addAttrValue = int(horseSkinActCount / effCond * effAttrValue)
|
#GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,horseSkinActCount=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, horseSkinActCount, attrID, addAttrValue))
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
|
# 15 ÿÅàÑø×øÆïx´Î+xxÊôÐÔ x´Î
|
elif effType == 15:
|
pass
|
|
#16 x½××°±¸Ç¿»¯ÊôÐÔÌáÉýx% x½×
|
elif effType == 16:
|
customAttrDictPlus = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Plus)[2]
|
classBaseAttrDictPlus = customAttrDictPlus.get("classBaseAttrDictPlus", {})
|
classLV = effCond
|
#GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classBaseAttrDictPlus=%s" % (effID, effType, classLV, classBaseAttrDictPlus))
|
if classLV not in classBaseAttrDictPlus:
|
return
|
__addStarEffFuncAttr(ipyData, effAttrInfo, classBaseAttrDictPlus[classLV], effAttrValue)
|
|
#17 x½××°±¸±¦Ê¯ÊôÐÔÌáÉýx% x½×
|
elif effType == 17:
|
customAttrDictStone = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone)[2]
|
classBaseAttrDictStone = customAttrDictStone.get("classBaseAttrDictStone", {})
|
classLV = effCond
|
#GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classBaseAttrDictStone=%s" % (effID, effType, classLV, classBaseAttrDictStone))
|
if classLV not in classBaseAttrDictStone:
|
return
|
__addStarEffFuncAttr(ipyData, effAttrInfo, classBaseAttrDictStone[classLV], effAttrValue)
|
|
#18 x½××°±¸ÉýÐÇÊôÐÔÌáÉýx% x½×
|
elif effType == 18:
|
customAttrDictStar = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Star)[2]
|
classBaseAttrDictStar = customAttrDictStar.get("classBaseAttrDictStar", {})
|
classLV = effCond
|
#GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classBaseAttrDictStar=%s" % (effID, effType, classLV, classBaseAttrDictStar))
|
if classLV not in classBaseAttrDictStar:
|
return
|
__addStarEffFuncAttr(ipyData, effAttrInfo, classBaseAttrDictStar[classLV], effAttrValue)
|
|
#19 x½××°±¸Ï´Á¶ÊôÐÔÌáÉýx% x½×
|
elif effType == 19:
|
customAttrDictWash = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash)[2]
|
classBaseAttrDictWash = customAttrDictWash.get("classBaseAttrDictWash", {})
|
classLV = effCond
|
#GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classBaseAttrDictWash=%s" % (effID, effType, classLV, classBaseAttrDictWash))
|
if classLV not in classBaseAttrDictWash:
|
return
|
__addStarEffFuncAttr(ipyData, effAttrInfo, classBaseAttrDictWash[classLV], effAttrValue)
|
|
#20 x½××°±¸¸½Ä§ÊôÐÔÌáÉýx% x½×
|
elif effType == 20:
|
customAttrDictEnchant = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Enchant)[2]
|
classBaseAttrDictEnchant = customAttrDictEnchant.get("classBaseAttrDictEnchant", {})
|
classLV = effCond
|
#GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classBaseAttrDictEnchant=%s" % (effID, effType, classLV, classBaseAttrDictEnchant))
|
if classLV not in classBaseAttrDictEnchant:
|
return
|
__addStarEffFuncAttr(ipyData, effAttrInfo, classBaseAttrDictEnchant[classLV], effAttrValue)
|
|
#21 ³öÕ½ÉñÊÞ×°±¸Ç¿»¯Ã¿x¼¶+xxÊôÐÔ x¼¶
|
elif effType == 21:
|
fightDogzTotalPlusLv = PlayerDogz.GetFightDogzTotalPlusLv(curPlayer)
|
addAttrValue = int(fightDogzTotalPlusLv / effCond * effAttrValue)
|
#GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,fightDogzTotalPlusLv=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, fightDogzTotalPlusLv, attrID, addAttrValue))
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
|
#22 ÌìÐÇËþÿͨ¹Øx²ã+xxÊôÐÔ x²ã
|
elif effType == 22:
|
skyTowerFloor = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_SkyTowerFloor)
|
addAttrValue = int(skyTowerFloor / effCond * effAttrValue)
|
#GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,skyTowerFloor=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, skyTowerFloor, attrID, addAttrValue))
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
|
#23 ·ûÓ¡Ëþÿͨ¹Øx²ã+xxÊôÐÔ x²ã
|
elif effType == 23:
|
trialTowerPassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)
|
addAttrValue = int(trialTowerPassLV / effCond * effAttrValue)
|
#GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,trialTowerPassLV=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, trialTowerPassLV, attrID, addAttrValue))
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
|
#24 ·ûÓ¡µÈ¼¶Ã¿Ã¿x¼¶+xxÊôÐÔ x¼¶
|
elif effType == 24:
|
runeTotalLV = PlayerRune.GetRuneTotalLV(curPlayer)
|
addAttrValue = int(runeTotalLV / effCond * effAttrValue)
|
#GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,runeTotalLV=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, runeTotalLV, attrID, addAttrValue))
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
|
#25 ¾Û»êµÈ¼¶Ã¿Ã¿x¼¶+xxÊôÐÔ x¼¶
|
elif effType == 25:
|
soulTotalLV = PlayerGatherSoul.GetGatherSoulTotalLV(curPlayer)
|
addAttrValue = int(soulTotalLV / effCond * effAttrValue)
|
#GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,soulTotalLV=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, soulTotalLV, attrID, addAttrValue))
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
|
#26 x½××°±¸Ç¿»¯Ã¿x¼¶+xxÊôÐÔ x½× x¼¶
|
elif effType == 26:
|
customAttrDictPlus = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Plus)[2]
|
classPlusLVDict = customAttrDictPlus.get("classPlusLVDict", {})
|
classLV = effCond
|
#GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classPlusLVDict=%s" % (effID, effType, classLV, classPlusLVDict))
|
if classLV not in classPlusLVDict:
|
return
|
totalPlusLV = classPlusLVDict[classLV]
|
addAttrValue = int(totalPlusLV / effCond2 * effAttrValue)
|
#GameWorld.DebugLog(" effCond=%s,effCond2=%s,totalPlusLV=%s,attrID=%s,addAttrValue=%s" % (effCond, effCond2, totalPlusLV, attrID, addAttrValue))
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
|
#27 x½××°±¸±¦Ê¯Ã¿x¼¶+xxÊôÐÔ x½× x¼¶
|
elif effType == 27:
|
customAttrDictStone = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone)[2]
|
classStoneLVDict = customAttrDictStone.get("classStoneLVDict", {})
|
classLV = effCond
|
#GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classStoneLVDict=%s" % (effID, effType, classLV, classStoneLVDict))
|
if classLV not in classStoneLVDict:
|
return
|
totalStoneLV = classStoneLVDict[classLV]
|
addAttrValue = int(totalStoneLV / effCond2 * effAttrValue)
|
#GameWorld.DebugLog(" effCond=%s,effCond2=%s,totalStoneLV=%s,attrID=%s,addAttrValue=%s" % (effCond, effCond2, totalStoneLV, attrID, addAttrValue))
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
|
#28 x½××°±¸ÉýÐÇÿxÐÇ+xxÊôÐÔ x½× xÐÇ
|
elif effType == 28:
|
customAttrDictStar = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Star)[2]
|
classStarLVDict = customAttrDictStar.get("classStarLVDict", {})
|
classLV = effCond
|
#GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classStarLVDict=%s" % (effID, effType, classLV, classStarLVDict))
|
if classLV not in classStarLVDict:
|
return
|
totalStarLV = classStarLVDict[classLV]
|
addAttrValue = int(totalStarLV / effCond2 * effAttrValue)
|
#GameWorld.DebugLog(" effCond=%s,effCond2=%s,totalStarLV=%s,attrID=%s,addAttrValue=%s" % (effCond, effCond2, totalStarLV, attrID, addAttrValue))
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
|
#29 x½××°±¸Ï´Á·Ã¿x¼¶+xxÊôÐÔ x½× x¼¶
|
elif effType == 29:
|
customAttrDictWash = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash)[2]
|
classWashLVDict = customAttrDictWash.get("classWashLVDict", {})
|
classLV = effCond
|
#GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classWashLVDict=%s" % (effID, effType, classLV, classWashLVDict))
|
if classLV not in classWashLVDict:
|
return
|
totalWashLV = classWashLVDict[classLV]
|
addAttrValue = int(totalWashLV / effCond2 * effAttrValue)
|
#GameWorld.DebugLog(" effCond=%s,effCond2=%s,totalWashLV=%s,attrID=%s,addAttrValue=%s" % (effCond, effCond2, totalWashLV, attrID, addAttrValue))
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
|
#30 x½××°±¸¸½Ä§Ã¿x¼¶+xxÊôÐÔ x½× x¼¶
|
elif effType == 30:
|
customAttrDictEnchant = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Enchant)[2]
|
classEnchantLVDict = customAttrDictEnchant.get("classEnchantLVDict", {})
|
classLV = effCond
|
#GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classEnchantLVDict=%s" % (effID, effType, classLV, classEnchantLVDict))
|
if classLV not in classEnchantLVDict:
|
return
|
totalEnchantLV = classEnchantLVDict[classLV]
|
addAttrValue = int(totalEnchantLV / effCond2 * effAttrValue)
|
#GameWorld.DebugLog(" effCond=%s,effCond2=%s,totalEnchantLV=%s,attrID=%s,addAttrValue=%s" % (effCond, effCond2, totalEnchantLV, attrID, addAttrValue))
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
|
#31 x½××°±¸x¼þxÆ·ÖÊ×°±¸+xxÊôÐÔ x½× x¼þ xÆ·ÖÊ
|
elif effType == 31:
|
customAttrDictEquip = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Equip)[2]
|
classEquipColorDict = customAttrDictEquip.get("classEquipColorDict", {})
|
classLV = effCond
|
#GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classEquipColorDict=%s" % (effID, effType, classLV, classEquipColorDict))
|
if classLV not in classEquipColorDict:
|
return
|
equipColorDict = classEquipColorDict[classLV]
|
equipColorCnt = 0
|
for itemColor in equipColorDict.values():
|
if itemColor >= effCond3:
|
equipColorCnt += 1
|
addAttrValue = int(equipColorCnt / effCond2 * effAttrValue)
|
#GameWorld.DebugLog(" effCond=%s,effCond2=%s,effCond3=%s,equipColorCnt=%s,attrID=%s,addAttrValue=%s" % (effCond, effCond2, effCond3, equipColorCnt, attrID, addAttrValue))
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
|
#32 »ñµÃxµãÁé¸ùµã+xxÊôÐÔ xµã
|
elif effType == 32:
|
totalLingGenPoint = PlayerControl.GetTotalLingGenPoint(curPlayer)
|
addAttrValue = int(totalLingGenPoint / effCond * effAttrValue)
|
#GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,totalLingGenPoint=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, totalLingGenPoint, attrID, addAttrValue))
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
|
return
|
|
def __addStarEffFuncAttr(ipyData, effAttrInfo, funcAttrInfo, effAttrValue):
|
if not funcAttrInfo or effAttrValue <= 0:
|
return
|
isPer = ipyData.GetIsPer()
|
effAttrIDList = ipyData.GetEffFuncAttrIDList() # ÌáÉýÖ¸¶¨¹¦ÄÜÊôÐÔIDÁбí
|
for attrID, attrValue in funcAttrInfo.items():
|
if effAttrIDList and attrID not in effAttrIDList:
|
continue
|
if isPer:
|
addAttrValue = int(attrValue * effAttrValue / 100.0)
|
else:
|
addAttrValue = effAttrValue
|
if attrID > 0 and addAttrValue > 0:
|
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
|
return
|
|
def Sync_GubaoInfo(curPlayer, gubaoIDList=None):
|
if gubaoIDList == None:
|
syncIDList = []
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for index in range(ipyDataMgr.GetGubaoCount()):
|
ipyData = ipyDataMgr.GetGubaoByIndex(index)
|
syncIDList.append(ipyData.GetGubaoID())
|
else:
|
syncIDList = gubaoIDList
|
|
gubaoInfoList = []
|
for gubaoID in syncIDList:
|
lv, star = GetGubaoLVInfo(curPlayer, gubaoID)
|
if not lv and not star and gubaoIDList == None:
|
# ûÓÐÖ¸¶¨Ê±Ö»Í¬²½¼¤»îµÄ
|
continue
|
gubao = ChPyNetSendPack.tagMCGubao()
|
gubao.GubaoID = gubaoID
|
gubao.GubaoLV = lv
|
gubao.GubaoStar = star
|
gubaoInfoList.append(gubao)
|
|
if not gubaoInfoList:
|
return
|
|
clientPack = ChPyNetSendPack.tagMCGubaoInfo()
|
clientPack.GubaoInfoList = gubaoInfoList
|
clientPack.Count = len(clientPack.GubaoInfoList)
|
NetPackCommon.SendFakePack(curPlayer, clientPack)
|
return
|