#!/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_MaxGrade = 5 # ÔÝʱֻÕë¶Ô×é¶ÓçÎ翸±±¾ 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 == Def_MaxGrade: 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) if grade == Def_MaxGrade: familyID = curPlayer.GetFamilyID() if familyID: PlayerControl.FamilyNotify(familyID, "RefreshPiaomiaoSFB", [curPlayer.GetPlayerName(), ChConfig.Def_FBMapID_KillDevil]) 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 for i in range(curPlayer.GetMissionCount()): mission = curPlayer.GetMissionByIndex(i) missionID = mission.GetMissionID() questData = QuestManager.FindQuest(missionID) if not questData: continue if questData.Type == QuestCommon.Def_Mission_Type_Piaomiao and mission.GetState() != ChConfig.Def_Mission_State_NoAccept: GameWorld.DebugLog("ÒѾ­ÓнÓÁËçÎç¿ÈÎÎñ£¬ÎÞ·¨ÔÙ½Ó!missionID=%s" % missionID) return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PiaomiaoTaskTakeCount, todayTakeCount + 1) QuestCommon.SetPlayerMissionState(curPlayer, curMission, 1) curGrade = curMission.GetProperty(QuestCommon.Def_Mission_Grade) if curGrade == Def_MaxGrade: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PiaomiaoMaxGradeTaskID, curMission.GetMissionID()) 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