#!/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 #------------------------------------------------------------------------------ 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: addBuffID = nextRealmIpyData.GetBuffID() if addBuffID: PlayerControl.WorldNotify(0, 'BigRealmUpSuccess', [curPlayer.GetName(), nextRealmLv, IpyGameDataPY.GetFuncCfg('RadioExpRealm')]) msgStr = str(addBuffID) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'RealmUpAddBuff', msgStr, len(msgStr)) else: 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