#!/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 PlayerMagicWeapon 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 curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official): GameWorld.DebugLog("¾ôλ¾³½ç¹¦ÄÜ먦Æô, ÎÞ·¨¿ªÆô¶É½Ù!curLV=%s" % curPlayer.GetLV()) return if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBIsOpen): GameWorld.DebugLog("¶É½ÙÒÑ¿ªÆô£¬ÎÞ·¨ÔٴοªÆô£¡") return curRealmLV = curPlayer.GetOfficialRank() realmIpyData = GetRealmIpyData(curRealmLV) if not realmIpyData: GameWorld.ErrLog("ûÓиþ³½çµÈ¼¶Êý¾Ý! Lv=%s" % curRealmLV) return needRealmPoint = realmIpyData.GetNeedPoint() if not needRealmPoint: GameWorld.DebugLog("¾³½çÒÑÊÇ×î´óµÈ¼¶£¬²»ÄÜÉý¼¶! Lv=%s" % curRealmLV, curPlayer.GetPlayerID()) return if not PlayerControl.HaveMoney(curPlayer, ShareDefine.TYPE_Price_RealmPoint, needRealmPoint, False): GameWorld.DebugLog("¾³½çÐÞÁ¶µã²»×㣬ÎÞ·¨¿ªÆô¶É½Ù£¡needRealmPoint=%s" % (needRealmPoint), curPlayer.GetPlayerID()) return needActiveTreasureDict = realmIpyData.GetNeedActiveTreasure() for mwType, needActiveCnt in needActiveTreasureDict.items(): activeCnt = PlayerMagicWeapon.GetMWActiveCntByType(curPlayer, mwType) if activeCnt < needActiveCnt: GameWorld.DebugLog("¿ªÆô¶É½Ù ÐèÒª·¨±¦µÄ¼¤»îÌõ¼þ²»Âú×ã! needActiveTreasureDict=%s,·¨±¦ÀàÐÍ=%s, ÒѼ¤»îÊýÁ¿=%s" % (needActiveTreasureDict, mwType, activeCnt)) 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") PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_RealmPoint, needRealmPoint) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBIsOpen, 1) SyncRealmFBState(curPlayer) GameWorld.Log("¿ªÆô¶É½Ù¸±±¾³É¹¦: curRealmLV=%s" % curRealmLV, curPlayer.GetPlayerID()) return def SyncRealmFBState(curPlayer): #֪ͨ¿Í»§¶Ë¶É½Ù¸±±¾ÊÇ·ñ¿ªÆô return if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official): return sendPack = ChPyNetSendPack.tagMCSyncRealmFBIsOpen() sendPack.IsOpen = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBIsOpen) sendPack.SitAllTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmSitAllTime) sendPack.SitRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmSitRemainTime) sendPack.SitStartTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmSitStartTime) #sendPack.LastEnterTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBLastEnterTime) 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) canLvUp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBIsOpen) == 2 if not canLvUp: GameWorld.DebugLog(' ²»ÄÜÉý¼¶¾³½ç') return DoRealmLVUpLogic(curPlayer) return def DoRealmLVUpLogic(curPlayer): 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) 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) #Á÷Ïò realmPoint = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_RealmPoint) realmIpyData = GetRealmIpyData(curRealmLV) needRealmPoint = realmIpyData.GetNeedPoint() if realmIpyData else 0 DataRecordPack.DR_RealmLVUp(curPlayer, nextRealmLv, realmPoint, needRealmPoint) return True def DologicDujieFBPass(curPlayer, realmLV, star): #¶É½Ùͨ¹ýºó´¦Àí realmIpyData = GetRealmIpyData(realmLV) if not realmIpyData: return needRealmPoint = realmIpyData.GetNeedPoint() PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_RealmPoint, needRealmPoint) DoRealmLVUpLogic(curPlayer) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBIsOpen, 0) # sitTimeDict = realmIpyData.GetSitTime() # sitSecond = sitTimeDict.get(str(star), 0) # if sitSecond == 0: # #ûÓдò×øÊ±¼ä£¬Ö±½ÓÉý¾³½ç # PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBIsOpen, 2) # else: # PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmSitAllTime, sitSecond) # PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmSitRemainTime, sitSecond) # 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