From 92422444e4113c2b525a74b5b3cc29ec0c9e309d Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 14 五月 2019 14:42:53 +0800 Subject: [PATCH] 6778 【后端】【2.0】任务接口开发(灵根品级相关) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py | 563 +++++++++++++++++++++++++++---------------------------- 1 files changed, 276 insertions(+), 287 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 fd8f148..947d3a0 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,21 +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 @@ -1418,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 #--------------------------------------------------------------------- @@ -2501,23 +2501,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 ChConfig.Type_Equip_CanTake : - 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 玩家实例 @@ -2533,7 +2517,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 @@ -2544,7 +2528,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))) @@ -2572,6 +2556,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,42 +2587,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) #--------------------------------------------------------------------- ##执行 扣除玩家镖车押金 @@ -2838,10 +2798,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 @@ -2865,7 +2825,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 @@ -2874,13 +2834,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 @@ -2899,15 +2859,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}]): @@ -2929,26 +2889,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 @@ -3733,7 +3690,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="[卓越属性列表]" /> @@ -3754,10 +3711,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) @@ -3785,7 +3745,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) #--------------------------------------------------------------------- @@ -3824,8 +3784,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): @@ -3844,6 +3804,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) @@ -3869,14 +3831,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() @@ -4365,61 +4334,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 #--------------------------------------------------------------------- ##删除物品 @@ -5239,16 +5155,20 @@ GameWorld.Log(' 跑环完成触发活跃度 missionType=%s'%missionType, curPlayer.GetPlayerID()) if missionType == QuestCommon.Def_Mission_Type_RunDaily: 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: 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 @@ -5291,66 +5211,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 @@ -5408,7 +5268,6 @@ randStarList = eval(ReadChConfig.GetChConfig('RunAround_Star')) aroundStar = GameWorld.GetResultByRandomList(randStarList, 1) - #vipStar = PlayerCostVIP.GetRoundStar(curPlayer) vipStar = 0 if vipStar > 0: aroundStar = vipStar @@ -6092,6 +5951,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 任务实例 @@ -6113,11 +6000,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_调度器 @@ -6492,6 +6379,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 玩家实例 @@ -6624,52 +6523,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 - #--------------------------------------------------------------------- ##给予玩家技能 @@ -7206,12 +7059,22 @@ realmlv = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0) return curPlayer.GetOfficialRank() >= realmlv -##法宝之魂是否激活 +##灵根品级是否达到X级 # @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)) +# @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 @@ -7229,21 +7092,89 @@ totallv = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0) return PlayerHorse.GetHorseSumLV(curPlayer) >= totallv -##2阶强化防具套装件数 +##某主技能对应专精技能达到激活X等级的数量是否达到 # @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" mainskill="[]" activelv=""/> +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) + return SkillShell.GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV) >= cnt + +##设置已选择的专精技能数量 +# @param curPlayer 玩家实例 +# @param curMission 任务实例 +# @param curActionNode节点信息 +# @return 返回值无意义 +# @remarks <Set_Elementskillcnt key="" mainskill="[]" activelv=""/> +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) + curMission.SetProperty(key, SkillShell.GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV)) + 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, 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 @@ -7259,6 +7190,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"/> @@ -7266,14 +7216,44 @@ 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="" 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 # @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现身"/> @@ -7301,3 +7281,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