From 9a4d2b1a70a221c810a7cdf4b119bde08ddfb8c2 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期四, 10 一月 2019 21:10:46 +0800
Subject: [PATCH] 5736 【后端】【1.5】神兵特效佩戴优化
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py | 233 +++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 207 insertions(+), 26 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 fb06418..c0b8d23 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
@@ -59,6 +59,7 @@
import PlayerMagicWeapon
import PlayerBossReborn
import PlayerFairyCeremony
+import PlayerWeekParty
import PlayerHorse
import FBCommon
import PyGameData
@@ -92,7 +93,7 @@
Def_Run_Around_Reward_Exp = "run_around_exp" #跑环任务的奖励
Def_Run_Around_Reward_ExpPoint = "run_around_exp_point" #跑环任务的奖励
Def_Run_Around_Reward_Money = "run_around_money" #跑环任务的给钱
-
+Def_Run_Around_Reward_FamilyHornor = "run_around_familyhornor" #跑环任务的仙盟贡献奖励
Def_Run_Around_Reward_Multiple = "run_around_multiple" #跑环任务的奖励翻倍数
Def_Task_Reward_Per = "reward_per" #领取任务奖励倍数百分比; 150代表1.5倍
@@ -1221,7 +1222,7 @@
def __RunAnswerAction(curPlayer, curMission, answersNode):
actionsNode = __FindAnswerActionNode(curPlayer, curMission, answersNode)
if actionsNode == None or actionsNode.IsEmpty():
- GameWorld.Log('__RunAnswerAction找不到回答节点')
+ GameWorld.DebugLog('__RunAnswerAction找不到回答节点--%s'%curMission.GetMissionID())
return
__DoAnswerActionNode(curPlayer, curMission, actionsNode)
@@ -1362,6 +1363,22 @@
value = 1
return QuestRunnerValue.GetEval(conditionType, value, conditionValue)
+##判断是否穿戴某部位(非时效)
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curConditionNode 节点信息
+# @return 返回值, 是否判断成功
+# @remarks <have_equip value="装备位"/>
+def ConditionType_Have_Equip(curPlayer, curMission, curConditionNode):
+ equipPlace = int(curConditionNode.GetAttribute("value"))
+ roleEquipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+ curEquip = roleEquipPack.GetAt(equipPlace)
+ if curEquip.IsEmpty():
+ return False
+ if curEquip.GetEndureReduceType():
+ return False
+ return True
+
#---------------------------------------------------------------------
##增加家族相关值
# @param curPlayer 玩家实例
@@ -1921,7 +1938,7 @@
# @param curMission 任务实例
# @param curConditionNode 节点信息
# @return 返回值, 是否判断成功
-# @remarks <Have_Money value="期望值" check="查找对话中的货币" moneytype="货币类型 1元宝2礼券3银两" type="__Eval+替换的名字"/>
+# @remarks <Have_Money value="期望值" check="查找对话中的货币" moneytype="货币类型 1元宝2礼券3银两" type="__Eval+替换的名字" maxItem="需要物品数量" itemID="20410"/>
def ConditionType_Have_Money(curPlayer, curMission, curConditionNode):
#格式<have_money value="" type="" moneytype=""/>
value = curConditionNode.GetAttribute("value")
@@ -1930,8 +1947,18 @@
conditionValue = int(value)
elif check != "":
conditionValue = int(QuestRunnerValue.GetNPCTalkReplaceValue(curPlayer, curMission, check))
+
+ maxItemCnt = GameWorld.ToIntDef(curConditionNode.GetAttribute("maxItem"), 0)
+ itemID = GameWorld.ToIntDef(curConditionNode.GetAttribute("itemID"), 0)
+ if maxItemCnt and itemID: #未收集的道具个数乘以单价
+ haveCnt = ItemControler.FindPlayerItemCountByItemID(curPlayer, IPY_GameWorld.rptItem, itemID)
+ conditionValue = max(0, maxItemCnt-haveCnt)*conditionValue
+
conditionType = curConditionNode.GetAttribute("type")
moneyType = int(curConditionNode.GetAttribute("moneytype"))
+
+ #GameWorld.Log(' conditionValue=%s,maxItemCnt=%s,itemID=%s'%(conditionValue,maxItemCnt,itemID))
+
goldValue = curPlayer.GetGold()
goldPaperValue = curPlayer.GetGoldPaper()
silverValue = PlayerControl.GetSilver(curPlayer)
@@ -1942,6 +1969,8 @@
return QuestRunnerValue.GetEval(conditionType, goldPaperValue, conditionValue)
elif moneyType == IPY_GameWorld.TYPE_Price_Silver_Money:
return QuestRunnerValue.GetEval(conditionType, silverValue, conditionValue)
+ elif moneyType == ShareDefine.TYPE_Price_Gold_Paper_Money:
+ return QuestRunnerValue.GetEval(conditionType, goldValue + goldPaperValue, conditionValue)
else:
GameWorld.Log("任务 = %s , moneytype = %s填错拉" % (curMission.GetMissionID() , moneyType) , curPlayer.GetPlayerID())
return
@@ -2836,9 +2865,9 @@
packList=[IPY_GameWorld.rptItem], isSuite=False,
addAttrLV=0, isLucky=False, skillBoostEff=[], holeCount=0,
equipIndex= -1, isGreat=0, baseAttrRate=ShareDefine.Def_MaxRateValue, greatAttrList=[]):
- if PlayerFamily.DoAddFamilyBossFoodEx(curPlayer, itemID, itemCount, ShareDefine.Def_AddFAVReason_DoFamilyMisson):
- #仙盟兽粮自动使用
- return
+# if PlayerFamily.DoAddFamilyBossFoodEx(curPlayer, itemID, itemCount, ShareDefine.Def_AddFAVReason_DoFamilyMisson):
+# #仙盟兽粮自动使用
+# return
#任务给予物品应该只能放入万能背包和背包
itemControl = ItemControler.PlayerItemControler(curPlayer)
@@ -3655,7 +3684,7 @@
# @param curMission 任务实例
# @param curActionNode节点信息
# @return 返回值无意义
-# @remarks <Del_Money form_value="是否取对话的值" value="form_value为空取" moneytype="1元宝2礼券3银两" />
+# @remarks <Del_Money form_value="是否取对话的值" value="form_value为空取" moneytype="1元宝2礼券3银两" maxItem="需要物品数量" itemID="20410"/>
def DoType_Del_Money(curPlayer, curMission, curActionNode):
#扣钱
#格式<del_money form_value = ""value="" moneytype=""/>
@@ -3666,23 +3695,34 @@
else:
value = int(curActionNode.GetAttribute("value"))
+ maxItemCnt = GameWorld.ToIntDef(curActionNode.GetAttribute("maxItem"), 0)
+ itemID = GameWorld.ToIntDef(curActionNode.GetAttribute("itemID"), 0)
+ if maxItemCnt and itemID: #未收集的道具个数乘以单价
+ haveCnt = ItemControler.FindPlayerItemCountByItemID(curPlayer, IPY_GameWorld.rptItem, itemID)
+ value = max(0, maxItemCnt-haveCnt)*value
+
moneytype = int(curActionNode.GetAttribute("moneytype"))
- if moneytype not in ChConfig.Def_MoneyType_All:
- GameWorld.Log("##异常moneytype = %s填错拉" % (moneytype))
- return
+# if moneytype not in ChConfig.Def_MoneyType_All:
+# GameWorld.Log("##异常moneytype = %s填错拉" % (moneytype))
+# return
curMissionID = 0
if curMission == None:
curMissionID = 0
else:
curMissionID = curMission.GetMissionID()
-
- #付钱
- if not PlayerControl.PayMoney(curPlayer, moneytype, value, ChConfig.Def_Cost_MissionDel, {"MissionID":curMissionID}):
+ costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, moneytype, value)
+ if not costMoneyList:
GameWorld.Log("##付费异常,玩家金钱不足,任务missionID = %s" % (curMissionID) , curPlayer.GetPlayerID())
EventShell.DoExitEvent(curPlayer)
return
+ #付钱
+ for moneyType, moneyNum in costMoneyList:
+ if not PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_MissionDel, {"MissionID":curMissionID}):
+ GameWorld.Log("##付费异常,玩家金钱不足,任务missionID = %s" % (curMissionID) , curPlayer.GetPlayerID())
+ EventShell.DoExitEvent(curPlayer)
+ return
GameWorld.Login_Interface_GoldRec(curPlayer , 0 , 0 , 'MissionID_%s_Cost' % (curMissionID), moneytype, value)
return
@@ -4786,7 +4826,7 @@
mission_1.SetProperty(Def_Around_AllCount, allCount)
EventShell.EventRespons_RunTaskAllCnt(curPlayer, curMissionData.Type, allCount)
- GameWorld.DebugLog("删除任务allCount %s, RUNCOUNT=%s" % (allCount, RUNCOUNT))
+ GameWorld.Log("删除任务allCount %s, RUNCOUNT=%s" % (allCount, RUNCOUNT))
if allCount < RUNCOUNT:
@@ -4851,6 +4891,7 @@
# @return 无
# @remarks 跑环任务结束处理,删除或者随机下一个
def __RunAroundMission(curPlayer, missionID, curMissionData, curActionNode):
+ GameWorld.Log("__RunAroundMission----%s"%missionID, curPlayer.GetID())
#任务完成,触发随机跑环
run_event = GameWorld.ToIntDef(curActionNode.GetAttribute("run_around"), 0)
firstMissionID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
@@ -4887,8 +4928,9 @@
#总跑环次数已满,不可再做
- if run_event == Def_Run_Around_Over_1 and allCount >= RUNCOUNT:
- return
+ if run_event == Def_Run_Around_Over_1:
+ if allCount >= RUNCOUNT or aroundCount >= AROUNDCOUNT:
+ return
nextMissionID = 0
nextMission = None
@@ -4936,9 +4978,9 @@
if curMissionData.Type == QuestCommon.Def_Mission_Type_RunFamily:
PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_TaskFRun, 1)
- if allCount < RUNCOUNT:
- nextMissionID = __OverRandRunAround(curPlayer, curMissionData)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RunTaskNextMissionID % curMissionData.Type, nextMissionID)
+# if allCount < RUNCOUNT:
+# nextMissionID = __OverRandRunAround(curPlayer, curMissionData)
+# PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RunTaskNextMissionID % curMissionData.Type, nextMissionID)
@@ -5193,14 +5235,18 @@
def OnAroundMissionFinish(curPlayer, missionType, addCnt=1):
#跑环任务id列表
# 活跃度
+ 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_TaskCRun, addCnt)
PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_RunTask, addCnt)
PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RunTask, addCnt)
+ PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_RunTask, addCnt)
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
@@ -5394,6 +5440,8 @@
# @return 返回值无意义
# @remarks 设置跑环任务奖励 <set_run_around_reward multiple="指定倍数" id_name="任务ID存储key" />
def DoType_Set_Run_Around_Reward(curPlayer, curMission, curActionNode):
+ curMissionID = curMission.GetMissionID()
+ GameWorld.Log("DoType_Set_Run_Around_Reward---%s"%curMissionID, curPlayer.GetID())
idNameStr = curActionNode.GetAttribute("id_name")
if curMission and idNameStr != "":
questID = GameWorld.ToIntDef(curMission.GetProperty(idNameStr), 0)
@@ -5402,16 +5450,15 @@
if curMission == None:
curMission = QuestCommon.AddNewMission(curPlayer, questID)
- curMissionID = curMission.GetMissionID()
curMissionData = FindQuestFunc(curMissionID)
if not curMissionData:
return
rewardList = __GetRunAroundReward(curPlayer, curMission)
if rewardList:
- curExp, curMoney, itemID, itemCount = rewardList
+ curExp, curMoney, curFamilyHornor, itemID, itemCount = rewardList
else:
- curExp, curMoney, itemID, itemCount = 0, 0, 0, 0
+ curExp, curMoney, curFamilyHornor, itemID, itemCount = 0, 0, 0, 0
curMission.SetProperty(Def_Run_Around_Reward_Exp, curExp % ChConfig.Def_PerPointValue)
curMission.SetProperty(Def_Run_Around_Reward_ExpPoint, curExp / ChConfig.Def_PerPointValue)
@@ -5419,6 +5466,8 @@
curMission.SetProperty(Def_Day_Event_Reward_Item_Id, itemID)
curMission.SetProperty(Def_Day_Event_Reward_Item_Count, itemCount)
+ curMission.SetProperty(Def_Run_Around_Reward_FamilyHornor, curFamilyHornor)
+
return
@@ -5447,14 +5496,14 @@
curExp = eval(IpyGameDataPY.GetFuncCfg('RunTaskExp'))
curExp += curLVRunAroundReward.AddExp
curMoney = baseMoney
-
+ curFamilyHornor = curLVRunAroundReward.PlayerFamilyHornor
itemInfo = curLVRunAroundReward.Item
if itemInfo:
itemID, itemCount = eval(itemInfo)
else:
itemID, itemCount = 0, 0
- return (curExp, curMoney, itemID, itemCount)
+ return (curExp, curMoney, curFamilyHornor, itemID, itemCount)
#---------------------------------------------------------------------
##给予跑环奖励
@@ -5482,14 +5531,24 @@
addDataDict = {ChConfig.Def_Give_Reason_SonKey:"Run"}
PlayerControl.GiveMoney(curPlayer, runAroundReward.MoneyType, money, ChConfig.Def_GiveMoney_Mission, addDataDict, False)
+ familyHornor = curMission.GetProperty(Def_Run_Around_Reward_FamilyHornor)
+ if familyHornor:
+ PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, familyHornor, True, ShareDefine.Def_AddFAVReason_DoFamilyMisson, True)
+
item_id = curMission.GetProperty(Def_Day_Event_Reward_Item_Id)
item_count = curMission.GetProperty(Def_Day_Event_Reward_Item_Count)
#给物品奖励
itemInfo = []
if item_id and item_count:
- AddEventItem(curPlayer, curMission, item_id, item_count, bind=True)
itemInfo = [[item_id, item_count, True]]
+ packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, 1)
+ if 1 > packSpace:
+ PlayerControl.NotifyCode(curPlayer, "UnionTask_Reward")
+ PlayerControl.SendMailByKey("UnionTaskReward", [curPlayer.GetID()], itemInfo)
+ else:
+ AddEventItem(curPlayer, curMission, item_id, item_count, bind=True)
+
GameWorld.DebugLog("任务:%d 获得经验:%d,钱=%s,物品ID=%s,物品数量=%s"
% (curMission.GetMissionID(), exp, money, item_id, item_count))
@@ -5827,6 +5886,11 @@
#记录副本对应的任务ID
if FBCommon.GetRecordMapID(mapID) in [ChConfig.Def_FBMapID_ClearDevil, ChConfig.Def_FBMapID_MagicWeapon]:
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ReqFBMissionID, curMission.GetMissionID())
+ missionID = curMission.GetMissionID()
+ curMissionData = FindQuestFunc(missionID)
+ if curMissionData:
+ missionType = curMissionData.Type
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ReqFBMissionType, missionType)
return
#---------------------------------------------------------------------
@@ -6010,6 +6074,48 @@
def DoType_Set_Mwcnt(curPlayer, curMission, curActionNode):
key = curActionNode.GetAttribute("key")
curMission.SetProperty(key, PlayerMagicWeapon.GetMWActiveCntTotal(curPlayer))
+ return
+
+##设置坐骑总等级
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Horsetotallv key="" />
+def DoType_Set_Horsetotallv(curPlayer, curMission, curActionNode):
+ key = curActionNode.GetAttribute("key")
+ questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+ if questID != 0:
+ curMission = curPlayer.FindMission(questID)
+ curMission.SetProperty(key, PlayerHorse.GetHorseSumLV(curPlayer))
+ return
+
+##设置强化总等级
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @return 返回值无意义
+# @remarks <Set_Totalpluslv key="" />
+def DoType_Set_Totalpluslv(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.GetTotalPlusLV(curPlayer, False))
+ return
+
+##设置装备总星级
+# @param curPlayer 玩家实例
+# @param curMission 任务实例
+# @param curActionNode节点信息
+# @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))
return
#---------------------------------------------------------------------
##DoType_调度器
@@ -7098,6 +7204,66 @@
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
+# @return None <Passqueenrelecs value="lineID" grade="grade"/>
+def ConditionType_Passqueenrelecs(curPlayer, curMission, curActionNode):
+ lineID = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ grade = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [ChConfig.Def_FBMapID_QueenRelics])
+ needGrade = GameWorld.ToIntDef(curActionNode.GetAttribute("grade"), 0)
+ return grade >=needGrade
+
+##坐骑总等级
+# @param None
+# @return None <Horsetotallv value="lv"/>
+def ConditionType_Horsetotallv(curPlayer, curMission, curActionNode):
+ 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)
+
+ 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
+
+##法宝激活个数
+# @param None
+# @return None <Mwcnt value="cnt"/>
+def ConditionType_Mwcnt(curPlayer, curMission, curActionNode):
+ totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ return PlayerMagicWeapon.GetMWActiveCntTotal(curPlayer) >= totalcnt
+
+##总强化等级
+# @param None
+# @return None <Totalpluslv value="cnt"/>
+def ConditionType_Totalpluslv(curPlayer, curMission, curActionNode):
+ totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ return ChEquip.GetTotalPlusLV(curPlayer, False) >= totalcnt
+
+##装备总星级
+# @param None
+# @return None <Equiptotalstar value="cnt"/>
+def ConditionType_Equiptotalstar(curPlayer, curMission, curActionNode):
+ totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ return ChEquip.GetTotalEquipStars(curPlayer) >= totalcnt
+
##激活法宝,确认与成就逻辑后使用
# @param None
# @return None <Active_Magicweapon id="法宝ID"/>
@@ -7117,4 +7283,19 @@
else:
curPlayer.SetVisible(False)
curPlayer.SetSight(0)
- return
\ No newline at end of file
+ return
+
+
+# 被动技能孔
+def DoType_Open_Skill_Slots(curPlayer, curMission, curActionNode):
+ # 开孔
+ slotIndex = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
+ mission_1 = QuestCommon.GetCommonMission(curPlayer)
+ if not mission_1:
+ return
+
+ mission_1.SetProperty("OpenSkillSlots", pow(2, slotIndex)|mission_1.GetProperty("OpenSkillSlots"))
+
+ return
+
+
--
Gitblit v1.8.0