From 3d0d0fa39bc4e24094de982640720a49f4cf080b Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期六, 22 六月 2019 16:28:34 +0800
Subject: [PATCH] 6603 【后端】【2.0】增加新版的sp和被动技能 - 修复盾值
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py | 608 +++++++++++++++++++++++++++++++++---------------------
1 files changed, 367 insertions(+), 241 deletions(-)
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 a06f659..5847a24 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
@@ -37,7 +37,6 @@
import QuestCommon
import SkillShell
import GameLogInfo
-import PlayerReincarnation
import PlayerMissionCollect
import PlayerFamily
import ShareDefine
@@ -49,9 +48,6 @@
import ChEquip
import PlayerActivity
import PlayerSuccess
-import EventReport
-#import PlayerCostVIP
-import GameFuncComm
import IpyGameDataPY
import PlayerPet
import PlayerArrestTask
@@ -59,11 +55,15 @@
import PlayerBossReborn
import PlayerFairyCeremony
import PlayerNewFairyCeremony
+import Operate_EquipStone
+import OpenServerCampaign
import PlayerWeekParty
+import PlayerFairyDomain
+import GameFuncComm
import PlayerActLogin
import PlayerHorse
import FBCommon
-import PyGameData
+import NPCCommon
import math
import time
@@ -1418,15 +1418,17 @@
def DoType_Add_Player_Xp(curPlayer, curMission, curActionNode):
#增加玩家相关值<Add_Player_XP value="玩家xp值"/>
- xpValue = curActionNode.GetAttribute("value")
-
- if xpValue != "":
- #设置玩家xp值
- openLV, addXPValue, maxXPValue = ReadChConfig.GetEvalChConfig('PlayerXP')
- curXp = min(int(xpValue), maxXPValue)
- curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, curXp)
- curPlayer.SetXP(curXp)
-
+ #===========================================================================
+ # xpValue = curActionNode.GetAttribute("value")
+ #
+ # if xpValue != "":
+ # #设置玩家xp值
+ # openLV, addXPValue, maxXPValue = ReadChConfig.GetEvalChConfig('PlayerXP')
+ # curXp = min(int(xpValue), maxXPValue)
+ # curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, curXp)
+ # curPlayer.SetXP(curXp)
+ #
+ #===========================================================================
return
#---------------------------------------------------------------------
@@ -2501,23 +2503,7 @@
# @return 返回值, 是否判断成功
# @remarks <QualityEquipCnt quality="装备品质" value="期望数量"/>
def ConditionType_Qualityequipcnt(curPlayer, curMission, curConditionNode):
- conditionValue = GameWorld.ToIntDef(curConditionNode.GetAttribute("value"), 0)
- quality = GameWorld.ToIntDef(curConditionNode.GetAttribute("quality"), 0)
- conditionType = curConditionNode.GetAttribute("type")
- curQualityEquipCnt = 0 #达到该品质的装备数量,品质高的兼容品质低的
- equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
- for equipIndex in range(0, equipPack.GetCount()):
- #备用装备栏不处理
- if equipIndex not in ShareDefine.RoleEquipType:
- continue
- curEquip = equipPack.GetAt(equipIndex)
- if curEquip.IsEmpty():
- continue
- if curEquip.GetItemQuality() < quality:
- continue
- curQualityEquipCnt += 1
-
- return QuestRunnerValue.GetEval(conditionType, curQualityEquipCnt, conditionValue)
+ return ChEquip.GetEquipOrangeCount(curPlayer)
##强化 X件装备强化到X级
# @param curPlayer 玩家实例
@@ -2572,6 +2558,18 @@
maxPassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV) # 历史最大过关数
return QuestRunnerValue.GetEval(conditionType, maxPassLV, conditionValue)
+##通关天星塔第X层
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curConditionNode 节点信息
+# @return 返回值, 是否判断成功
+# @remarks <Check_Skytower type="类型" value="值"/>
+def ConditionType_Check_Skytower(curPlayer, curMission, curConditionNode):
+ conditionValue = GameWorld.ToIntDef(curConditionNode.GetAttribute("value"), 0)
+ conditionType = curConditionNode.GetAttribute("type")
+ maxPassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_SkyTowerFloor) # 历史最大过关数
+ return QuestRunnerValue.GetEval(conditionType, maxPassLV, conditionValue)
+
def ConditionType_Get_Player_Coin(curPlayer, curMission, curConditionNode):
# 判断玩家已充值点券数
# <Get_Player_Coin type="great" value="0"/> 充值点券大于0代表已经首充过
@@ -2591,20 +2589,6 @@
return False
return petPack.GetCount() > 0
return PlayerPet.GetPetDataItemByNPCID(curPlayer, checkPetID) != None
-
-##竞技场是否达到多少名
-# @param curPlayer 玩家实例
-# @param curMission 任务实例
-# @param curConditionNode 节点信息
-# @return 返回值, 是否判断成功
-# @remarks <Check_Jjcorder type="类型" value="值"/>
-def ConditionType_Check_Jjcorder(curPlayer, curMission, curConditionNode):
- conditionValue = GameWorld.ToIntDef(curConditionNode.GetAttribute("value"), 0)
- conditionType = curConditionNode.GetAttribute("type")
- maxOrder = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadder_HistoryMaxOrder, 0,
- ChConfig.Def_PDictType_Default)
-
- return QuestRunnerValue.GetEval(conditionType, maxOrder, conditionValue)
#---------------------------------------------------------------------
##执行 扣除玩家镖车押金
@@ -3803,7 +3787,7 @@
# @param curActionNode节点信息
# @return 返回值无意义
# @remarks <Drop_Item id="物品ID" count="物品数量" starLV="星级" bind="是否绑定" isAuctionItem="是否拍品"
-# suite="是否套装化" addAttrLV="追加等级",isLucky="是否有幸运"
+# suite="是否套装化" addAttrLV="追加等级",isLucky="是否有幸运" isFakeDrop="是否假掉落"
# skillBoostEff="[技能效果增强索引, 值]", holeCount="孔数", isGreat="1", effIndex="1" , dropDist="掉落范围默认3"
# aroundPlayer="1" baseAttrRate="可强化的装备基础属性随机加强比例默认10000" greatAttr="[卓越属性列表]" />
def DoType_Drop_Item(curPlayer, curMission, curActionNode):
@@ -3855,7 +3839,14 @@
if not curItem:
GameWorld.Log('###创建地上物品异常,无此ID物品 = %s' % (curItemID))
return
-
+ isFakeDrop = GameWorld.ToIntDef(curActionNode.GetAttribute("isFakeDrop"), 0)
+ if isFakeDrop:#假掉落表现
+ dropItemDataStr = ChItem.GetMapDropItemDataStr(curItem)
+ #通知客户端
+ NPCCommon.SendVirtualItemDrop(curPlayer, curItemID, 0, 0, dropItemDataStr)
+ ItemControler.GivePlayerItemOrMail(curPlayer, [[curItemID, count, isAuctionItem]])
+ curItem.Clear()
+ return
if curActionNode.GetAttribute("aroundPlayer") == "1" or not curNPC:
posX, posY = curPlayer.GetPosX(), curPlayer.GetPosY()
else:
@@ -4343,63 +4334,11 @@
value = int(curActionNode.GetAttribute("value"))
curPlayerFreePoint = curPlayer.GetFreePoint()
curPlayer.SetFreePoint(curPlayerFreePoint + value)
-
+ # 更新开服活动灵根数据
+ OpenServerCampaign.UpdOpenServerCampaignLingGenData(curPlayer)
DataRecordPack.DR_Freepoint(curPlayer, "Event", value, {"MissionID":curMission.GetMissionID()})
-
+ return
-#---------------------------------------------------------------------
-#===============================================================================
-# PlayerJob_Warrior, # 剑士,
-# PlayerJob_Wizard, # 魔法师,
-# PlayerJob_Assassin, # 弓箭手,
-# PlayerJob_Chaplain, # 魔剑士,
-# PlayerJob_Knight, # 骑士
-# PlayerJob_ForceUser,# 魔导师
-# PlayerJob_BowMaster,# 圣射手
-#===============================================================================
-##玩家转职业
-# @param curPlayer 玩家实例
-# @param curMission 任务实例
-# @param curActionNode节点信息
-# @return 返回值无意义 <Change_Job checkLV="150" changeJob="4">
-def DoType_Change_Job(curPlayer, curMission, curActionNode):
- playerID = curPlayer.GetID()
-
- checkLV = GameWorld.ToIntDef(curActionNode.GetAttribute("checkLV"), 0)
- if not checkLV:
- GameWorld.Log("change job error! checkLV=%s" % checkLV, playerID)
- return
-
- curLV = curPlayer.GetLV()
- if curLV < checkLV:
- GameWorld.Log("change job error! checkLV=%s curlv=%s" % (checkLV, curLV), playerID)
- return
-
- changeJob = GameWorld.ToIntDef(curActionNode.GetAttribute("changeJob"), 0)
- #验证职业
- if not changeJob:
- GameWorld.Log("change job error! changeJob=%s" % changeJob, playerID)
- return
-
- #curJob = curPlayer.GetJob()
-
- #计算点数, 恢复等级差的点数
- #addPointDict = ReadChConfig.GetEvalChConfig('lvUp_Point')
-
- #addPoint = (curLV - checkLV)*(addPointDict.get(changeJob) - addPointDict.get(curJob))
-
- #设置玩家可加属性点
- #curPlayer.SetFreePoint(curPlayer.GetFreePoint() + addPoint)
- #DataRecordPack.DR_Freepoint(curPlayer, "ChangeJob", addPoint, {"job":changeJob})
-
- #设置职业
- curPlayer.SetJob(changeJob)
-
- playerControl = PlayerControl.PlayerControl(curPlayer)
- playerControl.RefreshAllState()
-
- PlayerReincarnation.DoPlayerReincarnation(curPlayer)
- return True
#---------------------------------------------------------------------
##删除物品
@@ -5075,7 +5014,8 @@
QuestCommon.SetPlayerMissionState(curPlayer, curMission, -1)
curMission.SetDescriptionIndex(len(curMissionData.QuestDescriptionList) - 1)
EventShell.NotifyOneMission(curPlayer, curMission, isNotifyAll=False)
-
+ # 完成任务事件 (配合前端,在通知任务状态后再触发)
+ GameFuncComm.DoFuncOpenLogic(curPlayer, [missionID])
#删除这个任务
#第一个任务决定是否要触发OnEnter事件, 所以不能删除
if missionID != 1 and diff_event == 0:
@@ -5221,16 +5161,18 @@
PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_DailyRunMission, addCnt)
PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_TaskCRun, addCnt)
PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_TaskCRun, addCnt)
- PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_RunTask, addCnt)
PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RunTask, addCnt)
PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RunTask, addCnt)
PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_RunTask, addCnt)
PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_RunTask, 1)
elif missionType == QuestCommon.Def_Mission_Type_RunFamily:
+ PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_RunTask, addCnt)
PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_FamilyRunMission, addCnt)
PlayerFamily.AddFamilyActivity(curPlayer, ShareDefine.FamilyActive_Task, addCnt)
else:
GameWorld.Log(' 跑环完成触发活跃度异常 missionType=%s'%missionType, curPlayer.GetPlayerID())
+ return
+ EventShell.EventRespons_AroundMission(curPlayer, missionType)
return
@@ -5273,66 +5215,6 @@
for lvInfo in runAroundReward.Rewards:
if curRewardLV >= lvInfo[0] and curRewardLV <= lvInfo[1]:
return runAroundReward.Rewards[lvInfo]
-
- return
-
-
-##转生后跑环奖励处理
-# @param curPlayer 玩家实例
-# @param curMission 任务实例
-# @return 返回值无意义
-# @remarks 转生后跑环奖励处理
-def __ReinAddRunAroundReward(curPlayer, curMission):
- runAroundReward = FindQuestFunc(curMission.GetMissionID()).RunAroundReward
-
- lvReward = GetRunAroundReward(curPlayer, runAroundReward, rewardLV=0, isMaxLV=True)
- if not lvReward:
- GameWorld.Log("转生跑环奖励错误 id = %d" % curMission.GetMissionID() , curPlayer.GetPlayerID())
- return
-
- #金钱奖励最大等级
- if lvReward.Money != 0:
- curMission.SetProperty(Def_Run_Around_Reward_Money, lvReward.Money)
-
-#---------------------------------------------------------------------
-##转生后每日任务新增奖励
-# @param curPlayer 玩家实例
-# @param curMission 任务实例
-# @param curActionNode节点信息
-# @return 返回值无意义
-# @remarks <Reincarnation_Add_Reward />
-def DoType_Reincarnation_Add_Reward(curPlayer, curMission, curActionNode):
- #没转生不处理
- curReinLV = curPlayer.GetReincarnationLv()
- if curReinLV < 1:
- return
-
- dayEventReward = FindQuestFunc(curMission.GetMissionID()).DayEventReward
-
- if dayEventReward == None:
- GameWorld.Log("转生奖励错误 id = %d" % curMission.GetMissionID() , curPlayer.GetPlayerID())
- return
-
- curRewardLV = dayEventReward.MaxLV
- familyLV = curPlayer.GetFamilyLV()
-
- #当前等级任务奖励结构体
- curLVDayEventReward = dayEventReward.Rewards[curRewardLV]
-
- #金钱奖励最大等级
- if curLVDayEventReward.Money != 0:
- curMission.SetProperty(Def_Day_Event_Reward_Money, curLVDayEventReward.Money)
-
- #家族活跃最大等级
- if curLVDayEventReward.PlayerFamilyActiveValue != 0:
- curMission.SetProperty(Def_Day_Event_Reward_Player_Family_ActiveValue, (curLVDayEventReward.PlayerFamilyActiveValue) * familyLV)
-
- #镖车压金最大等级
- if curLVDayEventReward.TruckMoney != 0:
- curMission.SetProperty(Def_Day_Event_Reward_Truck_Money, curLVDayEventReward.TruckMoney)
-
- #转生后跑环奖励处理
- __ReinAddRunAroundReward(curPlayer, curMission)
return
@@ -5390,7 +5272,6 @@
randStarList = eval(ReadChConfig.GetChConfig('RunAround_Star'))
aroundStar = GameWorld.GetResultByRandomList(randStarList, 1)
- #vipStar = PlayerCostVIP.GetRoundStar(curPlayer)
vipStar = 0
if vipStar > 0:
aroundStar = vipStar
@@ -5507,18 +5388,18 @@
expPoint = curMission.GetProperty(Def_Run_Around_Reward_ExpPoint)
exp = expPoint * ChConfig.Def_PerPointValue + exp
money = curMission.GetProperty(Def_Run_Around_Reward_Money)
-
+ moneyDict = {}
if exp != 0:
playerControl.AddExp(exp)
#PlayerControl.NotifyCode(curPlayer, 'GeRen_lhs_0', [exp])
-
- addDataDict = {ChConfig.Def_Give_Reason_SonKey:"Run"}
- PlayerControl.GiveMoney(curPlayer, runAroundReward.MoneyType, money, ChConfig.Def_GiveMoney_Mission, addDataDict, False)
-
+ if money:
+ addDataDict = {ChConfig.Def_Give_Reason_SonKey:"Run"}
+ PlayerControl.GiveMoney(curPlayer, runAroundReward.MoneyType, money, ChConfig.Def_GiveMoney_Mission, addDataDict, False)
+ moneyDict[runAroundReward.MoneyType] = money
familyHornor = curMission.GetProperty(Def_Run_Around_Reward_FamilyHornor)
if familyHornor:
PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, familyHornor, True, ShareDefine.Def_AddFAVReason_DoFamilyMisson, True)
-
+ moneyDict[ShareDefine.TYPE_Price_Family_Contribution] = familyHornor
item_id = curMission.GetProperty(Def_Day_Event_Reward_Item_Id)
item_count = curMission.GetProperty(Def_Day_Event_Reward_Item_Count)
@@ -5536,7 +5417,7 @@
GameWorld.DebugLog("任务:%d 获得经验:%d,钱=%s,物品ID=%s,物品数量=%s"
% (curMission.GetMissionID(), exp, money, item_id, item_count))
- FBLogic.DoFB_OnFinishRunAroundTask(curPlayer, curMissionID, exp, {runAroundReward.MoneyType:money}, itemInfo)
+ FBLogic.DoFB_OnFinishRunAroundTask(curPlayer, curMissionID, exp, moneyDict, itemInfo)
#触发OSS记录
if GameWorld.IsMissonDR(curPlayer):
@@ -6086,18 +5967,20 @@
if questID != 0:
curMission = curPlayer.FindMission(questID)
classLV = GameWorld.ToIntDef(curActionNode.GetAttribute("classLV"), 0)
- if not classLV:
- return
+ equipMaxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv')
+ classlVList = [classLV] if classLV else range(1, equipMaxClasslv+1)
+
needPlusLV = GameWorld.ToIntDef(curActionNode.GetAttribute("plusLV"), 0)
totalCnt = 0
equipPlaceList = ChConfig.Pack_EquipPart_CanPlusStar[IPY_GameWorld.rptEquip]
for equipPlace in equipPlaceList:
- ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
- if not ipyData:
- continue
- partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, ipyData.GetGridIndex())
- if partStarLV >= needPlusLV:
- totalCnt += 1
+ for classLV in classlVList:
+ ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
+ if not ipyData:
+ continue
+ partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, ipyData.GetGridIndex())
+ if partStarLV >= needPlusLV:
+ totalCnt += 1
curMission.SetProperty(key, totalCnt)
return
@@ -6647,52 +6530,6 @@
return
-
-
-#---------------------------------------------------------------------
-##执行玩家转生
-# @param curPlayer 玩家实例
-# @param curMission 任务实例
-# @param curActionNode节点信息
-# @return 返回值无意义
-# @remarks <Player_Reincarnation />
-def DoType_Player_Reincarnation(curPlayer, curMission, curActionNode):
- PlayerReincarnation.DoPlayerReincarnation(curPlayer)
- return
-
-#---------------------------------------------------------------------
-##判断玩家是否转生
-# @param curPlayer 玩家实例
-# @param curMission 任务实例
-# @param curConditionNode节点信息
-# @return 返回值, 是否通过检查
-# @remarks <Player_Is_Reincarnation result="期望的结果" />
-def ConditionType_Player_Is_Reincarnation(curPlayer, curMission, curConditionNode):
- #<Player_Is_Reincarnation result=""> 0:没转,1:有转
- result = GameWorld.ToIntDef(curConditionNode.GetAttribute("result"), 0)
- #转生等级
- curReinLV = curPlayer.GetReincarnationLv()
- if curReinLV > 0:
- return True == result
- else:
- return False == result
-
- return
-
-##判断玩家转生数
-# @param curPlayer 玩家实例
-# @param curMission 任务实例
-# @param curConditionNode节点信息
-# @return 返回值, 是否通过检查
-# @remarks <Player_Reincarnation result="期望的结果" />
-def ConditionType_Player_Reincarnation(curPlayer, curMission, curConditionNode):
- #<Player_Reincarnation result="1"> # 玩家是否1转
- result = GameWorld.ToIntDef(curConditionNode.GetAttribute("result"), 0)
- #转生等级
- curReinLV = curPlayer.GetReincarnationLv()
- return curReinLV == result
-
-
#---------------------------------------------------------------------
##给予玩家技能
# @param curPlayer 玩家实例
@@ -7228,6 +7065,61 @@
realmlv = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
return curPlayer.GetOfficialRank() >= realmlv
+##灵根品级是否达到X级
+# @param None
+# @return None <Linggenqualitylv attrid="灵根ID" value="期望等级"/>
+def ConditionType_Linggenqualitylv(curPlayer, curMission, curActionNode):
+ attrID = GameWorld.ToIntDef(curActionNode.GetAttribute("attrid"), 0)
+ qualityLV = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ funcDict = {ShareDefine.Def_Effect_Metal:lambda curObj:PlayerControl.GetMetalQualityLV(curObj),
+ ShareDefine.Def_Effect_Wood:lambda curObj:PlayerControl.GetWoodQualityLV(curObj),
+ ShareDefine.Def_Effect_Water:lambda curObj:PlayerControl.GetWaterQualityLV(curObj),
+ ShareDefine.Def_Effect_Fire:lambda curObj:PlayerControl.GetFireQualityLV(curObj),
+ ShareDefine.Def_Effect_Earth:lambda curObj:PlayerControl.GetEarthQualityLV(curObj),
+ }
+ curQualityLV = 0
+ if attrID in funcDict:
+ curQualityLV = funcDict[attrID](curPlayer)
+ return curQualityLV >= qualityLV
+
+
+##X条灵根品级达到X级
+# @param None
+# @return None <Linggenqualitylvcnt qualitylv="品级" value="条数"/>
+def ConditionType_Linggenqualitylvcnt(curPlayer, curMission, curActionNode):
+ qualityLV = GameWorld.ToIntDef(curActionNode.GetAttribute("qualitylv"), 0)
+ cnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ return GetLinggenQualitylvCnt(curPlayer, qualityLV) >= cnt
+
+##设置达到X品灵根数量
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Linggenqualitylvcnt key="" qualitylv="品级"/>
+def DoType_Set_Linggenqualitylvcnt(curPlayer, curMission, curActionNode):
+ key = curActionNode.GetAttribute("key")
+ questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+ qualityLV = GameWorld.ToIntDef(curActionNode.GetAttribute("qualitylv"), 0)
+ if questID != 0:
+ curMission = curPlayer.FindMission(questID)
+ curMission.SetProperty(key, GetLinggenQualitylvCnt(curPlayer, qualityLV))
+ return
+
+def GetLinggenQualitylvCnt(curPlayer, qualityLV):
+ # 获取达到X品的灵根数量
+ funcDict = {ShareDefine.Def_Effect_Metal: lambda curObj: PlayerControl.GetMetalQualityLV(curObj),
+ ShareDefine.Def_Effect_Wood: lambda curObj: PlayerControl.GetWoodQualityLV(curObj),
+ ShareDefine.Def_Effect_Water: lambda curObj: PlayerControl.GetWaterQualityLV(curObj),
+ ShareDefine.Def_Effect_Fire: lambda curObj: PlayerControl.GetFireQualityLV(curObj),
+ ShareDefine.Def_Effect_Earth: lambda curObj: PlayerControl.GetEarthQualityLV(curObj),
+ }
+ curCnt = 0
+ for attrID, func in funcDict.items():
+ if func(curPlayer) >= qualityLV:
+ curCnt += 1
+ return curCnt
+
##X级通关X层娲皇遗迹
# @param None
@@ -7245,7 +7137,91 @@
totallv = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
return PlayerHorse.GetHorseSumLV(curPlayer) >= totallv
+##某主技能对应专精技能达到激活X等级的数量是否达到
+# @param None
+# @return None <Elementskillcnt value="cnt" mainskill="[]" activelv="" elementtype="专精类型"/>
+def ConditionType_Elementskillcnt(curPlayer, curMission, curActionNode):
+ cnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ mainskill = curActionNode.GetAttribute("mainskill")
+ mainSkillIDList = eval(mainskill) if mainskill else []
+ activeLV = GameWorld.ToIntDef(curActionNode.GetAttribute("activelv"), 1)
+ elementType = GameWorld.ToIntDef(curActionNode.GetAttribute("elementtype"), 0)
+ return SkillShell.GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV, elementType) >= cnt
+##设置已选择的专精技能数量
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Elementskillcnt key="" mainskill="[]" activelv="" elementtype="专精类型"/>
+def DoType_Set_Elementskillcnt(curPlayer, curMission, curActionNode):
+ key = curActionNode.GetAttribute("key")
+ questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+ mainskill = curActionNode.GetAttribute("mainskill")
+ mainSkillIDList = eval(mainskill) if mainskill else []
+ activeLV = GameWorld.ToIntDef(curActionNode.GetAttribute("activelv"), 1)
+ if questID != 0:
+ curMission = curPlayer.FindMission(questID)
+ elementType = GameWorld.ToIntDef(curActionNode.GetAttribute("elementtype"), 0)
+ curMission.SetProperty(key, SkillShell.GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV, elementType))
+ return
+
+##设置符合条件的已穿基础装备数量
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Baseequipcnt key="" classlv="" color="" suite="[suiteID,..]"/>
+def DoType_Set_Baseequipcnt(curPlayer, curMission, curActionNode):
+ classLV = GameWorld.ToIntDef(curActionNode.GetAttribute("classlv"), 0)
+ color = GameWorld.ToIntDef(curActionNode.GetAttribute("color"), 0)
+ suite = curActionNode.GetAttribute("suite")
+ suiteIDList = eval(suite) if suite else []
+
+ haveCnt = __GetBaseequipcnt(curPlayer, classLV, color, suiteIDList)
+
+ key = curActionNode.GetAttribute("key")
+ questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+ if questID != 0:
+ curMission = curPlayer.FindMission(questID)
+ curMission.SetProperty(key, haveCnt)
+ return
+def __GetBaseequipcnt(curPlayer, classLV, color, suiteIDList, needCnt=0):
+ #classLV 为0代表任意阶
+ haveCnt = 0
+ equipMaxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv')
+ classlVList = [classLV] if classLV else range(1, equipMaxClasslv+1)
+
+ equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+ for place in ChConfig.EquipPlace_Base:
+ for classlv in classlVList:
+ ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, place)
+ if not ipyData:
+ continue
+ gridIndex = ipyData.GetGridIndex()
+ curEquip = equipPack.GetAt(gridIndex)
+ if not ItemCommon.CheckItemCanUse(curEquip):
+ continue
+ if curEquip.GetItemColor() < color:
+ continue
+ if suiteIDList and curEquip.GetSuiteID() not in suiteIDList:
+ continue
+ haveCnt += 1
+ if needCnt and haveCnt >= needCnt:
+ break
+ return haveCnt
+
+##判断符合条件的已穿基础装备数量
+# @param None
+# @return None <Baseequipcnt cnt="cnt" classlv="" color="" suite="[suiteID,..]"/>
+def ConditionType_Baseequipcnt(curPlayer, curMission, curActionNode):
+ totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("cnt"), 0)
+ classLV = GameWorld.ToIntDef(curActionNode.GetAttribute("classlv"), 0)
+ color = GameWorld.ToIntDef(curActionNode.GetAttribute("color"), 0)
+ suite = curActionNode.GetAttribute("suite")
+ suiteIDList = eval(suite) if suite else []
+ haveCnt = __GetBaseequipcnt(curPlayer, classLV, color, suiteIDList, totalcnt)
+ return haveCnt >= totalcnt
##法宝激活个数
# @param None
@@ -7254,6 +7230,12 @@
totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
return PlayerMagicWeapon.GetMWActiveCntTotal(curPlayer) >= totalcnt
+##总强化进化等级
+# @param None
+# @return None <Totalplusevolvelv value="cnt"/>
+def ConditionType_Totalplusevolvelv(curPlayer, curMission, curActionNode):
+ totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ return ChEquip.GetTotalPlusEvolveLV(curPlayer) >= totalcnt
##总强化等级
# @param None
# @return None <Totalpluslv value="cnt"/>
@@ -7266,18 +7248,18 @@
# @return None <Classlvpluslv classLV="" plusLV="" value="cnt"/>
def ConditionType_Classlvpluslv(curPlayer, curMission, curActionNode):
classLV = GameWorld.ToIntDef(curActionNode.GetAttribute("classLV"), 0)
- if not classLV:
- return
+ classLVList = [classLV] if classLV else xrange(1, IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') + 1)
needPlusLV = GameWorld.ToIntDef(curActionNode.GetAttribute("plusLV"), 0)
totalCnt = 0
equipPlaceList = ChConfig.Pack_EquipPart_CanPlusStar[IPY_GameWorld.rptEquip]
for equipPlace in equipPlaceList:
- ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
- if not ipyData:
- continue
- partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, ipyData.GetGridIndex())
- if partStarLV >= needPlusLV:
- totalCnt += 1
+ for classLV in classLVList:
+ ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
+ if not ipyData:
+ continue
+ partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, ipyData.GetGridIndex())
+ if partStarLV >= needPlusLV:
+ totalCnt += 1
return totalCnt >= GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
##装备总星级
@@ -7285,7 +7267,62 @@
# @return None <Equiptotalstar value="cnt"/>
def ConditionType_Equiptotalstar(curPlayer, curMission, curActionNode):
totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
- return #ChEquip.GetTotalEquipStars(curPlayer) >= totalcnt
+ return ChEquip.GetTotalEquipStars(curPlayer) >= totalcnt
+
+##装备宝石总等级
+# @param None
+# @return None <Equiptotalstone value="cnt"/>
+def ConditionType_Equiptotalstone(curPlayer, curMission, curActionNode):
+ totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ return Operate_EquipStone.GetTotalStoneLV(curPlayer) >= totalcnt
+
+##已镶嵌X等级宝石数量
+# @param None
+# @return None <Equipstonecnt value="cnt" stoneLV=""/>
+def ConditionType_Equipstonecnt(curPlayer, curMission, curActionNode):
+ totalCnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ stoneLV = GameWorld.ToIntDef(curActionNode.GetAttribute("stoneLV"), 0)
+ return Operate_EquipStone.GetStoneCntByLV(curPlayer, stoneLV) >= totalCnt
+
+##设置已镶嵌X等级宝石数量
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Equipstonecnt key="" stoneLV="宝石等级"/>
+def DoType_Set_Equipstonecnt(curPlayer, curMission, curActionNode):
+ key = curActionNode.GetAttribute("key")
+ questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+ stoneLV = GameWorld.ToIntDef(curActionNode.GetAttribute("stoneLV"), 1)
+ if questID != 0:
+ curMission = curPlayer.FindMission(questID)
+ curMission.SetProperty(key, Operate_EquipStone.GetStoneCntByLV(curPlayer, stoneLV))
+ return
+
+##技能总等级
+# @param None
+# @return None <Totalskilllv value="" funcType="" skilllv=""/>
+def ConditionType_Totalskilllv(curPlayer, curMission, curActionNode):
+ totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ funcType = GameWorld.ToIntDef(curActionNode.GetAttribute("funcType"), 0)
+ skilllv = GameWorld.ToIntDef(curActionNode.GetAttribute("skilllv"), 0)
+ return SkillShell.GetSkillCntByFunc(curPlayer, funcType, skilllv) >= totalcnt
+
+##设置已达到X等级的技能数量
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Skillcnt key="" funcType="" skilllv=""/>
+def DoType_Set_Skillcnt(curPlayer, curMission, curActionNode):
+ key = curActionNode.GetAttribute("key")
+ funcType = GameWorld.ToIntDef(curActionNode.GetAttribute("funcType"), 0)
+ skilllv = GameWorld.ToIntDef(curActionNode.GetAttribute("skilllv"), 0)
+ questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+ if questID != 0:
+ curMission = curPlayer.FindMission(questID)
+ curMission.SetProperty(key, SkillShell.GetSkillCntByFunc(curPlayer, funcType, skilllv))
+ return
##激活法宝,确认与成就逻辑后使用
# @param None
@@ -7293,19 +7330,15 @@
def DoType_Active_Magicweapon(curPlayer, curMission, curActionNode):
mwID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
PlayerMagicWeapon.DoActiveMW(curPlayer, mwID)
- PlayerMagicWeapon.NotifyMagicWeapon(curPlayer)
-
return
## 人物隐身 <Visible id="0隐身1现身"/>
def DoType_Visible(curPlayer, curMission, curActionNode):
visible = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
if visible:
- curPlayer.SetVisible(True)
- curPlayer.SetSight(ChConfig.Def_PlayerSight_Default)
+ PlayerControl.SetPlayerSightLevel(curPlayer, 0)
else:
- curPlayer.SetVisible(False)
- curPlayer.SetSight(0)
+ PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
return
@@ -7322,3 +7355,96 @@
return
+def DoType_Setfairydomain(curPlayer, curMission, curActionNode):
+ GameWorld.DebugLog("DoType_Setfairydomain", curPlayer.GetID())
+ ## 任务开启缥缈仙域 (做标记可寻访) <Setfairydomain/>
+ if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState):
+ #若已在寻访中则先结束寻访
+ PlayerFairyDomain.EndFairyDomain(curPlayer)
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainState, 2)
+ PlayerFairyDomain.NotifyVisitFairyDomainInfo(curPlayer)
+ return
+
+##神兵等级判断
+# @param None
+# @return None <Godweaponlv value="lv" weapontype=""/>
+def ConditionType_Godweaponlv(curPlayer, curMission, curActionNode):
+ lv = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ weapontype = GameWorld.ToIntDef(curActionNode.GetAttribute("weapontype"), 0)
+ return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % weapontype) >= lv
+
+##设置今日活跃度
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Dayactivity key=""/>
+def DoType_Set_Dayactivity(curPlayer, curMission, curActionNode):
+ key = curActionNode.GetAttribute("key")
+ questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+ if questID != 0:
+ curMission = curPlayer.FindMission(questID)
+ curMission.SetProperty(key, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Activity_TotalPoint, 0))
+ return
+
+##今日活跃度判断
+# @param None
+# @return None <Check_Dayactivity value="活跃度"/>
+def ConditionType_Check_Dayactivity(curPlayer, curMission, curActionNode):
+ value = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Activity_TotalPoint, 0) >= value
+
+
+##设置历史活跃度
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Historyactivity key=""/>
+def DoType_Set_Historyactivity(curPlayer, curMission, curActionNode):
+ key = curActionNode.GetAttribute("key")
+ questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+ if questID != 0:
+ curMission = curPlayer.FindMission(questID)
+ curMission.SetProperty(key, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityHistoryPoint, 0))
+ return
+
+##历史活跃度判断
+# @param None
+# @return None <Check_Historyactivity value="活跃度"/>
+def ConditionType_Check_Historyactivity(curPlayer, curMission, curActionNode):
+ value = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityHistoryPoint, 0) >= value
+
+##设置仙宝寻主领奖进度
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Xbxz key="" mwid="法宝ID"/>
+def DoType_Set_Xbxz(curPlayer, curMission, curActionNode):
+ key = curActionNode.GetAttribute("key")
+ questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+ mwID = GameWorld.ToIntDef(curActionNode.GetAttribute("mwid"), 0)
+ if questID != 0:
+ curMission = curPlayer.FindMission(questID)
+ curMission.SetProperty(key, PlayerMagicWeapon.GetXBXZAwardProgress(curPlayer, mwID))
+ return
+
+##仙宝寻主进度判断
+# @param None
+# @return None <Check_Xbxz value="数量" mwid="法宝ID"/>
+def ConditionType_Check_Xbxz(curPlayer, curMission, curActionNode):
+ value = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ mwID = GameWorld.ToIntDef(curActionNode.GetAttribute("mwid"), 0)
+ return PlayerMagicWeapon.GetXBXZAwardProgress(curPlayer, mwID) >= value
+
+##商城表商品购买记录判断(只适用购买次数不重置的)
+# @param None
+# @return None <Check_Buyshopitem value="数量" index="商城表唯一ID"/>
+def ConditionType_Check_Buyshopitem(curPlayer, curMission, curActionNode):
+ value = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ itemIndex = GameWorld.ToIntDef(curActionNode.GetAttribute("index"), 0)
+ curDayBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShopItemDayBuyCnt % itemIndex)
+ return curDayBuyCnt >= value
\ No newline at end of file
--
Gitblit v1.8.0