#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package Player.PlayerPrestigeSys  
 | 
#  
 | 
# @todo:¾ôλϵͳ/ÉÙÄê¾³½ç  
 | 
# @author hxp  
 | 
# @date 2017-7-21  
 | 
# @version 1.0  
 | 
#  
 | 
# ÏêϸÃèÊö: ¾ôλϵͳ/ÉÙÄê¾³½ç  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#"""Version = 2017-10-10 14:30"""  
 | 
#-------------------------------------------------------------------------------  
 | 
  
 | 
import ItemCommon  
 | 
import GameFuncComm  
 | 
import PlayerControl  
 | 
import ChPyNetSendPack  
 | 
import NetPackCommon  
 | 
import IPY_GameWorld  
 | 
import IpyGameDataPY  
 | 
import ShareDefine  
 | 
import GameWorld  
 | 
import ChConfig  
 | 
import PlayerSuccess  
 | 
import OpenServerCampaign  
 | 
import PlayerBillboard  
 | 
import EventShell  
 | 
import DataRecordPack  
 | 
  
 | 
#------------------------------------------------------------------------------  
 | 
(  
 | 
StopSitType1, #ÀëÏßÖÐ¶Ï  
 | 
StopSitType2, #Ö÷¶¯ÖÐ¶Ï  
 | 
StopSitType3, #±»²É¼¯´ò¶Ï  
 | 
)=range(1,4)  
 | 
  
 | 
  
 | 
def DoOfficialOpen(curPlayer):  
 | 
    #¹¦ÄÜ¿ªÆô  
 | 
#    curRealmLV = curPlayer.GetOfficialRank()  
 | 
#    if not curRealmLV:  
 | 
#        DoRealmLVUpLogic(curPlayer)  
 | 
    return True  
 | 
  
 | 
def OnLogin(curPlayer):          
 | 
    SyncRealmFBState(curPlayer)  
 | 
    return  
 | 
  
 | 
def GetRealmIpyData(realmLV): return IpyGameDataPY.GetIpyGameData("Realm", realmLV)  
 | 
  
 | 
#// A5 24 ¿ªÆô¶É½Ù #tagCMOpenRealmFB  
 | 
#  
 | 
#struct    tagCMOpenRealmFB  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#};  
 | 
def OpenRealmFB(index, clientData, tick):  
 | 
    return  
 | 
      
 | 
  
 | 
def SyncRealmFBState(curPlayer):  
 | 
    #֪ͨ¿Í»§¶Ë¶É½Ù¸±±¾ÊÇ·ñ¿ªÆô  
 | 
    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official):  
 | 
        return  
 | 
    sendPack = ChPyNetSendPack.tagMCSyncRealmInfo()  
 | 
    sendPack.IsPass = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBIsOpen)  
 | 
    NetPackCommon.SendFakePack(curPlayer, sendPack)  
 | 
    return  
 | 
  
 | 
## ¼ÆËã¾ôλÊôÐÔ  
 | 
#  @param curPlayer Íæ¼Ò  
 | 
#  @param allAttrList ÊôÐÔÁÐ±í  
 | 
#  @return None  
 | 
def CalcOfficialRankAttr(curPlayer):  
 | 
    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official):  
 | 
        return  
 | 
  
 | 
    curRealmLV = curPlayer.GetOfficialRank()  
 | 
    realmIpyData = GetRealmIpyData(curRealmLV)  
 | 
    if not realmIpyData:  
 | 
        return  
 | 
     
 | 
    addAttrIDList, addAttrValueList = realmIpyData.GetAddAttrType(), realmIpyData.GetAddAttrNum()  
 | 
      
 | 
    allAttrList = [{} for i in range(4)]  
 | 
    for i, attrID in enumerate(addAttrIDList):  
 | 
        PlayerControl.CalcAttrDict_Type(attrID, addAttrValueList[i], allAttrList)  
 | 
          
 | 
    # ±£´æ¼ÆËãÖµ  
 | 
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Prestige, allAttrList)  
 | 
    return  
 | 
  
 | 
  
 | 
## ÖØË¢ËùÓÐÊôÐÔ  
 | 
#  @param curPlayer  
 | 
#  @param isForceRefresh:Ç¿ÖÆË¢ÐÂÅÅÐаñ  
 | 
#  @return Ö¸¶¨Êý¾Ý  
 | 
def RefreshOfficialAttr(curPlayer):  
 | 
    CalcOfficialRankAttr(curPlayer)  
 | 
    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()  
 | 
    return  
 | 
  
 | 
#// A5 23 ÌáÉý¾³½çµÈ¼¶ # tagCMRealmLVUp  
 | 
#  
 | 
#struct    tagCMRealmLVUp  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#};  
 | 
def DoRealmLVUp(index, clientData, tick):  
 | 
    #Éý¼¶¾³½ç  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    curRealmLV = curPlayer.GetOfficialRank()  
 | 
    realmIpyData = GetRealmIpyData(curRealmLV)  
 | 
    if not realmIpyData:  
 | 
        GameWorld.ErrLog("ûÓиþ³½çµÈ¼¶Êý¾Ý! Lv=%s" % curRealmLV)  
 | 
        return  
 | 
    if realmIpyData.GetBossID():  
 | 
        canLvUp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBIsOpen) == 1  
 | 
        if not canLvUp:  
 | 
            GameWorld.DebugLog('    ¸±±¾Î´¹ý¹Ø£¬²»ÄÜÉý¼¶¾³½ç')  
 | 
            return  
 | 
      
 | 
    needItemID = realmIpyData.GetNeedItemID()  
 | 
    needItemCount = realmIpyData.GetNeedItemCnt()  
 | 
    # Ö§³Ö²»ÏûºÄÎïÆ·Éý¼¶  
 | 
    if needItemID > 0 and needItemCount > 0:  
 | 
        curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)  
 | 
        hasEnough, itemIndexList = ItemCommon.GetItem_FromPack_ByID(needItemID, curPack, needItemCount)  
 | 
        if not hasEnough:  
 | 
            GameWorld.DebugLog("¶É½Ù¿ªÆô, ²ÄÁϲ»×ã! Lv=%s, needItemID=%s,needItemCount=%s"   
 | 
                               % (curRealmLV, needItemID, needItemCount))  
 | 
            return  
 | 
        #¿Û³ýÎïÆ·  
 | 
        ItemCommon.ReduceItem(curPlayer, curPack, itemIndexList, needItemCount, True, "Realm")  
 | 
      
 | 
      
 | 
    DoRealmLVUpLogic(curPlayer)  
 | 
    return  
 | 
  
 | 
def DoRealmLVUpLogic(curPlayer, needSys=True):  
 | 
    curRealmLV = curPlayer.GetOfficialRank()  
 | 
    nextRealmLv = curRealmLV + 1  
 | 
    GameWorld.DebugLog('    Éý¼¶¾³½çnextRealmLv=%s'%nextRealmLv)  
 | 
    nextRealmIpyData = GetRealmIpyData(nextRealmLv)  
 | 
    if not nextRealmIpyData:  
 | 
        return  
 | 
      
 | 
    curPlayer.SetOfficialRank(nextRealmLv)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBIsOpen, 0)  
 | 
    if needSys:  
 | 
        PlayerControl.WorldNotify(0, 'RealmUpSuccess', [curPlayer.GetName(), nextRealmLv])  
 | 
    RefreshOfficialAttr(curPlayer)  
 | 
    GameFuncComm.DoFuncOpenLogic(curPlayer)  
 | 
    SyncRealmFBState(curPlayer)  
 | 
    #¾³½çÌáÉý³É¾Í  
 | 
    PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_RealmlvUp, nextRealmLv)  
 | 
    #¸üÐÂÅÅÐаñ  
 | 
    PlayerBillboard.UpdateRealmBillboard(curPlayer)  
 | 
    # ¼Ç¼¿ª·þ»î¶¯  
 | 
    OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_RealmLV, nextRealmLv)  
 | 
    EventShell.EventRespons_RealmUp(curPlayer, nextRealmLv)  
 | 
    #Á÷Ïò  
 | 
    DataRecordPack.DR_RealmLVUp(curPlayer, nextRealmLv)  
 | 
    return True  
 | 
  
 | 
def DologicDujieFBPass(curPlayer, realmLV, star):  
 | 
    #¶É½Ùͨ¹ýºó´¦Àí  
 | 
    realmIpyData = GetRealmIpyData(realmLV)  
 | 
    if not realmIpyData:  
 | 
        return  
 | 
    #DoRealmLVUpLogic(curPlayer)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBIsOpen, 1)  
 | 
    SyncRealmFBState(curPlayer)  
 | 
  
 | 
      
 | 
    return  
 | 
  
 | 
  
 | 
  
 | 
#// A5 0C Ê¹ÓõÀ¾ß¼õÉٶɽٴò×øÊ±¼ä #tagCMReduceSitTime  
 | 
#  
 | 
#struct tagCMReduceSitTime  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#    WORD        ItemCnt;       // µÀ¾ßÊýÁ¿  
 | 
#};  
 | 
def OnReduceSitTime(index, clientData, tick):  
 | 
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
#    itemCnt = clientData.ItemCnt  
 | 
#    reduceSitTimeItemID = IpyGameDataPY.GetFuncCfg('ReduceSitTimeItemID')  
 | 
#      
 | 
#    remainTime = __GetRemainSitTime(curPlayer)  
 | 
#    if remainTime <= 0:  
 | 
#        GameWorld.DebugLog('ʹÓõÀ¾ß¼õÉٶɽٴò×øÊ±¼ä remainTime=%s' % remainTime)  
 | 
#        return  
 | 
#    curItem = GameWorld.GetGameData().GetItemByTypeID(reduceSitTimeItemID)  
 | 
#    curEff = curItem.GetEffectByIndex(0)  
 | 
#    singleReduceTime = curEff.GetEffectValue(0)  
 | 
#    useCnt = min(itemCnt, remainTime/singleReduceTime)  
 | 
#    if not useCnt:  
 | 
#        GameWorld.DebugLog('ʹÓõÀ¾ß¼õÉٶɽٴò×øÊ±¼ä useCnt=%s' % useCnt)  
 | 
#        return  
 | 
#      
 | 
#    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)  
 | 
#    hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(reduceSitTimeItemID, itemPack, useCnt)  
 | 
#    if not hasEnough:  
 | 
#        GameWorld.DebugLog('ʹÓõÀ¾ß¼õÉٶɽٴò×øÊ±¼ä µÀ¾ß²»×ã%s' % useCnt)  
 | 
#        return  
 | 
#      
 | 
#    ItemCommon.ReduceItem(curPlayer, itemPack, itemList, useCnt, False)  
 | 
#      
 | 
#    reduceTime = useCnt * singleReduceTime  
 | 
#    sitRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmSitRemainTime)  
 | 
#    newRemainTime = max(0, sitRemainTime-reduceTime)  
 | 
#    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmSitRemainTime, newRemainTime)  
 | 
#    GameWorld.DebugLog('ʹÓõÀ¾ß¼õÉٶɽٴò×øÊ±¼ä Ê¹ÓõÀ¾ß%s,¼õÉÙ´ò×øÊ±¼ä%sÃë' % (useCnt, reduceTime))  
 | 
#    SyncRealmFBState(curPlayer)  
 | 
    return  
 |