From 2eb39c9fe42c1ee32500f81c4bf7d735c6116d9d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 30 七月 2019 00:26:20 +0800
Subject: [PATCH] 8180 【后端】【主干】优化打boss掉落套装体验
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py | 89 ++++++++++++++++++++++++++++++++++++++------
1 files changed, 77 insertions(+), 12 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 edd00c8..6fcc029 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
@@ -26,7 +26,7 @@
import GameWorld
import ChConfig
import PlayerSuccess
-import OpenServerCampaign
+import ChEquip
import PlayerBillboard
import EventShell
import DataRecordPack
@@ -43,7 +43,7 @@
return True
-def OnLogin(curPlayer):
+def OnLogin(curPlayer):
SyncRealmFBState(curPlayer)
UpdateRealmExp(curPlayer, False)
NotifyRealmExpInfo(curPlayer)
@@ -126,6 +126,29 @@
if not canLvUp:
GameWorld.DebugLog(' 副本未过关,不能升级境界')
return
+ #等级判断
+ if curPlayer.GetLV() < realmIpyData.GetNeedLV():
+ return
+ #装备判断
+ needEquip = realmIpyData.GetNeedEquip()
+ if needEquip and len(needEquip) == 4:
+ classLV, star, isSuite, color = 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
+ curPartStar = ChEquip.GetEquipPartStar(curPlayer, gridIndex)
+ if curPartStar < star:
+ return
+ if isSuite and not curEquip.GetSuiteID():
+ return
+ if curEquip.GetItemColor() < color:
+ return
needItemID = realmIpyData.GetNeedItemID()
needItemCount = realmIpyData.GetNeedItemCnt()
@@ -143,6 +166,21 @@
DoRealmLVUpLogic(curPlayer)
return
+# 提升1级境界加点
+def __DoRealmLVUpAddPoint(curPlayer):
+ if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_AddPoint):
+ # 未开启前不可加点,因为DoAddPointOpen会一次性补齐,避免意外情况多加了点数
+ return
+
+ curFreePoint = curPlayer.GetFreePoint()
+ addPoint = IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 3)
+ if addPoint != 0:
+ setFreePoint = curFreePoint + addPoint
+ DataRecordPack.DR_Freepoint(curPlayer, "RealmLVUp", addPoint)
+ curPlayer.SetFreePoint(setFreePoint)
+
+ return
+
def DoRealmLVUpLogic(curPlayer, needSys=True):
curRealmLV = curPlayer.GetOfficialRank()
@@ -153,27 +191,31 @@
return
curPlayer.SetOfficialRank(nextRealmLv)
+ # 提升1级境界加点
+ __DoRealmLVUpAddPoint(curPlayer)
+
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')])
+ 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)
+ UpdateRealmExp(curPlayer, False, True)
+ NotifyRealmExpInfo(curPlayer)
#境界提升成就
PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_RealmlvUp, nextRealmLv)
#更新排行榜
PlayerBillboard.UpdateRealmBillboard(curPlayer)
# 记录开服活动
- OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_RealmLV, nextRealmLv)
+ #OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_RealmLV, nextRealmLv)
EventShell.EventRespons_RealmUp(curPlayer, nextRealmLv)
#流向
DataRecordPack.DR_RealmLVUp(curPlayer, nextRealmLv)
@@ -217,9 +259,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():
@@ -229,21 +272,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)
@@ -253,11 +307,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