hxp
2020-01-11 2014b1be37a38d75d8b5f97311f9a0b07e27cfd1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
#!/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_PiaomiaoTaskFinishCount, 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):
    ## ½ÓçÎç¿ÈÎÎñ
    
    finishCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PiaomiaoTaskFinishCount)
    maxFinishCount = IpyGameDataPY.GetFuncCfg("PiaomiaoTask", 1)
    if finishCount >= maxFinishCount:
        GameWorld.DebugLog("ÒÑ´ï½ñÈÕÈÎÎñÉÏÏÞ!finishCount=%s" % finishCount)
        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
    
    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):
    ## Íê³ÉçÎç¿ÈÎÎñ
    
    finishTaskCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PiaomiaoTaskFinishCount) + 1
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PiaomiaoTaskFinishCount, finishTaskCount)
    
    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("Íê³ÉçÎç¿ÈÎÎñ: finishTaskCount=%s,missionID=%s,exp=%s,goldPaper=%s,itemID=%s,delItemID=%s" 
                       % (finishTaskCount, 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.SetPlayerMissionState(curPlayer, curMission, ChConfig.Def_Mission_State_NoAccept)
    EventShell.NotifyOneMission(curPlayer, curMission, isNotifyAll=False)
    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.FinishCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PiaomiaoTaskFinishCount)
    taskInfo.RefreshCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PiaomiaoTaskRefreshCount)
    taskInfo.TaskIDList = taskIDList
    taskInfo.TaskCount = len(taskIDList)
    NetPackCommon.SendFakePack(curPlayer, taskInfo)
    return