#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
#-------------------------------------------------------------------------------
|
#
|
##@package PlayerAutoCheckOnline
|
#
|
# @todo: Íæ¼ÒÔö¼Ó±³°üµÄÏà¹ØÅäÖÃÐÅÏ¢¹ÜÀíÆ÷£¬¸÷ÖÖ±³°üµÄÅäÖÃ×Ö¶ÎÐÅÏ¢Ðè±£³ÖÒ»ÖÂ
|
# @author xcc
|
# @date 2014-04-24 22:05
|
# @version 1.5
|
#
|
# ÏêϸÃèÊö: Íæ¼ÒÔö¼Ó±³°üµÄÏà¹ØÅäÖÃÐÅÏ¢¹ÜÀíÆ÷
|
|
# @change: "2014-04-22 17:50" xcc Ôö¼ÓÊ×°æ±¾
|
# @change: "2014-04-24 22:05" cbw ÔÚÏß¿ªÆô¸ÄΪһ´ÎÒ»¸ñ
|
# @change: "2014-06-24 21:00" Alee È¥³ýÒì³£Å׳öÏêϸÊä³ö³ö´íÐÅÏ¢
|
# @change: "2015-01-10 23:00" hxp ÆÁ±Î²Ö¿âË¢ÊôÐÔ
|
# @change: "2015-08-12 16:00" zqx ¿ª²Ö¿âË¢ÊôÐÔ
|
#---------------------------------------------------------------------
|
"""Version = 2015-08-12 16:00"""
|
#------------------------------------------------------------------------------
|
import ReadChConfig
|
import GameWorld
|
import IPY_GameWorld
|
import PlayerControl
|
import ItemCommon
|
import ChConfig
|
import copy
|
|
##±³°üµÄÅäÖÃÐÅÏ¢£¬Ö»ÒªÓÃÓÚ¿ÉÀ©³äµÄ±³°üÀàÐÍ£¬ÈçÎïÆ·±³°ü£¬²Ö¿â±³°ü£¬Ê¹ÓõÄÅäÖøñʽÐèͳһ
|
class ExpandPackCfg(object):
|
##¹¹Ô캯Êý
|
#@param cfgName ÅäÖÃÎļþÃû
|
#@param defCount ³õʼ±³°ü¸ñ×ÓÊý
|
#@param maxCount ×î´ó±³°ü¸ñ×ÓÊý
|
#@return ÎÞ
|
#@remarks ¶ÁÈ¡ÅäÖÃÎļþ
|
def __init__(self, cfgName, defCount, maxCount):
|
self.__cfgInfo = {} #ÅäÖÃÐÅÏ¢{1:[5,10,2000], ...}
|
self.__totalAddAttrInfoWithCount = {} #Ôö¼ÓµÄ×ÜÊôÐÔ£¬°´¸ñ×ÓÊý¼ÆË㣬Èç¸ñ×ÓÊýÊÇ3£¬Ôò»áÀÛ¼Ó1£¬2£¬3¸ñµÄÐÅÏ¢
|
self.__defCount = defCount
|
self.__maxCount = maxCount #×ܵĿÉÔö¼ÓµÄ¸ñ×ÓÊý
|
self.__canAddCount = maxCount - defCount
|
self.__cfgName = cfgName
|
self.__LoadCfg()
|
|
##¶ÁÈ¡ÅäÖÃÎļþ
|
#@param None
|
#@return ÎÞ
|
#@remarks ¶ÁÈ¡ÅäÖÃÎļþ
|
def __LoadCfg(self):
|
cfgInfo = ReadChConfig.GetEvalChConfig(self.__cfgName)
|
#ûÓжÁÈ¡µ½ÅäÖÃÎļþ
|
if None == cfgInfo:
|
return
|
|
self.__cfgInfo = cfgInfo
|
cfgCount = len(self.__cfgInfo) #»ñÈ¡¹²ÅäÖÃÁ˼¸¸öÅäÖÃÐÅÏ¢
|
#Exp²ÎÊýÌØÊâ´¦Àí£¬ÒÔΪÊÇÓй«Ê½µÄ
|
totalDict = {"Exp":[]}
|
for i in range(0, self.__canAddCount):
|
count = index = i + 1
|
#Èç¹ûÖ»ÅäÖÃÁËǰ¼¸¸ö¸ñ×ÓµÄÊý¾Ý£¬ÔòºóÃæµÄ¸ñ×ÓÐÅÏ¢ÒÔ×îºóÒ»¸ö¸ñ×ÓµÄÐÅϢΪ׼
|
if index > cfgCount:
|
index = cfgCount
|
gridCfgInfo = self.__cfgInfo.get(index, {})
|
for key in gridCfgInfo.iterkeys():
|
if key == "Exp":
|
totalDict[key].append(gridCfgInfo.get(key, "0"))
|
else:
|
totalDict[key] = totalDict.get(key, 0) + gridCfgInfo.get(key, 0)
|
|
#¼ÆËãÌí¼ÓµÄ¸ñ×ÓÊý¶ÔÓ¦µÄ¸½¼ÓÊôÐÔµÄ×ÜÖµ
|
if not self.__totalAddAttrInfoWithCount.has_key(count):
|
self.__totalAddAttrInfoWithCount[count] = copy.deepcopy(totalDict)
|
|
##»ñÈ¡¿ÉÒÔÔö¼ÓµÄ±³°üÊý£¬¼´×î´ó±³°üÊý¼õÈ¥»ù´¡±³°üÊý
|
#@param None
|
#@return ¿ÉÒÔÔö¼ÓµÄ±³°üÊý
|
#@remarks »ñÈ¡¿ÉÒÔÔö¼ÓµÄ±³°üÊý£¬¼´×î´ó±³°üÊý¼õÈ¥»ù´¡±³°üÊý
|
def GetCanAddCount(self):
|
return self.__canAddCount
|
|
def GetAttrInfoByInex(self, buyIndex):
|
cfgCount = len(self.__cfgInfo)
|
if buyIndex > cfgCount:
|
buyIndex = cfgCount
|
return self.__cfgInfo.get(buyIndex, None)
|
|
##¸ù¾ÝÒѹºÂòµÄ¸ñ×ÓÊý£¬»ñÈ¡×ܵĸ½¼ÓÊôÐÔÐÅÏ¢
|
#@param buyCount ÒѹºÂòµÄ¸ñ×ÓÊý
|
#@return ¸½¼ÓµÄÊôÐÔÐÅÏ¢
|
#@remarks ¸ù¾Ýµ±Ç°¸ñ×ÓÊý£¬»ñÈ¡×ܵĸ½¼ÓÊôÐÔÐÅÏ¢
|
def GetTotalAddAttrInfoByCount(self, buyCount):
|
return self.__totalAddAttrInfoWithCount.get(buyCount, None)
|
|
##¸ù¾ÝÆðʼ¸ñ×Ó±àºÅ£¬ºÍ½áÊø¸ñ×Ó±àºÅ£¬»ñÈ¡×ܵĿɸ½¼ÓµÄÊôÐÔÐÅÏ¢£¬±àºÅ´Ó1¿ªÊ¼
|
#Èç¹ûµ±Ç°Íæ¼ÒÓÐ50¸ö¸ñ×Ó£¬Òª¿ªÆô51£¬52ÕâÁ½¸ö¸ñ×Ó£¬ÔòfromIndexΪ1£¬ toIndexΪ2£¬Èç¹ûÖ»ÓÐ51£¬ÔòfromIndexºÍtoIndex¾ùΪ1
|
#@param fromIndex Æðʼ¸ñ×Ó±àºÅ
|
#@param toIndex ½áÊø¸ñ×Ó±àºÅ
|
#@param attrList Òª»ñÈ¡µÄÊôÐÔÁÐ±í£¬Èç¹ûÐèÒªËùÓеÄÊôÐԵϰ£¬ÇëÌîд["all"]
|
#@return ¸½¼ÓµÄÊôÐÔÐÅÏ¢
|
#@remarks »ñÈ¡×ܵĿɸ½¼ÓµÄÊôÐÔÐÅÏ¢
|
def GetTotalCanAddAttrInfo(self, curPlayer, fromIndex, toIndex, attrList=["Exp"]):
|
#Ë÷ÒýÓÐÎó
|
if fromIndex <= 0 or toIndex <= 0:
|
GameWorld.ErrLog('GetTotalCanAddAttrInfo fromIndex <= 0 or toIndex <= 0')
|
return None
|
#Ë÷ÒýÓÐÎó
|
if toIndex > self.__canAddCount:
|
GameWorld.ErrLog('GetTotalCanAddAttrInfo toIndex > self.__canAddCount')
|
return None
|
|
#ÆðʼλÖò»ÄÜ´óÓÚ½áÊøÎ»ÖÃ
|
if fromIndex > toIndex:
|
GameWorld.ErrLog('GetTotalCanAddAttrInfo fromIndex > toIndex')
|
return None
|
|
#λÖÃÏàͬ,Ö±½ÓÈ¡ÅäÖÃÐÅÏ¢
|
if fromIndex == toIndex:
|
cfgCount = len(self.__cfgInfo) #»ñÈ¡¹²ÅäÖÃÁ˼¸¸öÅäÖÃÐÅÏ¢
|
if toIndex > cfgCount:
|
toIndex = cfgCount
|
# GameWorld.Log("index=%s cfgInfo=%s"%(toIndex, self.__cfgInfo))
|
# GameWorld.Log("get = %s"%self.__cfgInfo.get(toIndex, None))
|
findInfo = self.__cfgInfo.get(toIndex, {})
|
retInfo = {}
|
for attr in attrList:
|
if attr == "Exp":
|
ReExp = PlayerControl.GetPlayerReExp(curPlayer)
|
# GameWorld.Log("ReExp=%s"%ReExp)
|
addExp = eval(findInfo[attr])
|
# GameWorld.Log("addExp=%s type=%s"%(addExp, type(addExp)))
|
retInfo[attr] = addExp
|
else:
|
retInfo[attr] = findInfo[attr]
|
return retInfo
|
|
#λÖò»Í¬£¬½øÐмÆËã
|
toInfo = self.GetTotalAddAttrInfoByCount(toIndex)
|
fromInfo = self.GetTotalAddAttrInfoByCount(fromIndex - 1)
|
if toInfo == None or fromInfo == None:
|
GameWorld.ErrLog('GetTotalCanAddAttrInfo NoData %s'%([fromIndex, toIndex]))
|
return None
|
|
|
#Èç¹ûÓÐallÊôÐÔ£¬ËµÃ÷ÊÇҪȡȫ²¿µÄÊôÐÔÐÅÏ¢
|
if "all" in attrList:
|
attrList = toInfo.keys()
|
#È¡³öÐèÒªµÄÊôÐÔ
|
retInfo = {}
|
for attr in attrList:
|
if attr == "Exp":
|
# GameWorld.Log("toIndex=%s fromIndex=%s"%(toIndex, fromIndex))
|
ReExp = PlayerControl.GetPlayerReExp(curPlayer)
|
# GameWorld.Log("toInfo[attr]=%s"%toInfo[attr])
|
expFormulaList = toInfo[attr][fromIndex - 1:]
|
# GameWorld.Log("expFormulaList=%s"%expFormulaList)
|
addExp = 0
|
for formula in expFormulaList:
|
addExp += eval(formula)
|
# GameWorld.Log("addExp=%s"%addExp)
|
retInfo[attr] = addExp
|
else:
|
retInfo[attr] = toInfo[attr] - fromInfo[attr]
|
return retInfo
|
|
# def __str__(self):
|
# return """CfgName = %s\r\ncfgInfo=%s\r\ntotalAddAttrInfo=%s"""%(
|
# self.__cfgName, self.__cfgInfo, self.__totalAddAttrInfoWithCount)
|
|
##À©³ä±³°üÅäÖÃÐÅÏ¢¹ÜÀíÆ÷
|
class ExpandPackCfgMgr():
|
##¹¹Ô캯Êý
|
#@param None
|
#@return None
|
#@remarks ¹¹Ô캯Êý
|
def __init__(self):
|
self.__expandPackCfgDict = {} #¸÷ÖÖÀàÐͱ³°üÅäÖÃÎļþÐÅÏ¢¹ÜÀíÆ÷×Öµä
|
|
##¼ÓÔØÎïÆ·±³°üºÍ²Ö¿âÀ©³ä¸ñ×ÓʱÐèÒªÓõÄÅäÖÃÐÅÏ¢
|
#@param curPlayer Íæ¼Ò¶ÔÏó
|
#@return None
|
#@remarks ¼ÓÔØÎïÆ·±³°üºÍ²Ö¿âÀ©³ä¸ñ×ÓʱÐèÒªÓõÄÅäÖÃÐÅÏ¢
|
def Load(self, curPlayer):
|
#ĬÈÏÎïÆ·±³°ü¸ñ×ÓÊý
|
defItemPackCount = ItemCommon.GetPackInitCount(IPY_GameWorld.rptItem)
|
itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
self.__expandPackCfgDict[IPY_GameWorld.rptItem] = ExpandPackCfg("ExpandItemPack", defItemPackCount,
|
itemPack.GetMaxCount())
|
#ĬÈϲֿⱳ°ü¸ñ×ÓÊý
|
defItemPackCount = ItemCommon.GetPackInitCount(IPY_GameWorld.rptWarehouse)
|
itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptWarehouse)
|
self.__expandPackCfgDict[IPY_GameWorld.rptWarehouse] = ExpandPackCfg("ExpandWareHousePack", defItemPackCount,
|
itemPack.GetMaxCount())
|
|
##»ñÈ¡À©³äÖ¸¶¨ÀàÐ͵ı³°üµÄÅäÖÃÐÅÏ¢
|
#@param packType ±³°üÀàÐÍ
|
#@return À©³äÖ¸¶¨ÀàÐ͵ı³°üµÄÅäÖÃÐÅÏ¢
|
#@remarks »ñÈ¡À©³äÖ¸¶¨ÀàÐ͵ı³°üµÄÅäÖÃÐÅÏ¢
|
def GetExpandPackCfg(self, packType):
|
return self.__expandPackCfgDict.get(packType, None)
|
|
##¼ÆËãÎïÆ·±³°üºÍ²Ö¿â¸½¼ÓµÄ×ÜÊôÐÔ
|
#@param curPlayer Íæ¼Ò¶ÔÏó
|
#@param allAttrList ÊôÐÔÁбí
|
#@return ¼ÆËã±³°ü¸½¼ÓµÄ×ÜÊôÐÔ
|
#@remarks ¼ÆËã±³°ü¸½¼ÓµÄ×ÜÊôÐÔ
|
def CalcAttr(self, curPlayer, allAttrList):
|
#¼ÆËãÎïÆ·±³°üµÄÊôÐÔ
|
self.__CalcPackAttr(curPlayer, allAttrList, IPY_GameWorld.rptItem)
|
#¼ÆËã²Ö¿â±³°üµÄÊôÐÔ
|
self.__CalcPackAttr(curPlayer, allAttrList, IPY_GameWorld.rptWarehouse)
|
|
##¼ÆËã±³°ü¸½¼ÓµÄ×ÜÊôÐÔ
|
#@param curPlayer Íæ¼Ò¶ÔÏó
|
#@param allAttrList ÊôÐÔÁбí
|
#@param packType ±³°üÀàÐÍ
|
#@return ¼ÆËã±³°ü¸½¼ÓµÄ×ÜÊôÐÔ
|
#@remarks ¼ÆËã±³°ü¸½¼ÓµÄ×ÜÊôÐÔ
|
def __CalcPackAttr(self, curPlayer, allAttrList, packType):
|
packCfg = self.GetExpandPackCfg(packType)
|
if not packCfg:
|
return
|
#ÒѹºÂò»ò×Ô¶¯¿ªÆôµÄ¸ñ×ÓÊý
|
keyName = ChConfig.Def_Type_CanBuyPack_PlayerDict[packType][ChConfig.Def_PlayerPackDict_Index_Key]
|
curCount = curPlayer.NomalDictGetProperty(keyName)
|
if curCount == 0:
|
return
|
attrInfo = packCfg.GetTotalAddAttrInfoByCount(curCount)
|
expandPackAddAttr = ReadChConfig.GetEvalChConfig("ExpandPackAddAttr")
|
for attrName in expandPackAddAttr:
|
addValue = attrInfo[attrName]
|
#ÎïÀí¹¥»÷
|
PlayerControl.CalcAttrDict_Type(attrName, addValue, allAttrList)
|
|
|
# def __str__(self):
|
# return "ItemPackInfo = %s\r\nWareHousePackInfo = %s"%(self.GetExpandPackCfg(IPY_GameWorld.rptItem),
|
# self.GetExpandPackCfg(IPY_GameWorld.rptWarehouse))
|
|
g_expandPackCfgMgr = None
|
#»ñÈ¡±³°üÅäÖÃÐÅÏ¢¹ÜÀíÆ÷
|
#@param curPlayer Íæ¼ÒʵÀý£¬ÐèÒªÕâ¸öʵÀýÀ´»ñÈ¡¸÷ÖÖ±³°üÀàÐ͵Ä×î´ó±³°üÊý
|
#@return ±³°üÅäÖÃÐÅÏ¢¹ÜÀíÆ÷
|
#@remarks »ñÈ¡ËùÓб³°üÅäÖÃÐÅÏ¢¹ÜÀíÆ÷
|
def GetExpandPackCfgMgr(curPlayer):
|
global g_expandPackCfgMgr
|
if not g_expandPackCfgMgr:
|
g_expandPackCfgMgr = ExpandPackCfgMgr()
|
g_expandPackCfgMgr.Load(curPlayer)
|
return g_expandPackCfgMgr
|
|
#»ñÈ¡»ñȡָ¶¨ÀàÐ͵ı³°üµÄÅäÖÃÐÅÏ¢
|
#@param curPlayer Íæ¼ÒʵÀý£¬ÐèÒªÕâ¸öʵÀýÀ´»ñÈ¡¸÷ÖÖ±³°üÀàÐ͵Ä×î´ó±³°üÊý
|
#@param packType ±³°üÀàÐÍ
|
#@return Ö¸¶¨ÀàÐ͵ı³°üµÄÅäÖÃÐÅÏ¢
|
#@remarks »ñÈ¡»ñȡָ¶¨ÀàÐ͵ı³°üµÄÅäÖÃÐÅÏ¢
|
def GetExpandPackCfg(curPlayer, packType):
|
return GetExpandPackCfgMgr(curPlayer).GetExpandPackCfg(packType)
|