From 4dcb18d0e7848effd25e0d5970e9c84808da957c Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期一, 10 六月 2019 14:12:34 +0800
Subject: [PATCH] 7155 【后端】【2.0】新增仙盟创建规则

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py |   85 +++++++++++++++++++++++++++++++++++++-----
 1 files changed, 74 insertions(+), 11 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 26948e1..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,9 +43,10 @@
     return True
 
 
-def OnLogin(curPlayer):        
+def OnLogin(curPlayer):
     SyncRealmFBState(curPlayer)
-    UpdateRealmExp(curPlayer)
+    UpdateRealmExp(curPlayer, False)
+    NotifyRealmExpInfo(curPlayer)
     return
 
 
@@ -125,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()
@@ -142,6 +163,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()
@@ -152,21 +188,25 @@
         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)
     #更新排行榜
@@ -216,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():
@@ -228,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 / 5 * 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)
@@ -252,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