From 64a00ad79dbdf44eebca167038a0a278a75a6667 Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期一, 27 五月 2019 19:18:06 +0800 Subject: [PATCH] 6844 【2.0】【后端】缥缈仙域优化 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py | 63 ++++++++++++++++++++++++++----- 1 files changed, 53 insertions(+), 10 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py index 6774f91..5ea05d2 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py @@ -43,7 +43,7 @@ return True -def OnLogin(curPlayer): +def OnLogin(curPlayer): SyncRealmFBState(curPlayer) UpdateRealmExp(curPlayer, False) NotifyRealmExpInfo(curPlayer) @@ -126,6 +126,26 @@ if not canLvUp: GameWorld.DebugLog(' 副本未过关,不能升级境界') return + #等级判断 + if curPlayer.GetLV() < realmIpyData.GetNeedLV(): + return + #装备判断 + needEquip = realmIpyData.GetNeedEquip() + if needEquip and len(needEquip) == 3: + classLV, color, isSuite = needEquip + equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) + for place in ChConfig.EquipPlace_Base: + ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, place) + if not ipyData: + return + gridIndex = ipyData.GetGridIndex() + curEquip = equipPack.GetAt(gridIndex) + if not ItemCommon.CheckItemCanUse(curEquip): + return + if curEquip.GetItemColor() < color: + return + if isSuite and not curEquip.GetSuiteID(): + return needItemID = realmIpyData.GetNeedItemID() needItemCount = realmIpyData.GetNeedItemCnt() @@ -175,17 +195,17 @@ if needSys: addBuffID = nextRealmIpyData.GetBuffID() if addBuffID: - PlayerControl.WorldNotify(0, 'BigRealmUpSuccess', [curPlayer.GetName(), nextRealmLv, IpyGameDataPY.GetFuncCfg('RadioExpRealm')]) + PlayerControl.WorldNotify(0, 'BigRealmUpSuccess', [curPlayer.GetName(), curPlayer.GetID(), 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]) + PlayerControl.WorldNotify(0, 'RealmUpSuccess', [curPlayer.GetName(), curPlayer.GetID(), nextRealmLv]) RefreshOfficialAttr(curPlayer) GameFuncComm.DoFuncOpenLogic(curPlayer) SyncRealmFBState(curPlayer) #更新修为速率 - UpdateRealmExp(curPlayer, False) + UpdateRealmExp(curPlayer, False, True) NotifyRealmExpInfo(curPlayer) #境界提升成就 PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_RealmlvUp, nextRealmLv) @@ -236,9 +256,10 @@ return -def UpdateRealmExp(curPlayer, isNotify=True): +def UpdateRealmExp(curPlayer, isNotify=True, isRealmLVUP=False): ##更新境界修为池 - ipyData = GetRealmIpyData(curPlayer.GetOfficialRank()) + curRealmLV = curPlayer.GetOfficialRank() + ipyData = GetRealmIpyData(curRealmLV) if not ipyData: return 0 if not ipyData.GetExpRate(): @@ -248,21 +269,32 @@ if not beginTime: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBeginTime, curTime) return 0 + if isRealmLVUP: + ipyData = GetRealmIpyData(curRealmLV-1) + curRealmExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExp) curRealmExpPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpPoint) curTotalExp = curRealmExpPoint * ChConfig.Def_PerPointValue + curRealmExp if curTotalExp >= ipyData.GetExpLimit(): return curTotalExp + passSeconds = curTime - beginTime if passSeconds <= 0: return curTotalExp - ipyData = GetRealmIpyData(curPlayer.GetOfficialRank()) - if not ipyData: - return curTotalExp - addExp = passSeconds / IpyGameDataPY.GetFuncCfg('RealmExpTime') * ipyData.GetExpRate() + perRealmExpTime = IpyGameDataPY.GetFuncCfg('RealmExpTime') + curExpRate = ipyData.GetExpRate() + #buff增加的额外经验 + buffRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffRemainTime) + buffAddRate = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffAddRate) + + buffTime = min(buffRemainTime, passSeconds) + + addExp = buffTime /perRealmExpTime*(curExpRate*(ShareDefine.Def_MaxRateValue + buffAddRate)/ShareDefine.Def_MaxRateValue) + (passSeconds-buffTime)/perRealmExpTime*curExpRate + #addExp = passSeconds / perRealmExpTime * curExpRate if addExp <= 0: return curTotalExp PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBeginTime, curTime) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBuffRemainTime, buffRemainTime - buffTime) updTotalExp = min(curTotalExp + addExp, ipyData.GetExpLimit()) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExp, updTotalExp % ChConfig.Def_PerPointValue) @@ -272,11 +304,22 @@ NotifyRealmExpInfo(curPlayer) return updTotalExp +def AddRealmExpBuffTime(curPlayer, addTime, addRate): + ##增加会灵丹BUFF时间 + UpdateRealmExp(curPlayer, False) + + remainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffRemainTime) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBuffRemainTime, remainTime + addTime) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBuffAddRate, addRate) + NotifyRealmExpInfo(curPlayer) + return def NotifyRealmExpInfo(curPlayer): ##通知修为池信息 sendPack = ChPyNetSendPack.tagMCRealmExpInfo() sendPack.BeginTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBeginTime) + sendPack.BuffTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffRemainTime) + sendPack.BuffAddRate = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffAddRate) sendPack.CurExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExp) sendPack.CurExpPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpPoint) NetPackCommon.SendFakePack(curPlayer, sendPack) -- Gitblit v1.8.0