#!/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
|
|
|
|
|