ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -960,6 +960,7 @@ GameFuncID_TJG = 147 # 脱机挂 GameFuncID_SuperGift = 150 # 超值礼包 GameFuncID_ZhuXianBoss = 163 # 诛仙BOSS GameFuncID_PiaomiaoTask = 173 # 缥缈任务 # 以下为暂时无用的 GameFuncID_Truck = 33 # 运镖 GameFuncID_RunDaily = 34 # 日常跑环 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -242,7 +242,7 @@ Writer = alee Releaser = alee RegType = 0 RegisterPackCount = 10 RegisterPackCount = 11 PacketCMD_1=0xA2 PacketSubCMD_1=0x03 @@ -284,6 +284,23 @@ PacketSubCMD_10=0x06 PacketCallFunc_10=OnCrossNPCTalk PacketCMD_11=0xA2 PacketSubCMD_11=0x07 PacketCallFunc_11=OnTakeTask ;缥缈任务 [PlayerPiaomiaoTask] ScriptName = Player\PlayerPiaomiaoTask.py Writer = hxp Releaser = hxp RegType = 0 RegisterPackCount = 1 PacketCMD_1=0xA2 PacketSubCMD_1=0x08 PacketCallFunc_1=OnRefreshPiaomiaoTask ;VIP功能 [PlayerVip] ScriptName = Player\PlayerVip.py ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3988,6 +3988,9 @@ Def_PDict_TodayAssistMoney = "TodayAssistMoney" # 今日已获得协助货币奖励 Def_PDict_TodayAssistMoneySocial = "TodayAssistMoneySocial" # 今日已获得协助货币 社交关系额外加成 #缥缈任务 Def_PDict_PiaomiaoTaskTakeCount = "PiaomiaoTaskTakeCount" # 今日已接任务次数 Def_PDict_PiaomiaoTaskRefreshCount = "PiaomiaoTaskRefreshCount" # 今日已刷新次数 #------------------------------------------------------------------------------- #可以从07 41封包购买的背包类型,和对应字典{背包类型:[字典key, 默认格子数]} @@ -4678,6 +4681,7 @@ Def_Cost_BuyKillBossCnt, #购买boss次数 Def_Cost_EquipStar, #装备升星 Def_Cost_ActivityPlace, #活跃放置 50 Def_Cost_PiaomiaoTask, #缥缈任务 #-----------以下为暂时没用的,先不删除,如有新增消费点则放在这些之前------------ Def_Cost_RefreshArrestTask, # 刷新悬赏任务 Def_Cost_OffLineExp, # 兑换离线经验 @@ -4690,7 +4694,7 @@ Def_Cost_Trade, # 交易 Def_Cost_Rename, # 改名 Def_Cost_SkillLvUp, # 技能升级 ) = range(2000, 2000 + 62) ) = range(2000, 2000 + 63) Def_Cost_Reason_SonKey = "reason_name_son" # 消费点原因子类说明key @@ -4774,6 +4778,7 @@ Def_Cost_BuyKillBossCnt:"BuyKillBossCnt", Def_Cost_EquipStar:"EquipStar", Def_Cost_ActivityPlace:"ActivityPlace", Def_Cost_PiaomiaoTask:"PiaomiaoTask", } ## ----------------------------------------------------- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
@@ -98,12 +98,13 @@ import EventReport import PlayerCoat import PlayerGatherSoul import PlayerArrestTask #import PlayerArrestTask import PlayerRune import IpyGameDataPY import FormulaControl import GameFuncComm import ChPyNetSendPack import PlayerPiaomiaoTask import NetPackCommon import NPCCommon import PlayerVip @@ -1573,9 +1574,13 @@ GameWorld.DebugLog("任务状态(%s)不可提交,不能完成任务!taskID=%s" % (missionState, taskID)) return curQuestData = QuestManager.FindQuest(taskID) if curQuestData.Type == QuestCommon.Def_Mission_Type_Piaomiao: PlayerPiaomiaoTask.OnFinishPiaomiaoTask(curPlayer, curMission) return rewardPer = 100 if rewardPer <= 0 else rewardPer moneyType, moneyCnt = 0, 0 curQuestData = QuestManager.FindQuest(taskID) # 环任务支持多倍奖励领取 if curQuestData != None and curQuestData.Type in QuestCommon.Def_RunTask_Type_List: if rewardPer != 100: @@ -3960,15 +3965,22 @@ PlayerControl.NotifyCode(curPlayer, "Task_cannot_Delete02") return if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull: PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_880525") #if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull: # PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_880525") # return curQuestData = QuestManager.FindQuest(missionID) if not curQuestData: return #放弃悬赏任务 if missionID == ChConfig.Def_ArrestMissionID: PlayerArrestTask.OnDeleteArrestTask(curPlayer) #if missionID == ChConfig.Def_ArrestMissionID: # PlayerArrestTask.OnDeleteArrestTask(curPlayer) if curQuestData.Type == QuestCommon.Def_Mission_Type_Piaomiao: PlayerPiaomiaoTask.DoCancelPiaomiaoTask(curPlayer, curMission) return #先在任务表中找数据, 如果找到了, 就不遍历XML了 if __DoLogic_DeleteMission(curPlayer, curMission): GameWorld.Log("在任务表中找数据, 删除任务 = %s, 状态 = %s"%(missionID, missionState), curPlayer.GetID()) @@ -4877,6 +4889,36 @@ RunQuestEvent(curPlayer, "on_revlogintype_event", "on_revlogintype_event", Def_RunQuestType_Normal) return #// A2 07 接受任务 #tagCMTakeTask # #struct tagCMTakeTask #{ # tagHead Head; # DWORD TaskID; #}; def OnTakeTask(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) missionID = clientData.TaskID curMission = curPlayer.FindMission(missionID) if not curMission: return missionState = curMission.GetState() if missionState != ChConfig.Def_Mission_State_NoAccept: return curQuestData = QuestManager.FindQuest(missionID) if not curQuestData: return if curQuestData.Type == QuestCommon.Def_Mission_Type_Piaomiao: PlayerPiaomiaoTask.OnTakePiaomiaoTask(curPlayer, curMission) return QuestCommon.SetPlayerMissionState(curPlayer, curMission, 1) return #// A2 18 完成任务 #tagCMFinishTask # #struct tagCMFinishTask ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestCommon.py
@@ -34,6 +34,7 @@ import GameFuncComm import ChPyNetSendPack import NetPackCommon import EventShell #--------------------------------------------------------------------- #所有任务的索引 FindQuestFunc = None @@ -74,6 +75,8 @@ Def_NewGuyNoSight = "xinshou" # 新手期隐身无视野 Def_Mission_Grade = "grade" # 任务评级 #------------原DayEventData去除,替换枚举管理----------------- ( Day_KillNPC_By_ID_List, #Type = Day_KillNPC_By_ID @@ -103,6 +106,7 @@ Def_GM_Active_Mission_Type = 999 #暂时不用,配大点 Def_Mission_Type_RunDaily = 7 Def_Mission_Type_RunFamily = 12 Def_Mission_Type_Piaomiao = 25 # 缥缈任务 Def_MainTask_Type_List = [Def_Mission_Type_Main, Def_Mission_Type_MainHid] Def_RunTask_Type_List = [Def_Mission_Type_RunDaily, Def_Mission_Type_RunFamily] @@ -338,6 +342,8 @@ curQuestData = QuestManager.FindQuest(curMissionID) if curQuestData != None: EventReport.WriteEvent_mission_log(curPlayer, curQuestData, 0) EventShell.RunQuestEvent(curPlayer, "on_create", curMissionID, EventShell.Def_RunQuestType_Normal) return curMission #--------------------------------------------------------------------- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -117,6 +117,7 @@ import PlayerDogz import PlayerCoat import PlayerQuDaoDoubleBill import PlayerPiaomiaoTask import PlayerFB import SkillShell import PlayerYinji @@ -643,6 +644,8 @@ ChItem.Sync_ItemDayUseCnt(curPlayer) # 悬赏登录通知 #PlayerArrestTask.OnLogin(curPlayer) # 缥缈任务 PlayerPiaomiaoTask.OnPlayerLogin(curPlayer) # 符印登录通知 PlayerRune.PlayerRuneLogin(curPlayer) # 仙盟红包登录通知 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
@@ -38,6 +38,7 @@ import PlayerSignDay import PlayerGoldGift import PlayerEquipDecompose import PlayerPiaomiaoTask import PlayerFreeGoods import FunctionNPCCommon import PlayerGreatMaster @@ -65,6 +66,7 @@ ShareDefine.GameFuncID_AddPoint:lambda curObj:PlayerControl.DoAddPointOpen(curObj), ShareDefine.GameFuncID_Talent:lambda curObj:PlayerGreatMaster.DoTalentOpen(curObj), ShareDefine.GameFuncID_TJG:lambda curObj:PlayerTJG.DoTJGOpen(curObj), ShareDefine.GameFuncID_PiaomiaoTask:lambda curObj:PlayerPiaomiaoTask.DoPiaomiaoTaskOpen(curObj), #ShareDefine.GameFuncID_RunDaily:lambda curObj:FBCommon.DoFuncOpen_RunDaily(curObj), #ShareDefine.GameFuncID_RunFamily:lambda curObj:FBCommon.DoFuncOpen_RunFamily(curObj), #ShareDefine.GameFuncID_RefineExp:lambda curObj:Operate_PlayerBuyZhenQi.DoFuncOpen_RefineExp(curObj), ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -5524,7 +5524,7 @@ return False openMapStep = mapData.GetTreasureID() #需要完成的主线任务ID if openMapStep and not IsMapOpen(curPlayer, openMapStep): GameWorld.DebugLog('对不起,该场景destMapID=%s需要完成主线任务%s才能进入!' % (destMapID, openMapStep)) #GameWorld.DebugLog('对不起,该场景destMapID=%s需要完成主线任务%s才能进入!' % (destMapID, openMapStep)) return False return True ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -90,6 +90,7 @@ import PlayerFlashSale import PlayerWishingWell import PlayerFairyDomain import PlayerPiaomiaoTask import PlayerVip import PlayerDiceEx import IpyGameDataPY @@ -547,6 +548,8 @@ PlayerCrossRealmPK.DoPlayerOnDay(curPlayer) #缥缈仙域 PlayerFairyDomain.OnDay(curPlayer) #缥缈任务 PlayerPiaomiaoTask.OnDay(curPlayer) #仙盟宴会 GameLogic_FamilyParty.OnDayFamilyPartyPlayer(curPlayer) #协助 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPiaomiaoTask.py
New file @@ -0,0 +1,221 @@ #!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerPiaomiaoTask # # @todo:缥缈任务 # @author hxp # @date 2020-01-03 # @version 1.0 # # 详细描述: 缥缈任务 # #------------------------------------------------------------------------------- #"""Version = 2020-01-03 20:30""" #------------------------------------------------------------------------------- import GameWorld import EventShell import QuestCommon import QuestRunner import QuestManager import NetPackCommon import IpyGameDataPY import FormulaControl import ChPyNetSendPack import PlayerControl import IPY_GameWorld import ItemControler import ItemCommon import ChConfig def DoPiaomiaoTaskOpen(curPlayer): ## 缥缈任务开启 __DoRefreshPiaomiaoTask(curPlayer) return def OnDay(curPlayer): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PiaomiaoTaskTakeCount, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PiaomiaoTaskRefreshCount, 0) SyncPiaomiaoTaskInfo(curPlayer) return def OnPlayerLogin(curPlayer): SyncPiaomiaoTaskInfo(curPlayer) return #// A2 08 刷新缥缈任务 #tagCMRefreshPiaomiaoTask # #struct tagCMRefreshPiaomiaoTask #{ # tagHead Head; #}; def OnRefreshPiaomiaoTask(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) freeRefreshCount = IpyGameDataPY.GetFuncCfg("PiaomiaoTask", 2) todayRefreshCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PiaomiaoTaskRefreshCount) if todayRefreshCount >= freeRefreshCount: costGold = IpyGameDataPY.GetFuncCfg("PiaomiaoTask", 3) if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costGold, ChConfig.Def_Cost_PiaomiaoTask): return else: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PiaomiaoTaskRefreshCount, todayRefreshCount + 1) __DoRefreshPiaomiaoTask(curPlayer) return def __DoRefreshPiaomiaoTask(curPlayer): ## 刷新缥缈任务 randMissionCount = IpyGameDataPY.GetFuncCfg("PiaomiaoTaskRand", 1) randMissionWeightList = IpyGameDataPY.GetFuncEvalCfg("PiaomiaoTaskRand", 2) missionGradeRewardDict = IpyGameDataPY.GetFuncEvalCfg("PiaomiaoTaskRand", 3) piaomiaoMissionIDList = [] GameWorld.DebugLog("刷新缥缈任务! randMissionCount=%s" % randMissionCount) delMissionIDList = [] for i in range(curPlayer.GetMissionCount()): curMission = curPlayer.GetMissionByIndex(i) missionID = curMission.GetMissionID() missionState = curMission.GetState() questData = QuestManager.FindQuest(missionID) if not questData: continue if questData.Type != QuestCommon.Def_Mission_Type_Piaomiao: continue curGrade = curMission.GetProperty(QuestCommon.Def_Mission_Grade) # 评级5 S不重置 if missionState != ChConfig.Def_Mission_State_NoAccept or curGrade == 5: piaomiaoMissionIDList.append(missionID) GameWorld.DebugLog(" 缥缈任务非未接,保留! missionID=%s,missionState=%s" % (missionID, missionState)) continue GameWorld.DebugLog(" 缥缈任务未接,删除! missionID=%s,missionState=%s" % (missionID, missionState)) delMissionIDList.append(missionID) for delMissionID in delMissionIDList: QuestCommon.DeleteMission(curPlayer, delMissionID) reExp = PlayerControl.GetPlayerReExp(curPlayer) doCount = 100 while len(piaomiaoMissionIDList) < randMissionCount and doCount > 0: doCount -= 1 randMissionInfo = GameWorld.GetResultByWeightList(randMissionWeightList) if not randMissionInfo: continue randMissionID, grade = randMissionInfo if randMissionID in piaomiaoMissionIDList: continue if grade not in missionGradeRewardDict: continue expFormat, goldPaper, itemID = missionGradeRewardDict[grade] curExp = int(eval(FormulaControl.GetCompileFormula("PiaomiaoReward_%s" % grade, expFormat))) piaomiaoMissionIDList.append(randMissionID) curMission = QuestCommon.AddNewMission(curPlayer, randMissionID) curMission.SetProperty(QuestCommon.Def_Mission_Grade, grade) QuestCommon.SetPlayerMissionState(curPlayer, curMission, ChConfig.Def_Mission_State_NoAccept) curMission.SetProperty(QuestRunner.Def_Run_Around_Reward_Exp, curExp % ChConfig.Def_PerPointValue) curMission.SetProperty(QuestRunner.Def_Run_Around_Reward_ExpPoint, curExp / ChConfig.Def_PerPointValue) curMission.SetProperty(QuestRunner.Def_Run_Around_Reward_GoldPaper, goldPaper) itemCount = 1 # 物品暂默认1个 curMission.SetProperty(QuestRunner.Def_Day_Event_Reward_Item_Id, itemID) curMission.SetProperty(QuestRunner.Def_Day_Event_Reward_Item_Count, itemCount) GameWorld.DebugLog(" 新增随机缥缈任务: randMissionID=%s,grade=%s,curExp=%s,goldPaper=%s,itemID=%s" % (randMissionID, grade, curExp, goldPaper, itemID)) #通知客户端 EventShell.NotifyOneMission(curPlayer, curMission) SyncPiaomiaoTaskInfo(curPlayer) return def OnTakePiaomiaoTask(curPlayer, curMission): ## 接缥缈任务 todayTakeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PiaomiaoTaskTakeCount) maxTakeCount = IpyGameDataPY.GetFuncCfg("PiaomiaoTask", 1) if todayTakeCount >= maxTakeCount: GameWorld.DebugLog("已达今日接任务上限!todayTakeCount=%s" % todayTakeCount) return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PiaomiaoTaskTakeCount, todayTakeCount + 1) QuestCommon.SetPlayerMissionState(curPlayer, curMission, 1) EventShell.NotifyOneMission(curPlayer, curMission, isNotifyAll=False) SyncPiaomiaoTaskInfo(curPlayer) return def OnFinishPiaomiaoTask(curPlayer, curMission): ## 完成缥缈任务 missionID = curMission.GetMissionID() # 给奖励 exp = curMission.GetProperty(QuestRunner.Def_Run_Around_Reward_Exp) expPoint = curMission.GetProperty(QuestRunner.Def_Run_Around_Reward_ExpPoint) exp = expPoint * ChConfig.Def_PerPointValue + exp playerControl = PlayerControl.PlayerControl(curPlayer) playerControl.AddExp(exp) goldPaper = curMission.GetProperty(QuestRunner.Def_Run_Around_Reward_GoldPaper) addDataDict = {ChConfig.Def_Give_Reason_SonKey:"Piaomiao"} PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, goldPaper, ChConfig.Def_GiveMoney_Mission, addDataDict) itemID = curMission.GetProperty(QuestRunner.Def_Day_Event_Reward_Item_Id) itemCount = curMission.GetProperty(QuestRunner.Def_Day_Event_Reward_Item_Count) if itemID and itemCount: isAuctionItem = 0 itemList = [[itemID, itemCount, isAuctionItem]] ItemControler.GivePlayerItemOrMail(curPlayer, itemList) delItemID = curMission.GetProperty(QuestCommon.Def_Item_ID) if delItemID: ItemCommon.DelMissionItem(curPlayer, IPY_GameWorld.rptItem, delItemID, 0, missionID) GameWorld.DebugLog("完成缥缈任务: missionID=%s,exp=%s,goldPaper=%s,itemID=%s,delItemID=%s" % (missionID, exp, goldPaper, itemID, delItemID)) # 删任务 QuestCommon.DeleteMission(curPlayer, missionID) # 重新刷新 __DoRefreshPiaomiaoTask(curPlayer) return def DoCancelPiaomiaoTask(curPlayer, curMission): ## 放弃任务 missionID = curMission.GetMissionID() GameWorld.DebugLog("放弃缥缈任务! missionID=%s" % missionID) QuestCommon.DeleteMission(curPlayer, missionID) __DoRefreshPiaomiaoTask(curPlayer) return def SyncPiaomiaoTaskInfo(curPlayer): taskIDList = [] for i in xrange(curPlayer.GetMissionCount()): curMission = curPlayer.GetMissionByIndex(i) missionID = curMission.GetMissionID() questData = QuestManager.FindQuest(missionID) if not questData: continue if questData.Type != QuestCommon.Def_Mission_Type_Piaomiao: continue taskIDList.append(missionID) if not taskIDList: return taskInfo = ChPyNetSendPack.tagMCPiaomiaoTaskInfo() taskInfo.TakeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PiaomiaoTaskTakeCount) taskInfo.RefreshCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PiaomiaoTaskRefreshCount) taskInfo.TaskIDList = taskIDList taskInfo.TaskCount = len(taskIDList) NetPackCommon.SendFakePack(curPlayer, taskInfo) return ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -960,6 +960,7 @@ GameFuncID_TJG = 147 # 脱机挂 GameFuncID_SuperGift = 150 # 超值礼包 GameFuncID_ZhuXianBoss = 163 # 诛仙BOSS GameFuncID_PiaomiaoTask = 173 # 缥缈任务 # 以下为暂时无用的 GameFuncID_Truck = 33 # 运镖 GameFuncID_RunDaily = 34 # 日常跑环