From b965081066ea579c45c73f08cd9cd61bc157ac9f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 09 五月 2019 11:15:45 +0800
Subject: [PATCH] 6459 【后端】【2.0】缥缈仙域开发单(防范跨服妖王关闭线路时导致的报错)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py | 500 +++++++++++++++++++++++++------------------------------
1 files changed, 228 insertions(+), 272 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 9db6d33..af77405 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,22 +48,20 @@
import ChEquip
import PlayerActivity
import PlayerSuccess
-import EventReport
-#import PlayerCostVIP
-import GameFuncComm
import IpyGameDataPY
-import ShopItemManage
import PlayerPet
import PlayerArrestTask
import PlayerMagicWeapon
import PlayerBossReborn
import PlayerFairyCeremony
import PlayerNewFairyCeremony
+import Operate_EquipStone
import PlayerWeekParty
+import PlayerFairyDomain
import PlayerActLogin
import PlayerHorse
import FBCommon
-import PyGameData
+import NPCCommon
import math
import time
@@ -1419,15 +1416,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
#---------------------------------------------------------------------
@@ -2509,7 +2508,7 @@
equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
for equipIndex in range(0, equipPack.GetCount()):
#备用装备栏不处理
- if equipIndex not in ChConfig.Type_Equip_CanTake :
+ if equipIndex not in ShareDefine.RoleEquipType:
continue
curEquip = equipPack.GetAt(equipIndex)
if curEquip.IsEmpty():
@@ -2534,7 +2533,7 @@
totalPlusLV = 0
for packType, equipPartIndexList in ChConfig.Pack_EquipPart_CanPlusStar.items():
for i in equipPartIndexList:
- partStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, i)
+ partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, i)
totalPlusLV += partStarLV
@@ -2545,7 +2544,7 @@
# equipPartIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(IPY_GameWorld.rptEquip, [])
# for i in equipPartIndexList:
# #统计全身强化等级
-# partStarLV = ChEquip.GetEquipPartStarLV(curPlayer, IPY_GameWorld.rptEquip, i)
+# partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, i)
# if partStarLV >= star:
# partCnt +=1
#GameWorld.Log('star=%s,conditionValue=%s,partCnt=%s,%s'%(star,conditionValue,partCnt,QuestRunnerValue.GetEval(conditionType, partCnt, conditionValue)))
@@ -2573,6 +2572,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_Zhuxiantower type="类型" value="值"/>
+def ConditionType_Check_Zhuxiantower(curPlayer, curMission, curConditionNode):
+ conditionValue = GameWorld.ToIntDef(curConditionNode.GetAttribute("value"), 0)
+ conditionType = curConditionNode.GetAttribute("type")
+ maxPassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ZhuXianTowerPassLV) # 历史最大过关数
+ return QuestRunnerValue.GetEval(conditionType, maxPassLV, conditionValue)
+
def ConditionType_Get_Player_Coin(curPlayer, curMission, curConditionNode):
# 判断玩家已充值点券数
# <Get_Player_Coin type="great" value="0"/> 充值点券大于0代表已经首充过
@@ -2592,42 +2603,6 @@
return False
return petPack.GetCount() > 0
return PlayerPet.GetPetDataItemByNPCID(curPlayer, checkPetID) != None
-
-def ConditionType_Is_Buy_Tehuiitem(curPlayer, curMission, curConditionNode):
- # 判断是否购买过特惠商店物品
- # <Is_Buy_Tehuiitem shopID="1007" itemShopIndex="0,1,2"/> shopID暂定需指定商店ID, itemShopIndex可指定多个索引, 中间英文逗号隔开
- shopID = GameWorld.ToIntDef(curConditionNode.GetAttribute("shopID"), 0)
- if not shopID:
- return False
- indexList = []
- indexInfo = curConditionNode.GetAttribute("itemShopIndex")
- if indexInfo != '':
- indexList = eval('[' + indexInfo + ']')
- if not indexList:
- shopItemList = ShopItemManage.GetShopItemList(shopID)
- indexList = range(len(shopItemList))
- if not indexList:
- GameWorld.DebugLog("需指定判断的特惠商店物品索引编号!indexInfo=%s" % indexInfo)
- return False
- for i in indexList:
- buyCnt = ShopItemManage.__GetPlayerShopItemBuyCnt(curPlayer, shopID, i)
- if buyCnt > 0:
- return True
- return False
-
-##竞技场是否达到多少名
-# @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)
#---------------------------------------------------------------------
##执行 扣除玩家镖车押金
@@ -2839,10 +2814,10 @@
# @param bind 绑定
# @param packList 背包索引
# @return 背包索引,-1表示没有可放的背包
-def GetCanPutInPackIndex(curPlayer, itemID, itemCount, bind, packList):
+def GetCanPutInPackIndex(curPlayer, itemID, itemCount, bind, packList, isAuctionItem=False):
itemControl = ItemControler.PlayerItemControler(curPlayer)
for index in packList:
- if not itemControl.CanPutInItem(index, itemID, itemCount, bind):
+ if not itemControl.CanPutInItem(index, itemID, itemCount, isAuctionItem):
continue
return index
@@ -2866,7 +2841,7 @@
itemStarLV=0, bind=False, property=None,
packList=[IPY_GameWorld.rptItem], isSuite=False,
addAttrLV=0, isLucky=False, skillBoostEff=[], holeCount=0,
- equipIndex= -1, isGreat=0, baseAttrRate=ShareDefine.Def_MaxRateValue, greatAttrList=[]):
+ equipIndex= -1, isGreat=0, baseAttrRate=ShareDefine.Def_MaxRateValue, greatAttrList=[], isAuctionItem=False):
# if PlayerFamily.DoAddFamilyBossFoodEx(curPlayer, itemID, itemCount, ShareDefine.Def_AddFAVReason_DoFamilyMisson):
# #仙盟兽粮自动使用
# return
@@ -2875,13 +2850,13 @@
itemControl = ItemControler.PlayerItemControler(curPlayer)
#获得可放入的背包索引
- packIndex = GetCanPutInPackIndex(curPlayer, itemID, itemCount, bind, packList)
+ packIndex = GetCanPutInPackIndex(curPlayer, itemID, itemCount, bind, packList, isAuctionItem)
if packIndex == -1:
return
#设置物品属性
- curSingleItem = CreatMissionItem(itemID, itemStarLV, addAttrLV, isSuite, bind,
- isLucky, skillBoostEff, itemCount, holeCount, isGreat, baseAttrRate, greatAttrList)
+ curSingleItem = CreatMissionItem(curPlayer, itemID, itemStarLV, addAttrLV, isSuite, bind,
+ isLucky, skillBoostEff, itemCount, holeCount, isGreat, baseAttrRate, greatAttrList, isAuctionItem=isAuctionItem)
if not curSingleItem:
return
@@ -2900,15 +2875,15 @@
if equipIndex == 0:
GameWorld.ErrLog("任务赠送装备位置错误 equipIndex=-1")
return
-
- if ItemCommon.CheckHasEquip(curPlayer, IPY_GameWorld.rptEquip, equipIndex):
+ equipPackIndex = ItemCommon.GetEquipPackIndex(curSingleItem)
+ if ItemCommon.CheckHasEquip(curPlayer, IPY_GameWorld.rptEquip, equipPackIndex):
#物品已存在直接给背包
if not itemControl.PutInItem(IPY_GameWorld.rptItem, curSingleItem, event=["AddEventItem", False, {'MissionID':missionID}]):
GameWorld.Log('###任务 = %s给予物品异常, %s, %s' % (missionID, itemID, itemCount), curPlayer.GetPlayerID())
curSingleItem.Clear()
return
else:
- ChEquip.DoPlayerEquipItem(curPlayer, curSingleItem, equipIndex, 0)
+ ChEquip.DoPlayerEquipItem(curPlayer, curSingleItem,equipPackIndex, 0)
#ObtainRes01 <n>获得</n><Info Type="Item" Name="Name" ID="{%S1%}"/><n>×</n><n>{%S2%}!</n>
elif not itemControl.PutInItem(packIndex, curSingleItem, event=["AddEventItem", False, {'MissionID':missionID}]):
@@ -2930,26 +2905,23 @@
# @param itemCount: 物品数量
# @param baseAttrRate: 任务创建的物品默认的基础属性随机值为10000
# @return None
-def CreatMissionItem(itemID, starLV=0, addAttrLV=0, isSuite=False, bind=False,
+def CreatMissionItem(curPlayer, itemID, starLV=0, addAttrLV=0, isSuite=False, bind=False,
isLucky=0, skillBoostEff=[], itemCount=1, holeCount=0,
- isGreat=0, baseAttrRate=ShareDefine.Def_MaxRateValue, greatAttrList=[]):
+ isGreat=0, baseAttrRate=ShareDefine.Def_MaxRateValue, greatAttrList=[], isAuctionItem=False):
- curSingleItem = ItemControler.GetOutPutItemObj(itemID)
+ curSingleItem = ItemControler.GetOutPutItemObj(itemID, itemCount, isAuctionItem, curPlayer=curPlayer)
if not curSingleItem:
GameWorld.Log('###创造任务物品失败, itemID = %s' % (itemID))
return
- tmpEquipData = ItemControler.SingleEquipTmpData()
- tmpEquipData.starLV = starLV
- tmpEquipData.holeCnt = holeCount
- tmpEquipData.isSuite = isSuite
- tmpEquipData.isBind = bind
+ #tmpEquipData = ItemControler.SingleEquipTmpData()
+ #tmpEquipData.starLV = starLV
+ #tmpEquipData.holeCnt = holeCount
+ #tmpEquipData.isSuite = isSuite
+ #tmpEquipData.isBind = bind
- ChItem.EquipAddAdditionEx(curSingleItem, tmpEquipData)
-
- #设置数量
- ItemControler.SetItemCount(curSingleItem, itemCount)
+ #ChItem.EquipAddAdditionEx(curSingleItem, tmpEquipData)
return curSingleItem
@@ -3734,7 +3706,7 @@
# @param curMission 任务实例
# @param curActionNode节点信息
# @return 返回值无意义
-# @remarks <Add_Item id="物品ID" count="物品数量" starLV="星级" bind="是否绑定"
+# @remarks <Add_Item id="物品ID" count="物品数量" starLV="星级" bind="是否绑定" isAuctionItem="是否拍品"
# packtype="1,2背包索引" equipIndex="装备位置" suite="是否套装化" addAttrLV="追加等级",isLucky="是否有幸运"
# skillBoostEff="[技能效果增强索引, 值]", holeCount="孔数" isGreat="1" baseAttrRate="可强化的装备基础属性随机加强比例默认10000"
# greatAttr="[卓越属性列表]" />
@@ -3755,10 +3727,13 @@
itemStarLV = GameWorld.ToIntDef(curActionNode.GetAttribute("starLV"), 0)
#物品是否绑定
- bind = True if curActionNode.GetAttribute("bind") else False
-
+ bind = True if GameWorld.ToIntDef(curActionNode.GetAttribute("bind")) else False
+
#物品是否套装化
isSuite = True if curActionNode.GetAttribute("suite") else False
+
+ #是否拍品
+ isAuctionItem = GameWorld.ToIntDef(curActionNode.GetAttribute("isAuctionItem"), 0)
#追加
addAttrLV = GameWorld.ToIntDef(curActionNode.GetAttribute("addAttrLV"), 0)
@@ -3786,7 +3761,7 @@
baseAttrRate = GameWorld.ToIntDef(curActionNode.GetAttribute("baseAttrRate"), ShareDefine.Def_MaxRateValue)
AddEventItem(curPlayer, curMission, curItemID, curItemCount, None, itemStarLV,
bind, False, packTypeList, isSuite, addAttrLV, isLucky,
- skillBoostEff, holeCount, equipIndex, isGreat, baseAttrRate, greatAttrList)
+ skillBoostEff, holeCount, equipIndex, isGreat, baseAttrRate, greatAttrList, isAuctionItem=isAuctionItem)
#---------------------------------------------------------------------
@@ -3825,8 +3800,8 @@
# @param curMission 任务实例
# @param curActionNode节点信息
# @return 返回值无意义
-# @remarks <Drop_Item id="物品ID" count="物品数量" starLV="星级" bind="是否绑定"
-# suite="是否套装化" addAttrLV="追加等级",isLucky="是否有幸运"
+# @remarks <Drop_Item id="物品ID" count="物品数量" starLV="星级" bind="是否绑定" isAuctionItem="是否拍品"
+# suite="是否套装化" addAttrLV="追加等级",isLucky="是否有幸运" isFakeDrop="是否假掉落"
# skillBoostEff="[技能效果增强索引, 值]", holeCount="孔数", isGreat="1", effIndex="1" , dropDist="掉落范围默认3"
# aroundPlayer="1" baseAttrRate="可强化的装备基础属性随机加强比例默认10000" greatAttr="[卓越属性列表]" />
def DoType_Drop_Item(curPlayer, curMission, curActionNode):
@@ -3845,6 +3820,8 @@
isSuite = GameWorld.ToIntDef((curActionNode.GetAttribute("suite")), 0)
bind = GameWorld.ToIntDef((curActionNode.GetAttribute("bind")), 1)
+
+ isAuctionItem = GameWorld.ToIntDef((curActionNode.GetAttribute("isAuctionItem")), 0)
#追加
addAttrLV = GameWorld.ToIntDef(curActionNode.GetAttribute("addAttrLV"), 0)
@@ -3870,14 +3847,21 @@
baseAttrRate = GameWorld.ToIntDef(curActionNode.GetAttribute("baseAttrRate"), ShareDefine.Def_MaxRateValue)
#设置物品属性
- curItem = CreatMissionItem(curItemID, starLV, addAttrLV, isSuite, bind,
- isLucky, skillBoostEff, count, holeCount, isGreat, baseAttrRate, greatAttrList)
+ curItem = CreatMissionItem(curPlayer, curItemID, starLV, addAttrLV, isSuite, bind,
+ isLucky, skillBoostEff, count, holeCount, isGreat, baseAttrRate, greatAttrList, isAuctionItem=isAuctionItem)
if not curItem:
GameWorld.Log('###创建地上物品异常,无此ID物品 = %s' % (curItemID))
return
-
- if curActionNode.GetAttribute("aroundPlayer") == "1":
+ 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:
posX, posY = curNPC.GetPosX(), curNPC.GetPosY()
@@ -4366,61 +4350,8 @@
curPlayer.SetFreePoint(curPlayerFreePoint + value)
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
#---------------------------------------------------------------------
##删除物品
@@ -5252,6 +5183,8 @@
PlayerFamily.AddFamilyActivity(curPlayer, ShareDefine.FamilyActive_Task, addCnt)
else:
GameWorld.Log(' 跑环完成触发活跃度异常 missionType=%s'%missionType, curPlayer.GetPlayerID())
+ return
+ EventShell.EventRespons_AroundMission(curPlayer, missionType)
return
@@ -5294,66 +5227,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
@@ -5411,7 +5284,6 @@
randStarList = eval(ReadChConfig.GetChConfig('RunAround_Star'))
aroundStar = GameWorld.GetResultByRandomList(randStarList, 1)
- #vipStar = PlayerCostVIP.GetRoundStar(curPlayer)
vipStar = 0
if vipStar > 0:
aroundStar = vipStar
@@ -6095,6 +5967,34 @@
curMission.SetProperty(key, PlayerHorse.GetHorseSumLV(curPlayer))
return
+##设置某阶达到强化等级的件数
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Pluslvpartcnt key="" id="" classLV="" plusLV=""/>
+def DoType_Set_Pluslvpartcnt(curPlayer, curMission, curActionNode):
+ key = curActionNode.GetAttribute("key")
+ questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+ if questID != 0:
+ curMission = curPlayer.FindMission(questID)
+ classLV = GameWorld.ToIntDef(curActionNode.GetAttribute("classLV"), 0)
+ if not classLV:
+ return
+ 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
+
+ curMission.SetProperty(key, totalCnt)
+ return
+
##设置强化总等级
# @param curPlayer 玩家实例
# @param curMission 任务实例
@@ -6116,11 +6016,11 @@
# @return 返回值无意义
# @remarks <Set_Equiptotalstar key="" />
def DoType_Set_Equiptotalstar(curPlayer, curMission, curActionNode):
- key = curActionNode.GetAttribute("key")
- questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
- if questID != 0:
- curMission = curPlayer.FindMission(questID)
- curMission.SetProperty(key, ChEquip.GetTotalEquipStars(curPlayer))
+# key = curActionNode.GetAttribute("key")
+# questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+# if questID != 0:
+# curMission = curPlayer.FindMission(questID)
+# curMission.SetProperty(key, ChEquip.GetTotalEquipStars(curPlayer))
return
#---------------------------------------------------------------------
##DoType_调度器
@@ -6495,6 +6395,18 @@
conditionValue = GameWorld.ToIntDef(curConditionNode.GetAttribute("value"), 0)
return PlayerMagicWeapon.GetIsActiveMagicWeapon(curPlayer, mwid, conditionValue)
+##判断魔族法宝通关关卡
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curConditionNode节点信息
+# @return 返回值, 是否通过检查
+# @remarks <Check_Magicweapon_Passfblv" mwid="法宝ID" value="期望值" />
+def ConditionType_Check_Magicweapon_Passfblv(curPlayer, curMission, curConditionNode):
+ mwid = GameWorld.ToIntDef(curConditionNode.GetAttribute("mwid"), 0)
+ conditionValue = GameWorld.ToIntDef(curConditionNode.GetAttribute("value"), 0)
+ fbpasslv = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MWFBPassLevel % mwid)
+ return fbpasslv >= conditionValue
+
#---------------------------------------------------------------------
##是否拥有足够的竞技点
# @param curPlayer 玩家实例
@@ -6627,52 +6539,6 @@
__NPCAllowResetWorldPos(curPlayer, mapID, bornX, bornY, False)
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
-
#---------------------------------------------------------------------
##给予玩家技能
@@ -7209,12 +7075,6 @@
realmlv = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
return curPlayer.GetOfficialRank() >= realmlv
-##法宝之魂是否激活
-# @param None
-# @return None <Mwsoul value="id"/>
-def ConditionType_Mwsoul(curPlayer, curMission, curActionNode):
- soulID = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
- return bool(PlayerMagicWeapon.GetIsActiveMWSoul(curPlayer, soulID))
##X级通关X层娲皇遗迹
# @param None
@@ -7232,21 +7092,76 @@
totallv = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
return PlayerHorse.GetHorseSumLV(curPlayer) >= totallv
-##2阶强化防具套装件数
+##已选择的专精技能数量是否达到
# @param None
-# @return None <Suitplus value="cnt"/>
-def ConditionType_Suitplus(curPlayer, curMission, curActionNode):
- needCnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+# @return None <Elementskillcnt value="cnt"/>
+def ConditionType_Elementskillcnt(curPlayer, curMission, curActionNode):
+ cnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ return SkillShell.GetElementSkillCnt(curPlayer) >= cnt
+
+##设置已选择的专精技能数量
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Elementskillcnt key="" />
+def DoType_Set_Elementskillcnt(curPlayer, curMission, curActionNode):
+ key = curActionNode.GetAttribute("key")
+ questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+ if questID != 0:
+ curMission = curPlayer.FindMission(questID)
+ curMission.SetProperty(key, SkillShell.GetElementSkillCnt(curPlayer))
+ 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)
- equipSuitTypeDict = IpyGameDataPY.GetFuncEvalCfg('EquipSuitType')
- groupCnt = 0 #2阶强化防具套装件数
- for groupType, equipIndexList in equipSuitTypeDict.items():
- for i in equipIndexList:
- suiteInfo = ChEquip.GetSuiteInfoByPlace(curPlayer, i)
- for suiteType, lv in suiteInfo.items():
- if lv >= 2 and int(groupType) == 1 and suiteType == 2:
- groupCnt +=1
- return groupCnt >= needCnt
+ 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):
+ haveCnt = 0
+ equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+ for place in ChConfig.EquipPlace_Base:
+ ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, place)
+ if not ipyData:
+ break
+ 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
+ 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)
+ return haveCnt >= totalcnt
##法宝激活个数
# @param None
@@ -7262,6 +7177,25 @@
totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
return ChEquip.GetTotalPlusLV(curPlayer, False) >= totalcnt
+##判断某阶强化等级达到X的件数是否达到
+# @param None
+# @return None <Classlvpluslv classLV="" plusLV="" value="cnt"/>
+def ConditionType_Classlvpluslv(curPlayer, curMission, curActionNode):
+ classLV = GameWorld.ToIntDef(curActionNode.GetAttribute("classLV"), 0)
+ if not classLV:
+ return
+ 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
+ return totalCnt >= GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+
##装备总星级
# @param None
# @return None <Equiptotalstar value="cnt"/>
@@ -7269,14 +7203,27 @@
totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
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
+
+##技能总等级
+# @param None
+# @return None <Totalskilllv value="" funcType=""/>
+def ConditionType_Totalskilllv(curPlayer, curMission, curActionNode):
+ totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ funcType = GameWorld.ToIntDef(curActionNode.GetAttribute("funcType"), 0)
+ return SkillShell.GetAllSkillLV(curPlayer, funcType) >= totalcnt
+
##激活法宝,确认与成就逻辑后使用
# @param None
# @return None <Active_Magicweapon id="法宝ID"/>
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现身"/>
@@ -7304,3 +7251,12 @@
return
+def DoType_Setfairydomain(curPlayer, curMission, curActionNode):
+ ## 任务开启缥缈仙域 (做标记可寻访) <Setfairydomain/>
+ if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState):
+ #若已在寻访中则先结束寻访
+ PlayerFairyDomain.EndFairyDomain(curPlayer)
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainState, 2)
+ PlayerFairyDomain.NotifyVisitFairyDomainInfo(curPlayer)
+ return
\ No newline at end of file
--
Gitblit v1.8.0