From 09fef77b16601ee5b0f53f34ccb23804b8448c8c Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 28 五月 2025 17:59:13 +0800 Subject: [PATCH] 102 【主界面】官职晋升-服务端 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py | 379 +---------------------------------------------- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/RealmLVUP.py | 8 /dev/null | 34 ---- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerChangeJob.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py | 2 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 14 - ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 12 - ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 3 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 2 PySysDB/PySysDBPY.h | 5 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py | 4 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 3 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 8 - 13 files changed, 22 insertions(+), 454 deletions(-) diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h index f607472..23cd4f0 100644 --- a/PySysDB/PySysDBPY.h +++ b/PySysDB/PySysDBPY.h @@ -175,11 +175,6 @@ DWORD LVMax; //等级上限 list AddAttrType; //境界加成属性类型 list AddAttrNum; //境界加成属性值 - DWORD BuffID; //给全服在线玩家增加buff - DWORD ExpRate; //修为池经验速率 - DWORD ExpLimit; //修为池经验上限 - dict LearnSkillIDInfo; //学习技能ID信息 {"职业":[技能ID, ...], ...} - BYTE AddFreePoint; //增加自由属性点 }; //境界进阶任务表 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini index e70362f..f1590e3 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini @@ -744,19 +744,11 @@ Writer = alee Releaser = alee RegType = 0 -RegisterPackCount = 3 +RegisterPackCount = 1 PacketCMD_1 = 0xA5 -PacketSubCMD_1 = 0x24 -PacketCallFunc_1 = OpenRealmFB - -PacketCMD_2 = 0xA5 -PacketSubCMD_2 = 0x21 -PacketCallFunc_2 = OnTakeOutRealmExp - -PacketCMD_3 = 0xA5 -PacketSubCMD_3 = 0x23 -PacketCallFunc_3 = DoRealmLVUp +PacketSubCMD_1 = 0x23 +PacketCallFunc_1 = DoRealmLVUp ;炼体 [PlayerLianTi] diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py index 4fe0290..18818c9 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py @@ -4409,16 +4409,8 @@ Def_PDict_FeastRedPacketCanGrabCnt = "FeastRedPacketCanGrabCnt" # 节日红包可抢次数 #境界 -Def_PDict_RealmVersionState = "RealmVersionState" #境界版本调整记录状态值 Def_PDict_RealmTaskAwardState = "RealmTaskAwardState" #境界渡劫条件领奖状态,按二进制位存储是否已领取 Def_PDict_RealmTaskValue = "RealmTaskValue_%s" #境界渡劫任务需要记录值,参数(任务ID) -Def_PDict_RealmXXZLAward = "RealmXXZLAward" #境界修仙之路领奖状态;按二进制位存储每个任务ID是否已领取 -Def_PDict_RealmFBAttrAdd = "RealmFBAttrAdd_%s" #渡劫副本属性加成 参数属性ID -Def_PDict_RealmExp = "RealmExp" #境界修为池总经验 -Def_PDict_RealmExpPoint = "RealmExpPoint" #境界修为池总经验点 -Def_PDict_RealmExpBeginTime = "RealmExpBeginTime" #境界修为池经验开始计时时间 -Def_PDict_RealmExpBuffRemainTime = "RealmExpBuffRemainTime" #境界修为池经验buff剩余时间 -Def_PDict_RealmExpBuffAddRate = "RealmExpBuffAddRate" #境界修为池经验增加百分比(万分率) #法宝 Def_PDict_MagicWeaponIsWear = "MagicWeaponIsWear_%s" #法宝佩戴状态 参数法宝ID diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py index 5297eff..8df02d0 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py @@ -5234,6 +5234,6 @@ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) countType = clientData.Type RunQuestEvent(curPlayer, "on_client_by_id", clientData.CountID, Def_RunQuestType_Normal) - if countType == 1: - PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_KillNPC, 1) + #if countType == 1: + # PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_KillNPC, 1) return diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py index a26c5f8..e2a7ce5 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py @@ -7113,7 +7113,7 @@ # @return None <Realmxxzlaward taskid="修仙之路任务ID"/> def ConditionType_Realmxxzlaward(curPlayer, curMission, curActionNode): taskID = GameWorld.ToIntDef(curActionNode.GetAttribute("taskid"), 0) - awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmXXZLAward) + awardState = curPlayer.NomalDictGetProperty("RealmXXZLAward") if awardState&pow(2, taskID): return True return False diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GetRealmExp.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GetRealmExp.py deleted file mode 100644 index 3741292..0000000 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GetRealmExp.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/python -# -*- coding: GBK -*- -#------------------------------------------------------------------------------- -# -#------------------------------------------------------------------------------- -# -##@package GM.Commands.GetRealmExp -# -# @todo:获取当前境界修为经验 -# @author xdh -# @date 2019-03-20 -# @version 1.0 -# -# 详细描述: 获取当前境界修为经验 -# -#--------------------------------------------------------------------- -"""Version = 2019-03-20 11:30""" - -import PlayerPrestigeSys -import GameWorld -import ChConfig -#--------------------------------------------------------------------- -#逻辑实现 -## GM命令执行入口 -# @param curPlayer 当前玩家 -# @param list 参数列表 [npcID] -# @return None -# @remarks 函数详细说明. -def OnExec(curPlayer, list): - curTotalRealmExp = PlayerPrestigeSys.UpdateRealmExp(curPlayer, isNotify=True) - buffRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffRemainTime) - GameWorld.DebugAnswer(curPlayer, "curTotalRealmExp=%s,buffRemainTime=%s" % (curTotalRealmExp, buffRemainTime)) - return - diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/RealmLVUP.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/RealmLVUP.py index 362d190..b6677bc 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/RealmLVUP.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/RealmLVUP.py @@ -30,7 +30,7 @@ def OnExec(curPlayer, cmdList): if not cmdList: GameWorld.DebugAnswer(curPlayer, "------------ %s" % GameWorld.GetCurrentDataTimeStr()) - GameWorld.DebugAnswer(curPlayer, "重置境界阶级: RealmLVUP 0 [重置改版标记]") + GameWorld.DebugAnswer(curPlayer, "重置境界阶级: RealmLVUP 0") GameWorld.DebugAnswer(curPlayer, "执行境界升阶: RealmLVUP 1 [次数]") GameWorld.DebugAnswer(curPlayer, "设置境界任务: RealmLVUP t 任务ID 进度值") GameWorld.DebugAnswer(curPlayer, "注:可设置进度的任务类型:%s" % PlayerPrestigeSys.NeedTaskValueTypeList) @@ -42,7 +42,6 @@ value = cmdList[0] if value == 0: - reVersionState = cmdList[1] if len(cmdList) > 1 else 0 curPlayer.SetOfficialRank(1) curPlayer.SetFreePoint(0) GameWorld.DebugAnswer(curPlayer, "重置境界!") @@ -59,9 +58,6 @@ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType), 0) PlayerGubao.Sync_GubaoItemEffInfo(curPlayer, gubaoID, effType, force=True) GameWorld.DebugAnswer(curPlayer, "重置境界OK") - if reVersionState: - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmVersionState, 0) - GameWorld.DebugAnswer(curPlayer, "重置改版标记,重登会执行重置境界逻辑!") return if value == 1: doCount = cmdList[1] if len(cmdList) > 1 else 1 @@ -80,7 +76,7 @@ taskID = cmdList[1] if len(cmdList) > 1 else 0 taskValue = cmdList[2] if len(cmdList) > 2 else 0 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmTaskValue % taskID, taskValue) - PlayerPrestigeSys.SyncRealmFBState(curPlayer, taskIDList=[taskID]) + PlayerPrestigeSys.SyncRealmInfo(curPlayer, taskIDList=[taskID]) GameWorld.DebugAnswer(curPlayer, "设置任务ID:%s,进度值:%s" % (taskID, taskValue)) return diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py deleted file mode 100644 index 60d7882..0000000 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_DuJie.py +++ /dev/null @@ -1,581 +0,0 @@ -#!/usr/bin/python -# -*- coding: GBK -*- -#------------------------------------------------------------------------------- -# -#------------------------------------------------------------------------------- -# -##@package GameWorldLogic.FBProcess.GameLogic_DuJie -# -# @todo:渡劫副本 -# @author xdh -# @date 2017-10-10 14:30 -# @version 1.0 -# -# 详细描述: 渡劫副本 -# -#--------------------------------------------------------------------- -"""Version = 2017-10-10 14:30""" -import FBCommon -import ChConfig -import IPY_GameWorld -import PlayerControl -import GameWorld -import NPCCustomRefresh -import IpyGameDataPY -import PlayerPrestigeSys -import GameFuncComm -import ItemCommon -import ShareDefine -import ItemControler -import PlayerSuccess -import EventShell -import EventReport - -import math -import time - -#当前副本地图的状态 -( -FB_Step_CallHelp, # 助战召唤 -FB_Step_MapPrepare, # 地图准备 -FB_Step_Fighting, # 战斗中 -FB_Step_LeaveTime, # 自由时间 -) = range(4) - -#---渡劫副本--- -DuJieFB_Star = 'DuJieFB_Star' #评级 -DuJieFB_RealmLV = "DuJieFB_RealmLV" # 境界等级 -DuJieFB_LeaderPlayerID = "DuJieFB_LeaderPlayerID" # 队长ID - - -( -Def_Time_MapPrepare, # 准备时间, 秒 -Def_Time_Fight, # 持续时间, 秒 -Def_Time_Leave, # 结束时间, 秒 -Def_StarTime, # 星级对应耗时配置, 秒 -Def_HelpAddAttrID, #护法可增加的属性 -) = range(5) - - -def GetRealmFBTimeCfg(): - lineID = 1 if FBCommon.GetFBPropertyMark() else 0 - return FBCommon.GetFBLineStepTime(ChConfig.Def_FBMapID_DuJie, lineID) - -def GetDuJieBossID(curPlayer=None): - if curPlayer: - realmLV = curPlayer.GetOfficialRank() - else: - realmLV = GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_RealmLV) - taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", realmLV) - if not taskIpyDataList: - return - for taskIpyData in taskIpyDataList: - if taskIpyData.GetTaskType() != PlayerPrestigeSys.RealmTaskType_Dujie: - continue - taskID = taskIpyData.GetTaskID() - if curPlayer: - if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID): - GameWorld.DebugLog("玩家渡劫boss已完成击杀! realmLV=%s,taskID=%s" % (realmLV, taskID), curPlayer.GetPlayerID()) - return - valueList = taskIpyData.GetNeedValueList() - return valueList[0] if valueList else 0 - return - -#---FB接口---------- -##副本初始化 -# @param tick:时间戳 -# @return 返回值无意义 -def DoFBInit(tick): - #GameWorld.GetGameFB().GameServer_RegisterFBInfo(GetRealmFBTimeCfg()[Def_MaxPlayerCnt], '') - return - -##开启副本 -# @param tick 时间戳 -# @return 返回值无意义 -# @remarks 开启副本 -def OnOpenFB(tick): - gameFB = GameWorld.GetGameFB() - gameFB.SetGameFBDict(DuJieFB_RealmLV, 0) - gameFB.SetGameFBDict(DuJieFB_Star, 0) - gameFB.SetGameFBDict(DuJieFB_LeaderPlayerID, 0) - return - - -##关闭副本 -# @param tick 时间戳 -# @return 无意义 -# @remarks -def OnCloseFB(tick): - #副本踢出玩家 - FBCommon.DoLogic_FBKickAllPlayer() - return - -##玩家死亡. -# @param curPlayer:死亡的玩家 -# @param tick 时间戳 -# @return 返回值无意义 -# @remarks 玩家主动离开副本. -def DoPlayerDead(curPlayer): - if curPlayer.GetID() == GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_LeaderPlayerID): - __DoDoJieFBOver(False, GameWorld.GetGameWorld().GetTick()) - return - -## 是否能够通过活动查询进入 -# @param curPlayer 玩家实例 -# @param mapID 地图ID -# @param lineID 线路id -# @param tick 时间戳 -# @return 布尔值 -def OnEnterFBEvent(curPlayer, mapID, lineID, tick): - return __CheckEnter(curPlayer, mapID, lineID) - - -##进入副本检查 -# @param curPlayer 玩家实例 -# @param mapID 地图ID -# @param lineID 线路id -# @return None -def __CheckEnter(curPlayer, mapID, lineID): - if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official): - GameWorld.DebugLog("爵位境界功能未开启, 无法开启渡劫!curLV=%s" % curPlayer.GetLV()) - return False - if lineID == 0 or curPlayer.GetTeamLV() == IPY_GameWorld.tmlLeader or (lineID == 1 and curPlayer.GetTeamID() == 0): - bossID = GetDuJieBossID(curPlayer) - if not bossID: - GameWorld.ErrLog("没有可挑战的渡劫boss或已完成: realmLV=%s" % curPlayer.GetOfficialRank(), curPlayer.GetPlayerID()) - return False - - return True - - -##副本玩家进入点 -# @param curPlayer 玩家实例 -# @param mapID 地图ID -# @param lineId 分线ID -# @param ipyEnterPosInfo 功能线路IPY配置坐标信息 -# @param tick 时间戳 -# @return posX, posY, 随机半径(可选) -def OnGetFBEnterPos(curPlayer, mapID, lineId, ipyEnterPosInfo, tick): - return ipyEnterPosInfo - - - -##是否可以进入 -# @param ask 请求结构体 -# @param tick 时间戳 -# @return TChangeMapError -# @remarks -def OnChangeMapAsk(ask, tick): - return IPY_GameWorld.cmeAccept - - -##玩家进入副本 -# @param curPlayer 玩家实例 -# @param tick 时间戳 -# @return 无意义 -# @remarks 玩家进入副本 -def DoEnterFB(curPlayer, tick): - gameFB = GameWorld.GetGameFB() - fbStep = gameFB.GetFBStep() - if fbStep == FB_Step_LeaveTime: - PlayerControl.PlayerLeaveFB(curPlayer) - return - - reqMapID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqFBMapID) - lineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqFBFuncLine) - if not FBCommon.GetHadSetFBPropertyMark(): #此处副本属性和功能线路ID不同,故分开设置 - propertyMark = curPlayer.GetOfficialRank() if lineID else lineID #小境界0 大境界为境界等级 - GameWorld.GetGameFB().SetGameFBDict(ChConfig.Map_FBDict_PropertyMark, propertyMark + 1) - PlayerControl.SetFBFuncLineID(curPlayer, reqMapID, lineID) - #FBCommon.SetFBPropertyMark(lineID) - #if lineID == 0: - FBCommon.SetFBStep(FB_Step_MapPrepare, tick) - - - - - fbPlayerCnt = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_NPCStrengthenPlayerCnt) - DuJieFBCfg = GetRealmFBTimeCfg() - if not gameFB.GetGameFBDictByKey(DuJieFB_LeaderPlayerID): - #重置属性加成 - - for attrID in DuJieFBCfg[Def_HelpAddAttrID]: - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBAttrAdd % attrID, 0) - - GameWorld.DebugLog('玩家进入副本') - - #if lineID == 0 or fbPlayerCnt == 1 or curPlayer.GetTeamLV() == IPY_GameWorld.tmlLeader: - __SetFBLeaderPlayer(curPlayer) -# if gameFB.GetFBStep() == FB_Step_Fighting: -# __OnDuJieFBStart(tick) - fbStep = gameFB.GetFBStep() - - if fbStep == FB_Step_MapPrepare: - #初始化并通知等待倒计时 - __EnterFBInPrepare(curPlayer, DuJieFBCfg[Def_Time_MapPrepare] * 1000, gameFB, tick) - - elif fbStep == FB_Step_Fighting: - #通知进入时间 - notifyTick = max(DuJieFBCfg[Def_Time_Fight] * 1000 - (tick - gameFB.GetFBStepTick()), 0) - curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, notifyTick, True) - #__UpdDuJieFBStar(tick, True) - - DoFBHelp(curPlayer, tick) - - return - -## 召唤助战完成 -def OnCallHelpBattleOK(curPlayer, tick): - lineID = 1 if FBCommon.GetFBPropertyMark() else 0 - EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, ChConfig.CME_Log_Start, 0) - DuJieFBCfg = GetRealmFBTimeCfg() - FBCommon.SetFBStep(FB_Step_MapPrepare, tick) - __EnterFBInPrepare(curPlayer, DuJieFBCfg[Def_Time_MapPrepare] * 1000, GameWorld.GetGameFB(), tick) - return - -def __SetFBLeaderPlayer(curPlayer): - ##设置副本渡劫主人 - gameFB = GameWorld.GetGameFB() - gameFB.SetGameFBDict(DuJieFB_LeaderPlayerID, curPlayer.GetPlayerID()) - gameFB.SetGameFBDict(DuJieFB_RealmLV, curPlayer.GetOfficialRank()) - PlayerPrestigeSys.SyncRealmFBState(curPlayer) - - FBCommon.UpdateFBEnterTick(curPlayer) - #请求护法 - OnGetMemberForHelpDujie(curPlayer, False) - return - -##副本定时器 -# @param tick 时间戳 -# @return 返回值无意义 -# @remarks 副本定时器 -def OnProcess(tick): - fbStep = GameWorld.GetGameFB().GetFBStep() - - if fbStep == FB_Step_MapPrepare: - __DoLogic_MapPrepare(tick) - elif fbStep == FB_Step_Fighting: - __DoLogic_MapFighting(tick) - elif fbStep == FB_Step_LeaveTime: - __DoLogic_MapLeave(tick) - return - - -## 更新当前副本星级 -def __UpdDuJieFBStar(tick, isForce=False): - return - gameFB = GameWorld.GetGameFB() - curStar = gameFB.GetGameFBDictByKey(DuJieFB_Star) - if curStar == 1: - return curStar - - useSecond = int(math.ceil((tick - gameFB.GetFBStepTick()) / 1000.0)) - DuJieFBCfg = GetRealmFBTimeCfg() - starTimeList = DuJieFBCfg[Def_StarTime] - diffSecond = 0 - updStar = 1 # 默认至少1星 - for star, starTime in enumerate(starTimeList, 2): - if useSecond <= starTime: - updStar = star - diffSecond = starTime - useSecond - - if curStar == updStar and not isForce: - return curStar - - gameFB.SetGameFBDict(DuJieFB_Star, updStar) - - GameWorld.DebugLog("__UpdDuJieFBStar useSecond=%s,curStar=%s,updStar=%s, diffSecond=%s" - % (useSecond, curStar, updStar, diffSecond)) - - - playerManager = GameWorld.GetMapCopyPlayerManager() - for index in xrange(playerManager.GetPlayerCount()): - curPlayer = playerManager.GetPlayerByIndex(index) - if not curPlayer: - continue - DoFBHelp(curPlayer, tick) - if updStar != 1: - curPlayer.Sync_TimeTick(IPY_GameWorld.tttFlagTake, 0, diffSecond * 1000, True) - - return updStar - - -def __EnterFBInPrepare(curPlayer, downTime, gameFB, tick, notifyEff=False): - #通知准备倒计时 - notifyTick = max(downTime - (tick - gameFB.GetFBStepTick()), 0) - curPlayer.Sync_TimeTick(IPY_GameWorld.tttWaitStart, 0, notifyTick, True) - - if notifyEff: - curPlayer.Sync_TimeTick(IPY_GameWorld.tttAddUpTime, 0, notifyTick, True) - return - - -def __DoLogic_MapPrepare(tick): - invadeCfg = GetRealmFBTimeCfg() - if tick - GameWorld.GetGameFB().GetFBStepTick() < invadeCfg[Def_Time_MapPrepare] * 1000: - return - FBCommon.SetFBStep(FB_Step_Fighting, tick) - __OnDuJieFBStart(tick) - return - - -def __DoLogic_MapFighting(tick): - invadeCfg = GetRealmFBTimeCfg() - - if tick - GameWorld.GetGameFB().GetFBStepTick() >= invadeCfg[Def_Time_Fight] * 1000: - __DoDoJieFBOver(False, tick) - return - __UpdDuJieFBStar(tick) - return - -def __DoLogic_MapLeave(tick): - invadeCfg = GetRealmFBTimeCfg() - if tick - GameWorld.GetGameFB().GetFBStepTick() < invadeCfg[Def_Time_Leave] * 1000: - return - # 时间到,踢出还在副本的玩家等... - #FBCommon.DoLogic_FBKickAllPlayer() - return - -def __OnDuJieFBStart(tick): - lineID = 1 if FBCommon.GetFBPropertyMark() else 0 - if not GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_LeaderPlayerID): - findLeader = False - playerManager = GameWorld.GetMapCopyPlayerManager() - for index in xrange(playerManager.GetPlayerCount()): - curPlayer = playerManager.GetPlayerByIndex(index) - if not curPlayer: - continue - if curPlayer.GetTeamLV() == IPY_GameWorld.tmlLeader or (lineID == 1 and curPlayer.GetTeamID() == 0): - __SetFBLeaderPlayer(curPlayer) - findLeader = True - break - if not findLeader: - GameWorld.Log(' 准备倒计时已过,队长仍未进入副本!!! ') - FBCommon.DoLogic_FBKickAllPlayer() - return - DuJieFBCfg = GetRealmFBTimeCfg() - bossID = GetDuJieBossID() - if not bossID: - return - mapID = GameWorld.GetMap().GetMapID() - - refreshBossMark = FBCommon.GetFBLineRefreshNPC(mapID, lineID) - NPCCustomRefresh.SetNPCRefresh(refreshBossMark, [bossID]) - - # 通知开始 - FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttTowerTake, DuJieFBCfg[Def_Time_Fight] * 1000) - FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp) - __UpdDuJieFBStar(tick) - return - - -def __DoDoJieFBOver(isPass, tick): - # 副本结束逻辑 - gameFB = GameWorld.GetGameFB() - if gameFB.GetFBStep() != FB_Step_Fighting: - return - GameWorld.DebugLog("处理渡劫副本结束逻辑") - invadeCfg = GetRealmFBTimeCfg() - costTime = tick - gameFB.GetFBStepTick() - FBCommon.SetFBStep(FB_Step_LeaveTime, tick) - - leaderPlayerID = gameFB.GetGameFBDictByKey(DuJieFB_LeaderPlayerID) - copyMapPlayerManager = GameWorld.GetMapCopyPlayerManager() - leaderPlayer = copyMapPlayerManager.FindPlayerByID(leaderPlayerID) - if not leaderPlayer: - #渡劫的人不在则算失败 - isPass = False - - # 通知GameServer副本结束 - msgStr = str([isPass, leaderPlayerID]) - GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'DuJieFBOver', msgStr, len(msgStr)) - - curStar = gameFB.GetGameFBDictByKey(DuJieFB_Star) - realmLV = gameFB.GetGameFBDictByKey(DuJieFB_RealmLV) - - FBPropertyMark = FBCommon.GetFBPropertyMark() - lineID = 1 if FBPropertyMark else 0 - leaveTick = invadeCfg[Def_Time_Leave] * 1000 - overDict = {FBCommon.Over_costTime:costTime,FBCommon.Over_grade:curStar, FBCommon.Over_leaderID:leaderPlayerID} - playerCnt = copyMapPlayerManager.GetPlayerCount() - for i in xrange(playerCnt): - - curPlayer = copyMapPlayerManager.GetPlayerByIndex(i) - - if curPlayer == None or curPlayer.IsEmpty(): - continue -# isHelpFight = lineID == 1 and curPlayer.GetPlayerID() != leaderPlayerID -# joinType = FBCommon.GetFBJoinType(curPlayer, isHelpFight) - EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, ChConfig.CME_Log_End, 0, isPass) - - curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, leaveTick, True) - if isPass and leaderPlayer: - if curPlayer.GetPlayerID() == leaderPlayerID: - #渡劫通过处理 - PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_Dujie, 1) - #清除CD - FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_LastEnterFBTick % ChConfig.Def_FBMapID_DuJie, 0) - FBCommon.SyncFBEnterTick(curPlayer) - - - FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, isPass, overDict) - - return - -def __GiveTeamAward(curPlayer, leaderPlayer, realmIpyData, curStar): - #帮忙打的给奖励 - if not realmIpyData: - return - teamAwardDict = realmIpyData.GetTeamAward() - if not teamAwardDict: - return - - prizeItemList = teamAwardDict.get(curStar, []) - needSpace = len(prizeItemList) - emptySpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace) - isSendMail = int(needSpace > emptySpace) # 是否发送邮件 - if isSendMail: - PlayerControl.SendMailByKey("RealmFBTeam", [curPlayer.GetPlayerID()], prizeItemList, [leaderPlayer.GetPlayerName()]) - GameWorld.DebugLog("背包空间不够,发送邮件: mailItemList=%s" % str(prizeItemList), curPlayer.GetPlayerID()) - else: - for itemID, itemCnt, isBind in prizeItemList: - ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem], - event=["Dojie", False, {}]) - return - -##获得副本帮助信息 -# @param curPlayer 玩家实例 -# @param tick 时间戳 -# @return 无意义 -# @remarks 用于通知阵营比分条 -def DoFBHelp(curPlayer, tick, helpDict={}): - - gameFB = GameWorld.GetGameFB() - leaderPlayerID = gameFB.GetGameFBDictByKey(DuJieFB_LeaderPlayerID) -# curStar = gameFB.GetGameFBDictByKey(DuJieFB_Star) - helpDict[FBCommon.Help_leaderID] = leaderPlayerID - FBCommon.Notify_FBHelp(curPlayer, helpDict) - return - -def DoFB_Npc_KillNPC(attacker, curNPC, tick): - __FBNPCOnKilled(curNPC, tick) - return - -## 执行副本杀怪逻辑 -# @param curPlayer 杀怪的人 -# @param curNPC 被杀的怪 -# @param tick 当前时间 -# @return None -def DoFB_Player_KillNPC(curPlayer, curNPC, tick): - __FBNPCOnKilled(curNPC, tick) - return - -def __FBNPCOnKilled(curNPC, tick): - bossID = curNPC.GetNPCID() - if bossID != GetDuJieBossID(): - return - GameWorld.DebugLog('渡劫已被击杀!') - -# # 全服广播 -# PlayerControl.WorldNotify(0, "jiazu_liubo_202580", [curPlayer.GetFamilyName(), mapID, bossID]) - __DoDoJieFBOver(True, tick) - return -## 检查是否可攻击, 主判定不可攻击的情况,其他逻辑由外层决定 -# @param attacker 攻击方 -# @param defender 防守方 -# @return bool -def CheckCanAttackTagObjInFB(attacker, defender): - gameFB = GameWorld.GetGameFB() - if gameFB.GetFBStep() != FB_Step_Fighting: - return False - return True - -## 副本行为 -# @param curPlayer 玩家 -# @param actionType 行为类型 -# @param actionInfo 行为信息 -# @param tick 当前时间 -# @return None -def DoFBAction(curPlayer, actionType, actionInfo, tick): - - if curPlayer.GetPlayerID() != GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_LeaderPlayerID): - return - #验证间隔 - if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_DuJieInspire) < IpyGameDataPY.GetFuncCfg('RealmFBHelpAttr', 3): - #没到间隔 - GameWorld.DebugLog("点击鼓舞间隔") - return - curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_DuJieInspire, tick) - OnGetMemberForHelpDujie(curPlayer, True) - - return - -def OnGetMemberForHelpDujie(curPlayer, isInspire): - #向盟友寻求守护 -# if curPlayer.GetFamilyID() <= 0: -# GameWorld.DebugLog("没有战盟,不能请求守护!") -# return - return - realmLV = GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_RealmLV) - realmIpyData = PlayerPrestigeSys.GetRealmIpyData(realmLV) - if not realmIpyData: - return - - GameWorld.DebugLog("向盟友寻求渡劫守护!") - atkAdd = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBAttrAdd % ShareDefine.Def_Effect_BaseAtkAddPer) - msgStr = str([atkAdd, isInspire]) - GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'GetMemberForHelpDujie', msgStr, len(msgStr)) - return - - - -def OnGetDuJieHelpInfo(curPlayer, helpInfo): - #收到守护信息 - realmFBHelpAttrDict = IpyGameDataPY.GetFuncEvalCfg('RealmFBHelpAttr') - totalAttrDict = {} - fbhelpInfo = '' - for helpType, name in helpInfo: - attrDict = realmFBHelpAttrDict.get(str(helpType), {}) - for attrID, attrValue in attrDict.items(): - totalAttrDict[attrID] = totalAttrDict.get(attrID, 0) + attrValue - fbhelpInfo +='%s|%s,' % (helpType, name) - - for attrID, attrValue in totalAttrDict.items(): - if int(attrID) in GetRealmFBTimeCfg()[Def_HelpAddAttrID]: - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBAttrAdd % attrID, attrValue) - - #刷属性 - PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrByBuff() - - #副本帮助信息 - if fbhelpInfo: - fbhelpInfo = fbhelpInfo[:-1] - helpDict = {'helpInfo':fbhelpInfo} - DoFBHelp(curPlayer, 0, helpDict) - return - -def CalcDujieFBAttrAdd(curPlayer, allAttrList): - #护法属性计算 - if FBCommon.GetRecordMapID(curPlayer.GetMapID()) != ChConfig.Def_FBMapID_DuJie: - return - leaderPlayerID = GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_LeaderPlayerID) - if curPlayer.GetID() != leaderPlayerID: - return -# fbStep = GameWorld.GetGameFB().GetFBStep() -# if fbStep != FB_Step_Fighting: -# return - fbcfg = GetRealmFBTimeCfg() - if not fbcfg: - return - GameWorld.DebugLog('护法属性计算 allAttrList=%s'%allAttrList) - for attrID in GetRealmFBTimeCfg()[Def_HelpAddAttrID]: - attrValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBAttrAdd % attrID) - PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList) - - GameWorld.DebugLog('护法属性计算结果 allAttrList=%s'%allAttrList) - return -## 是否副本复活 -# @param None -# @return 是否副本复活 -def OnPlayerReborn(): - return True \ No newline at end of file diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py index 0a9894f..c1e5011 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py @@ -166,11 +166,6 @@ ("DWORD", "LVMax", 0), ("list", "AddAttrType", 0), ("list", "AddAttrNum", 0), - ("DWORD", "BuffID", 0), - ("DWORD", "ExpRate", 0), - ("DWORD", "ExpLimit", 0), - ("dict", "LearnSkillIDInfo", 0), - ("BYTE", "AddFreePoint", 0), ), "RealmLVUPTask":( @@ -2870,12 +2865,7 @@ def GetLvLarge(self): return self.attrTuple[1] # 大境界 BYTE def GetLVMax(self): return self.attrTuple[2] # 等级上限 DWORD def GetAddAttrType(self): return self.attrTuple[3] # 境界加成属性类型 list - def GetAddAttrNum(self): return self.attrTuple[4] # 境界加成属性值 list - def GetBuffID(self): return self.attrTuple[5] # 给全服在线玩家增加buff DWORD - def GetExpRate(self): return self.attrTuple[6] # 修为池经验速率 DWORD - def GetExpLimit(self): return self.attrTuple[7] # 修为池经验上限 DWORD - def GetLearnSkillIDInfo(self): return self.attrTuple[8] # 学习技能ID信息 {"职业":[技能ID, ...], ...} dict - def GetAddFreePoint(self): return self.attrTuple[9] # 增加自由属性点 BYTE + def GetAddAttrNum(self): return self.attrTuple[4] # 境界加成属性值 list # 境界进阶任务表 class IPY_RealmLVUPTask(): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_AddRealmExpRate.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_AddRealmExpRate.py deleted file mode 100644 index 56164ea..0000000 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_AddRealmExpRate.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/python -# -*- coding: GBK -*- -#------------------------------------------------------------------------------- -# -##@package UseItem.Item_AddRealmExpRate -# -# @todo:增加聚灵效率 -# @author xdh -# @date 2019-5-5 -# @version 1.0 -# -# 详细描述: 增加聚灵效率 -# -#------------------------------------------------------------------------------- -#"""Version = 2019-5-5 12:00""" -#------------------------------------------------------------------------------- - -import PlayerControl -import PlayerPrestigeSys -import ItemCommon -import ChConfig - -def BatchUseItem(curPlayer, curRoleItem, tick, useCnt, exData): - ##批量使用物品 - #itemTypeID = curRoleItem.GetItemTypeID() - curEff = curRoleItem.GetEffectByIndex(0) - addTime = curEff.GetEffectValue(0) * useCnt - addRate = curEff.GetEffectValue(1) - PlayerPrestigeSys.AddRealmExpBuffTime(curPlayer, addTime, addRate) - - #PlayerControl.NotifyCode(curPlayer, 'UseItem_1', [itemTypeID, mwID, addExp]) - ItemCommon.DelItem(curPlayer, curRoleItem, useCnt, True, isForceDR=True) - return True, useCnt - diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py index 89c5afb..afd4852 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py @@ -5017,7 +5017,7 @@ PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_KillNPC) PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_KillNPC) PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_KillSpecificNPC, 1, [npcID]) - PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_KillNPC, 1) + #PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_KillNPC, 1) if ChConfig.IsGameBoss(curNPC): OnPlayerKillBoss(curPlayer, npcID, mapID, False) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py index c240c41..31c87e1 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py @@ -5719,9 +5719,6 @@ #自定义奖励 elif rewardType == ChConfig.Def_RewardType_CustomAward: PlayerCustomAward.OnGetCustomAward(curPlayer, dataEx) - #境界修仙之路奖励 - elif rewardType == ChConfig.Def_RewardType_RealmXXZL: - PlayerPrestigeSys.GetXXZLAward(curPlayer, dataEx) #境界渡劫任务条件奖励 elif rewardType == ChConfig.Def_RewardType_RealmLVUpTask: PlayerPrestigeSys.GetRealmLVUpTaskAward(curPlayer, dataEx) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerChangeJob.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerChangeJob.py index 5ecc842..49c485f 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerChangeJob.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerChangeJob.py @@ -105,7 +105,7 @@ # 1.3 境界 - 被动技能 for index in range(ipyDataMgr.GetRealmCount()): ipyData = ipyDataMgr.GetRealmByIndex(index) - LearnSkillIDInfo = ipyData.GetLearnSkillIDInfo() + LearnSkillIDInfo = {} if str(curJob) not in LearnSkillIDInfo: continue curJobLearnSkillIDList = LearnSkillIDInfo[str(curJob)] diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py index f8b3385..0214b9f 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py @@ -3308,7 +3308,8 @@ PlayerActTurntable.OnPlayerUseGold(curPlayer, type_Price, price) #轮回殿 PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_PayMoney, type_Price, price) - + if type_Price == ShareDefine.TYPE_Price_Xiantao: + PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_UseXiantao, price) unitPrice = price if quantity == 1 else int(math.ceil(price * 1.0 / quantity)) # 单价 #reason_name = "Unknown" if not costType else costType reason_name = costType 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 da793b3..4bd10bc 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py @@ -15,45 +15,32 @@ #"""Version = 2017-10-10 14:30""" #------------------------------------------------------------------------------- -import ItemCommon import ItemControler import FBCommon -import QuestCommon import GameFuncComm import PlayerControl import ChPyNetSendPack import NetPackCommon -import IPY_GameWorld import IpyGameDataPY import ShareDefine import GameWorld import ChConfig import PlayerSuccess -import ChEquip import PlayerBillboard import PlayerTongTianLing -import PassiveBuffEffMng import PlayerGubao -import EventShell -import DataRecordPack -import SkillCommon -import time #------------------------------------------------------------------------------ # 渡劫任务类型 RealmTaskTypeList = ( RealmTaskType_LV, # 等级 1 RealmTaskType_PassMap, # 过关关卡 2 -RealmTaskType_KillNPC, # 击杀NPC 3 -RealmTaskType_LVUPItem, # 进阶丹 4 -RealmTaskType_Equip, # 基础装备明细 5 -RealmTaskType_Dujie, # 渡劫boss 6 -RealmTaskType_FinishMainTask, # 完成xx主线任务 7 -) = range(1, 1 + 7) +RealmTaskType_UseXiantao, # 消耗战锤 3 +) = range(1, 1 + 3) # 需要记录任务值的任务类型列表 -NeedTaskValueTypeList = [RealmTaskType_KillNPC, RealmTaskType_Dujie] +NeedTaskValueTypeList = [RealmTaskType_UseXiantao] def DoOfficialOpen(curPlayer): #功能开启 @@ -64,169 +51,14 @@ def OnLogin(curPlayer): - DoRealmVersionStateLogic(curPlayer) - SyncRealmFBState(curPlayer, isAll=True) - UpdateRealmExp(curPlayer, False) - NotifyRealmExpInfo(curPlayer) + SyncRealmInfo(curPlayer, isAll=True) if not curPlayer.GetOfficialRank(): curPlayer.SetOfficialRank(1) return -def DoRealmVersionStateLogic(curPlayer): - ## 执行版本变更逻辑,仅触发一次,之后可删除 - state = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmVersionState) - if state: - GameWorld.DebugLog("境界版本变更逻辑已重置过!", curPlayer.GetPlayerID()) - return - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmVersionState, 1) - realmLV = curPlayer.GetOfficialRank() - if realmLV <= 1: - # 新号不处理 - return - playerID = curPlayer.GetPlayerID() - GameWorld.Log("======================== 执行境界版本变更重置逻辑 =======================", playerID) - - # 重置境界 - curPlayer.SetOfficialRank(1) - - # 返还境界丹 - returnItemID = IpyGameDataPY.GetFuncCfg("RealmLvUP", 1) - returnCount = 0 - lvToRealmLV = -1 # 重置后当前玩家等级对应可提升到的境界等级 - playerLV = curPlayer.GetLV() - ipyDataMgr = IpyGameDataPY.IPY_Data() - for index in range(ipyDataMgr.GetRealmCount()): - realmIpyData = ipyDataMgr.GetRealmByIndex(index) - lvToRealmLV = realmIpyData.GetLv() - if playerLV < realmIpyData.GetLVMax(): - break - - # 返还到可升级到的境界等级前一级 - for index in range(ipyDataMgr.GetRealmLVUPTaskCount()): - taskIpyData = ipyDataMgr.GetRealmLVUPTaskByIndex(index) - if taskIpyData.GetLv() >= lvToRealmLV: - break - taskType = taskIpyData.GetTaskType() - if taskType != RealmTaskType_LVUPItem: - continue - needValueList = taskIpyData.GetNeedValueList() - needValueA = GetRealmTaskNeedValue(needValueList, 0) - returnCount += needValueA - - GameWorld.Log("境界等级: realmLV=%s,playerLV=%s,lvToRealmLV=%s,returnItemID=%s,returnCount=%s" - % (realmLV, playerLV, lvToRealmLV, returnItemID, returnCount), playerID) - - # 重置灵根点,扣除赠送灵根点 - linggenPointDel = 0 - linggenPointLVAdd = 0 - linggenCntList = IpyGameDataPY.GetFuncEvalCfg("RealmVersion", 2) - for rLV, lgPoint in enumerate(linggenCntList): - if rLV > realmLV: - break - linggenPointDel += lgPoint - linggenPointLVAdd += lgPoint - - # 古宝效果赠送灵根点 - linggenPointGubaoAdd = 0 - resetGubaoEffValueKeyList = [] - effType = PlayerGubao.GubaoEffType_RealmLVAddLinggen - ipyDataMgr = IpyGameDataPY.IPY_Data() - for index in range(ipyDataMgr.GetGubaoCount()): - ipyData = ipyDataMgr.GetGubaoByIndex(index) - gubaoID = ipyData.GetGubaoID() - addFreePointAlready = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType)) - if not addFreePointAlready: - continue - resetGubaoEffValueKeyList.append(ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType)) - linggenPointDel += addFreePointAlready - linggenPointGubaoAdd += addFreePointAlready - - freePointBef = curPlayer.GetFreePoint() - linggenPointTotalBef = freePointBef - addPointDict = {} - ipyDataMgr = IpyGameDataPY.IPY_Data() - for index in range(ipyDataMgr.GetRolePointCount()): - linggenID = ipyDataMgr.GetRolePointByIndex(index).GetAttrID() - linggenPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % linggenID) - addPointDict[linggenID] = linggenPoint - linggenPointTotalBef += linggenPoint - GameWorld.Log("重置前灵根点: freePointBef=%s,linggenPointTotalBef=%s,addPointDict=%s" % (freePointBef, linggenPointTotalBef, addPointDict), playerID) - - if linggenPointDel: - import Item_ResetAttrPoint - Item_ResetAttrPoint.DoResetAttrPoint(curPlayer, 0, 0) - updFreePoint = max(0, curPlayer.GetFreePoint() - linggenPointDel) - curPlayer.SetFreePoint(updFreePoint) - for resetKey in resetGubaoEffValueKeyList: - PlayerControl.NomalDictSetProperty(curPlayer, resetKey, 0) - GameWorld.Log("重置境界灵根点: linggenPointDel=%s,updFreePoint=%s,linggenPointLVAdd=%s,linggenPointGubaoAdd=%s" % - (linggenPointDel, updFreePoint, linggenPointLVAdd, linggenPointGubaoAdd), playerID) - - # 删除境界技能 - delSkillIDList = [] - skillIDList = IpyGameDataPY.GetFuncEvalCfg("RealmVersion", 3) - skillManager = curPlayer.GetSkillManager() - playerControl = PlayerControl.PlayerControl(curPlayer) - for skillID in skillIDList: - if not skillManager.FindSkillBySkillID(skillID): - continue - skillManager.DeleteSkillBySkillID(skillID) - delSkillIDList.append(skillID) - playerControl.RefreshSkillFightPowerByDel(skillID) - playerControl.RefreshPlayerAttrState() - PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEffSet(curPlayer) - GameWorld.Log("重置境界删除技能ID列表: %s" % delSkillIDList, playerID) - - # 境界难度地图重置 - PlayerControl.SetRealmDifficulty(curPlayer, 0) - GameWorld.Log("重置境界难度等级选择!", playerID) - - itemListEx = IpyGameDataPY.GetFuncEvalCfg("RealmVersion", 4) - mailItemList = [[returnItemID, returnCount, 0]] + itemListEx - paramList = [linggenPointDel, returnItemID, returnItemID, returnCount] - PlayerControl.SendMailByKey("RealmVersion", [playerID], mailItemList, paramList) - GameWorld.Log("重置境界邮件: mailItemList=%s" % mailItemList, playerID) - - # 记录流向 - freePointAft = curPlayer.GetFreePoint() - linggenPointTotalAft = freePointAft - addPointDictAft = {} - ipyDataMgr = IpyGameDataPY.IPY_Data() - for index in range(ipyDataMgr.GetRolePointCount()): - linggenID = ipyDataMgr.GetRolePointByIndex(index).GetAttrID() - linggenPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % linggenID) - addPointDictAft[linggenID] = linggenPoint - linggenPointTotalAft += linggenPoint - GameWorld.Log("重置后灵根点: freePointAft=%s,linggenPointTotalAft=%s,addPointDictAft=%s" % (freePointAft, linggenPointTotalAft, addPointDictAft), playerID) - dataDict = {"realmLV":realmLV, "returnItemID":returnItemID, "returnCount":returnCount, - "linggenPointDel":linggenPointDel, "linggenPointLVAdd":linggenPointLVAdd, "linggenPointGubaoAdd":linggenPointGubaoAdd, - "linggenPointTotalBef":linggenPointTotalBef, "linggenPointTotalAft":linggenPointTotalAft, - "freePointBef":freePointBef, "freePointAft":freePointAft, "addPointDict":addPointDict, - "delSkillIDList":delSkillIDList, "mailItemList":mailItemList} - DataRecordPack.SendEventPack("RealmVersionReset", dataDict, curPlayer) - GameWorld.Log("======================= 境界版本变更重置完毕 =======================", playerID) - return - def GetRealmIpyData(realmLV): return IpyGameDataPY.GetIpyGameData("Realm", realmLV) - -#// A5 24 开启渡劫 #tagCMOpenRealmFB -# -#struct tagCMOpenRealmFB -#{ -# tagHead Head; -#}; -def OpenRealmFB(index, clientData, tick): - return - -def GetXXZLAward(curPlayer, taskID): - ## 领取修仙之路奖励,废弃 - return - -def SyncRealmFBState(curPlayer, taskIDList=None, isAll=False): - #通知客户端渡劫副本是否开启 - #if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official): - # return +def SyncRealmInfo(curPlayer, taskIDList=None, isAll=False): sendPack = ChPyNetSendPack.tagMCSyncRealmInfo() sendPack.TaskAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskAwardState) sendPack.TaskValueList = [] @@ -248,11 +80,6 @@ NetPackCommon.SendFakePack(curPlayer, sendPack) return - -## 计算爵位属性 -# @param curPlayer 玩家 -# @param allAttrList 属性列表 -# @return None def CalcOfficialRankAttr(curPlayer): if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official): return @@ -272,11 +99,6 @@ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Prestige, allAttrList) return - -## 重刷所有属性 -# @param curPlayer -# @param isForceRefresh:强制刷新排行榜 -# @return 指定数据 def RefreshOfficialAttr(curPlayer): CalcOfficialRankAttr(curPlayer) PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() @@ -307,7 +129,7 @@ GameWorld.DebugLog("更新境界任务值: realmLV=%s,taskType=%s,taskID=%s,updValue=%s,curValue=%s,addValue=%s" % (realmLV, taskType, taskID, updValue, curValue, addValue), curPlayer.GetPlayerID()) if syncTaskIDList: - SyncRealmFBState(curPlayer, taskIDList=syncTaskIDList) + SyncRealmInfo(curPlayer, taskIDList=syncTaskIDList) return def GetRealmTaskNeedValue(needValueList, index): return needValueList[index] if len(needValueList) > index else 0 @@ -356,72 +178,6 @@ % (realmLV, taskID, taskType, mapID, lineID), playerID) return - # 进阶丹 - elif taskType == RealmTaskType_LVUPItem: - itemID = IpyGameDataPY.GetFuncCfg("RealmLvUP", 1) - needItemCount = needValueA - itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) - lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList({itemID:needItemCount}, itemPack) - if lackItemDict: - GameWorld.DebugLog('境界任务领奖,物品不足! realmLV=%s,taskID=%s,taskType=%s,lackItemDict=%s' - % (realmLV, taskID, taskType, lackItemDict), playerID) - return - ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Realm") - - # 装备 - elif taskType == RealmTaskType_Equip: - if len(needValueList) < 4: - GameWorld.DebugLog('境界任务领奖,装备条件配置错误,长度必须为4! realmLV=%s,taskID=%s,taskType=%s,needValueList=%s' - % (realmLV, taskID, taskType, needValueList), playerID) - return - classLV, star, isSuite, color = needValueList[:4] - needCount = needValueList[4] if len(needValueList) > 4 else len(ChConfig.EquipPlace_Base) - GameWorld.DebugLog('境界任务领奖,装备条件! realmLV=%s,taskID=%s,taskType=%s,classLV=%s,star=%s,isSuite=%s,color=%s,needCount=%s' - % (realmLV, taskID, taskType, classLV, star, isSuite, color, needCount), playerID) - curCount = 0 - equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) - for place in ChConfig.EquipPlace_Base: - ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, place) - if not ipyData: - continue - gridIndex = ipyData.GetGridIndex() - curEquip = equipPack.GetAt(gridIndex) - if not ItemCommon.CheckItemCanUse(curEquip): - continue - curPartStar = ChEquip.GetEquipPartStar(curPlayer, gridIndex) - if curPartStar < star: - GameWorld.DebugLog(' 装备位星级不足! realmLV=%s,taskID=%s,taskType=%s,classLV=%s,place=%s,curPartStar=%s < %s' - % (realmLV, taskID, taskType, classLV, place, curPartStar, star), playerID) - continue - if isSuite and not curEquip.GetSuiteID(): - GameWorld.DebugLog(' 装备位非套装! realmLV=%s,taskID=%s,taskType=%s,classLV=%s,place=%s' - % (realmLV, taskID, taskType, classLV, place), playerID) - continue - if curEquip.GetItemColor() < color: - GameWorld.DebugLog(' 装备位品质不足! realmLV=%s,taskID=%s,taskType=%s,classLV=%s,place=%s,ItemColor=%s < %s' - % (realmLV, taskID, taskType, classLV, place, curEquip.GetItemColor(), color), playerID) - continue - curCount += 1 - - if curCount < needCount: - GameWorld.DebugLog(' 境界任务所需装备数不足! realmLV=%s,taskID=%s,taskType=%s,classLV=%s,star=%s,isSuite=%s,color=%s,curCount=%s < %s' - % (realmLV, taskID, taskType, classLV, star, isSuite, color, curCount, needCount), playerID) - return - - # 渡劫 - elif taskType == RealmTaskType_Dujie: - curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID) - if not curValue: - GameWorld.DebugLog('境界任务领奖,渡劫未过关! realmLV=%s,taskID=%s,taskType=%s' % (realmLV, taskID, taskType), playerID) - return - - # 完成xx主线任务 - elif taskType == RealmTaskType_FinishMainTask: - missionID = needValueA - if not QuestCommon.GetHadFinishMainMission(curPlayer, missionID): - GameWorld.DebugLog('境界任务领奖,主线任务未完成! realmLV=%s,taskID=%s,taskType=%s,missionID=%s' % (realmLV, taskID, taskType, missionID), playerID) - return - # 根据记录任务进度值 elif taskType in NeedTaskValueTypeList: curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID) @@ -438,7 +194,7 @@ updAwardState = awardState|pow(2, taskID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmTaskAwardState, updAwardState) GameWorld.DebugLog("境界渡劫领奖OK! realmLV=%s,taskID=%s,updAwardState=%s" % (realmLV, taskID, updAwardState), playerID) - SyncRealmFBState(curPlayer) + SyncRealmInfo(curPlayer) return def CheckRealmTaskFinishAll(curPlayer): @@ -463,7 +219,6 @@ # tagHead Head; #}; def DoRealmLVUp(index, clientData, tick): - #升级境界 curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) curRealmLV = curPlayer.GetOfficialRank() realmIpyData = GetRealmIpyData(curRealmLV) @@ -501,29 +256,11 @@ PlayerControl.PlayerControl(curPlayer).PlayerLvUp() if needSys: - addBuffID = nextRealmIpyData.GetBuffID() - if addBuffID: - 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(), curPlayer.GetID(), nextRealmLv]) - - if SkillCommon.GivePlayerSkillByJobSkill(curPlayer, nextRealmIpyData.GetLearnSkillIDInfo()): - PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEffSet(curPlayer) - - addFreePoint = nextRealmIpyData.GetAddFreePoint() - if addFreePoint: - updFreePoint = curPlayer.GetFreePoint() + addFreePoint - curPlayer.SetFreePoint(updFreePoint) - GameWorld.DebugLog(" 境界阶级加灵根点: addFreePoint=%s,updFreePoint=%s" % (addFreePoint, updFreePoint)) + PlayerControl.WorldNotify(0, 'RealmUpSuccess', [curPlayer.GetName(), curPlayer.GetID(), nextRealmLv]) RefreshOfficialAttr(curPlayer) GameFuncComm.DoFuncOpenLogic(curPlayer) - SyncRealmFBState(curPlayer, taskIDList=syncTaskIDList) - #更新修为速率 - UpdateRealmExp(curPlayer, False, True) - NotifyRealmExpInfo(curPlayer) + SyncRealmInfo(curPlayer, taskIDList=syncTaskIDList) #境界提升成就 PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_RealmlvUp, nextRealmLv) PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_RealmUp, 1) @@ -531,102 +268,4 @@ PlayerBillboard.UpdateRealmBillboard(curPlayer) # 记录开服活动 #OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_RealmLV, nextRealmLv) - EventShell.EventRespons_RealmUp(curPlayer, nextRealmLv) - #流向 - DataRecordPack.DR_RealmLVUp(curPlayer, nextRealmLv) return True - -#// A5 21 境界修为池提取 #tagCMTakeOutRealmExp -# -#struct tagCMTakeOutRealmExp -#{ -# tagHead Head; -#}; -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