6501 【后端】【2.0】仙盟任务(增加多个任务接口)
| | |
| | | RunQuestEvent(curPlayer, "thinkfabao", 'thinkfabao', Def_RunQuestType_Normal)
|
| | | return
|
| | |
|
| | | def EventRespons_ElementSkill(curPlayer):
|
| | | #选择五行专精
|
| | | RunQuestEvent(curPlayer, "elementskill", 'elementskill', Def_RunQuestType_Normal)
|
| | | def EventRespons_ElementSkill(curPlayer, mainSkillID, updSelectSkillLV):
|
| | | #激活五行专精 主技能ID_激活等级.xml
|
| | | RunQuestEvent(curPlayer, "elementskill", '%s_%s'%(mainSkillID, updSelectSkillLV), Def_RunQuestType_Normal)
|
| | | return
|
| | |
|
| | | def EventRespons_EquipStarUp(curPlayer):
|
| | |
| | | RunQuestEvent(curPlayer, "equipitem", 'equipitem', Def_RunQuestType_Normal)
|
| | | return
|
| | |
|
| | | def EventRespons_SkillUp(curPlayer, FuncType):
|
| | | def EventRespons_SkillUp(curPlayer, FuncType, skillLV):
|
| | | #升级技能
|
| | | RunQuestEvent(curPlayer, "skillup", FuncType, Def_RunQuestType_Normal)
|
| | | RunQuestEvent(curPlayer, "skillup", '%s_%s' % (FuncType, skillLV), Def_RunQuestType_Normal)
|
| | | return
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | | totallv = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
|
| | | return PlayerHorse.GetHorseSumLV(curPlayer) >= totallv
|
| | |
|
| | | ##已选择的专精技能数量是否达到
|
| | | ##某主技能对应专精技能达到激活X等级的数量是否达到
|
| | | # @param None
|
| | | # @return None <Elementskillcnt value="cnt"/>
|
| | | # @return None <Elementskillcnt value="cnt" mainskill="[]" activelv=""/>
|
| | | def ConditionType_Elementskillcnt(curPlayer, curMission, curActionNode):
|
| | | cnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
|
| | | return SkillShell.GetElementSkillCnt(curPlayer) >= cnt
|
| | | 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="" />
|
| | | # @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))
|
| | | curMission.SetProperty(key, SkillShell.GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV))
|
| | | return
|
| | |
|
| | | ##设置符合条件的已穿基础装备数量
|
| | |
| | | curMission.SetProperty(key, haveCnt)
|
| | | return
|
| | | def __GetBaseequipcnt(curPlayer, classLV, color, suiteIDList):
|
| | | #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:
|
| | | 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
|
| | | 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
|
| | | return haveCnt
|
| | |
|
| | | ##判断符合条件的已穿基础装备数量
|
| | |
| | |
|
| | | ##技能总等级
|
| | | # @param None
|
| | | # @return None <Totalskilllv value="" funcType=""/>
|
| | | # @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)
|
| | | return SkillShell.GetAllSkillLV(curPlayer, funcType) >= totalcnt
|
| | | 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
|
| | |
| | | def GetTowerIpyData(floor):
|
| | | return IpyGameDataPY.GetIpyGameData('SkyTower', floor)
|
| | |
|
| | | def OnFBPlayerLogin(curPlayer):
|
| | | def OnFBPlayerOnLogin(curPlayer):
|
| | | SyncSkyTowerInfo(curPlayer)
|
| | | return
|
| | |
|
| | |
| | | def SyncSkyTowerInfo(curPlayer):
|
| | | ttInfo = ChPyNetSendPack.tagMCSkyTowerInfo()
|
| | | ttInfo.Clear()
|
| | | ttInfo.floorID = __GetSkyTowerCurFloor(curPlayer)
|
| | | ttInfo.Floor = __GetSkyTowerCurFloor(curPlayer)
|
| | | NetPackCommon.SendFakePack(curPlayer, ttInfo)
|
| | | return
|
| | |
|
| | |
| | |
|
| | | SyncSkyTowerInfo(curPlayer) # 同步最新关卡信息
|
| | | __SetFBToFreeTime(tick)
|
| | | #每日任务
|
| | | PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_Tower)
|
| | | return
|
| | |
|
| | |
|
| | |
| | | ipyData = IpyGameDataPY.GetIpyGameDataByCondition('FairyDomainAppoint', {'Cnt':visitCnt, 'EventID':fdEventID}, False, False)
|
| | | if not ipyData:
|
| | | return
|
| | | return ipyData.GetAward()
|
| | | job = curPlayer.GetJob()
|
| | | itemList = []
|
| | | for itemInfo in ipyData.GetAward():
|
| | | if type(itemInfo[0]) == dict:
|
| | | if job not in itemInfo[0]:
|
| | | continue
|
| | | itemList.append([itemInfo[0][job], itemInfo[1], itemInfo[2]])
|
| | | else:
|
| | | itemList.append(itemInfo)
|
| | | return itemList
|
| | |
| | | notNotifyItemIDList = IpyGameDataPY.GetFuncEvalCfg("AlchemyNotify", 3)
|
| | | if alchemyItemID not in notNotifyItemIDList and (alchemyItemID in needNotifyItemIDList or makeItemData.GetItemColor() >= notifyColor):
|
| | | PlayerControl.WorldNotify(0, "AchemyGreatSuccess", [curPlayer.GetPlayerName(), alchemyItemID])
|
| | |
|
| | | |
| | | #任务
|
| | | EventShell.EventRespons_RefineItem(curPlayer, alchemyIpyData.GetNeedAlchemyLV())
|
| | | #重置
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyItemID % alchemType, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyStartTime % alchemyID, 0)
|
| | |
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_RefineItem, 1)
|
| | | #完成1次X品质物品炼丹成就
|
| | | #PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_RefineStoveColor, 1, [makeItemData.GetItemColor()])
|
| | | #任务
|
| | | #EventShell.EventRespons_RefineItem(curPlayer, alchemyIpyData.GetNeedAlchemyLV())
|
| | | |
| | |
|
| | | PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RefineStove, 1)
|
| | | PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RefineStove, 1)
|
| | |
| | | #获得技能等级
|
| | | curSkillLV = curSkill.GetSkillLV()
|
| | | DataRecordPack.DR_LearnORUPSkill(curPlayer, curSkillID, curSkillLV)
|
| | | EventShell.EventRespons_SkillUp(curPlayer, curSkill.GetFuncType())
|
| | | EventShell.EventRespons_SkillUp(curPlayer, curSkill.GetFuncType(), curSkillLV)
|
| | | GameWorld.Log("升级技能名 = %s 成功, 当前等级 = %s"%(curSkill.GetSkillName(), curSkill.GetSkillLV()), curPlayer.GetPlayerID())
|
| | | return True
|
| | |
|
| | |
| | | isChangeSkill = False #是否变更生效的技能
|
| | | if updSelectSkillLV != activeSkillLV:
|
| | | #可升级则激活升一级
|
| | | EventShell.EventRespons_ElementSkill(curPlayer, mainSkillID, updSelectSkillLV)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementLV % selectSkillID, updSelectSkillLV)
|
| | | if curElementSkillID == selectSkillID:
|
| | | #正在使用的专精技能,则立即生效
|
| | |
| | | if curElementSkillID != selectSkillID:
|
| | | #原技能删除
|
| | | skillManager.DeleteSkillBySkillTypeID(curElementSkillID)
|
| | | else:
|
| | | EventShell.EventRespons_ElementSkill(curPlayer)
|
| | | |
| | |
|
| | | # 重刷被动技能
|
| | | PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer)
|
| | |
| | | NotifyElementSkillInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def GetElementSkillCnt(curPlayer):
|
| | | def GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV):
|
| | | ##获取已选择的专精技能数量
|
| | | cnt = 0
|
| | | skillManager = curPlayer.GetSkillManager()
|
| | | for i in xrange(skillManager.GetSkillCount()):
|
| | | hasSkill = skillManager.GetSkillByIndex(i)
|
| | | hasSkillID = hasSkill.GetSkillTypeID()
|
| | | ipyData = IpyGameDataPY.GetIpyGameDataByCondition('SkillElement', {'MainSkillID':hasSkillID}, False, False)
|
| | | if not ipyData:
|
| | | if hasSkillID not in mainSkillIDList:
|
| | | continue
|
| | | curElementSkillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % hasSkillID)
|
| | | if not curElementSkillID:
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('SkillElement', {'MainSkillID':hasSkillID}, True, False)
|
| | | if not ipyDataList:
|
| | | continue
|
| | | cnt +=1
|
| | | for ipyData in ipyDataList:
|
| | | elementSkillID = ipyData.GetElementSkillID()
|
| | | curActiveLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementLV % elementSkillID)
|
| | | if curActiveLV >= activeLV:
|
| | | cnt += 1
|
| | | return cnt
|
| | |
|
| | | def __InitElementSkillInfo():
|
| | |
| | |
|
| | |
|
| | |
|
| | | ## 获取技能总等级
|
| | | ## 获取某类型技能达到X等级的个数
|
| | | # @param curPlayer
|
| | | # @return allSkillLV:总技能等级
|
| | | def GetAllSkillLV(curPlayer, funcType):
|
| | | allSkillLV = 0
|
| | | def GetSkillCntByFunc(curPlayer, funcType, skilllv=0):
|
| | | allSkillCnt = 0
|
| | | skillManager = curPlayer.GetSkillManager()
|
| | | for i in xrange(skillManager.GetSkillCount()):
|
| | | curPlayerSkill = skillManager.GetSkillByIndex(i)
|
| | |
| | | continue
|
| | | if curPlayerSkill.GetFuncType() != funcType:
|
| | | continue
|
| | | skillLV = curPlayerSkill.GetSkillLV()
|
| | | allSkillLV += skillLV
|
| | | if curPlayerSkill.GetSkillLV() >= skilllv:
|
| | | allSkillCnt += 1
|
| | |
|
| | | return allSkillLV
|
| | | return allSkillCnt
|
| | |
|
| | |
|