From 8068ba5ca1ea2aef5908e2e42604be27d6ffcf3c Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期四, 06 六月 2019 15:53:19 +0800
Subject: [PATCH] 7152 【后端】每次炼制灵根丹数量随机1-2
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py | 185 ++++++++++++++++++++++++++++++++++++----------
1 files changed, 144 insertions(+), 41 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 fb88005..5ea05d2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
@@ -31,6 +31,7 @@
import EventShell
import DataRecordPack
+import time
#------------------------------------------------------------------------------
@@ -41,11 +42,16 @@
# DoRealmLVUpLogic(curPlayer)
return True
-def OnLogin(curPlayer):
+
+def OnLogin(curPlayer):
SyncRealmFBState(curPlayer)
+ UpdateRealmExp(curPlayer, False)
+ NotifyRealmExpInfo(curPlayer)
return
+
def GetRealmIpyData(realmLV): return IpyGameDataPY.GetIpyGameData("Realm", realmLV)
+
#// A5 24 开启渡劫 #tagCMOpenRealmFB
#
@@ -65,6 +71,7 @@
sendPack.IsPass = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBIsOpen)
NetPackCommon.SendFakePack(curPlayer, sendPack)
return
+
## 计算爵位属性
# @param curPlayer 玩家
@@ -99,6 +106,7 @@
PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
return
+
#// A5 23 提升境界等级 # tagCMRealmLVUp
#
#struct tagCMRealmLVUp
@@ -118,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()
@@ -132,32 +160,53 @@
#扣除物品
ItemCommon.ReduceItem(curPlayer, curPack, itemIndexList, needItemCount, True, "Realm")
-
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()
nextRealmLv = curRealmLV + 1
- GameWorld.DebugLog(' 升级境界nextRealmLv=%s'%nextRealmLv)
+ GameWorld.DebugLog(' 升级境界nextRealmLv=%s' % nextRealmLv)
nextRealmIpyData = GetRealmIpyData(nextRealmLv)
if not nextRealmIpyData:
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, False, True)
+ NotifyRealmExpInfo(curPlayer)
#境界提升成就
PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_RealmlvUp, nextRealmLv)
#更新排行榜
@@ -169,6 +218,7 @@
DataRecordPack.DR_RealmLVUp(curPlayer, nextRealmLv)
return True
+
def DologicDujieFBPass(curPlayer, realmLV, star):
#渡劫通过后处理
realmIpyData = GetRealmIpyData(realmLV)
@@ -177,48 +227,101 @@
#DoRealmLVUpLogic(curPlayer)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBIsOpen, 1)
SyncRealmFBState(curPlayer)
-
return
-
-#// A5 0C 使用道具减少渡劫打坐时间 #tagCMReduceSitTime
+#// A5 21 境界修为池提取 #tagCMTakeOutRealmExp
#
-#struct tagCMReduceSitTime
+#struct tagCMTakeOutRealmExp
#{
# 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)
+def OnTakeOutRealmExp(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetID()
+ curTotalRealmExp = UpdateRealmExp(curPlayer, False)
+ if curTotalRealmExp <= 0:
+ GameWorld.DebugLog('境界修为池提取 没有经验可提取', playerID)
+ return
+ playerControl = PlayerControl.PlayerControl(curPlayer)
+ playerControl.AddExp(curTotalRealmExp)
+ PlayerControl.NotifyCode(curPlayer, 'TakeOutRealmExp', [curTotalRealmExp])
+ #
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBeginTime, int(time.time()))
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExp, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpPoint, 0)
+
+ NotifyRealmExpInfo(curPlayer)
return
+
+
+def UpdateRealmExp(curPlayer, isNotify=True, isRealmLVUP=False):
+ ##更新境界修为池
+ curRealmLV = curPlayer.GetOfficialRank()
+ ipyData = GetRealmIpyData(curRealmLV)
+ if not ipyData:
+ return 0
+ if not ipyData.GetExpRate():
+ return 0
+ curTime = int(time.time())
+ beginTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBeginTime)
+ 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
+ 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)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpPoint, updTotalExp / ChConfig.Def_PerPointValue)
+ #通知
+ if isNotify:
+ 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)
+ return
+
--
Gitblit v1.8.0