#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.RemoteQuery.GY_Query_GMTTaskMarket
|
#
|
# @todo:ÌÚѶÈÎÎñ¼¯ÊÐ
|
# @author hxp
|
# @date 2016-09-18
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ÌÚѶÈÎÎñ¼¯ÊÐ
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2016-09-18 18:00"""
|
#-------------------------------------------------------------------------------
|
|
import PlayerQQ
|
import GameWorld
|
import QuestCommon
|
import ReadChConfig
|
import PlayerControl
|
#import PlayerPrestigeSys
|
import DataRecordPack
|
import ShareDefine
|
import PlayerPet
|
import ChConfig
|
import FBLogic
|
|
#---------------------------------------------------------------------
|
#È«¾Ö±äÁ¿
|
#---------------------------------------------------------------------
|
|
#±ê×¼·µ»ØÂëÈçÏ£º
|
#0: ²½ÖèÒÑÍê³É »ò ½±Àø·¢·Å³É¹¦
|
#1: Óû§ÉÐδÔÚÓ¦ÓÃÄÚ´´½¨½ÇÉ«
|
#2£ºÓû§ÉÐδÍê³É±¾²½Öè
|
#3£º¸Ã²½Öè½±ÀøÒÑ·¢·Å¹ý
|
#100: tokenÒѹýÆÚ
|
#101: token²»´æÔÚ
|
#102: ½±Àø·¢·Åʧ°Ü
|
#103: ÇëÇó²ÎÊý´íÎó
|
|
#{"ret":0,"msg":"OK","zoneid":"1"}
|
#{"ret":200,"msg":"²ÎÊý´íÎó","zoneid":"1"}
|
#×¢£º·µ»ØÂë0-200Ϊƽ̨±£Áô£¬ ¿ª·¢Õß×Ô¶¨Òå·µ»ØÂëÎñ±ØÔÚ200-10000Ö®¼ä¡£·µ»ØÂë±ØÐëÑϸñ×ñÊØ¹æ·¶£¬Èô²»×ñÊØ£¬½«³öÏÖÍâÍø¹ÊÕÏ¡£
|
|
Def_Ret_OK = 0
|
Def_Ret_NoFinish = 2
|
Def_Ret_AwardGot = 3
|
Def_Ret_TokenNotExist = 101
|
Def_Ret_AwardFail = 102
|
Def_Ret_ParamErr = 103
|
|
Def_CustomRet_ParamErr = 201 # ×Ô¶¨Òå²ÎÊý´íÎó
|
Def_CustomRet_Condition_Nonsupport = 202 # ÈÎÎñÌõ¼þ²»Ö§³Ö
|
|
(
|
Def_QQTM_MailContent, # ½±ÀøÓʼþÄÚÈÝÄ£°å
|
Def_QQTM_MailGetDays, # ½±ÀøÓʼþÓÐЧÌì
|
Def_QQTM_InfoDict, # ÈÎÎñÐÅÏ¢×Öµä
|
) = range(3)
|
|
#Â߼ʵÏÖ
|
## ÇëÇóÂß¼
|
# @param query_Type ÇëÇóÀàÐÍ
|
# @param query_ID Íæ¼ÒID
|
# @param packCMDList ·¢°üÃüÁî
|
# @param tick µ±Ç°Ê±¼ä
|
# @return "True" or "False" or ""
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def DoLogic(query_Type, query_ID, packCMDList, tick):
|
|
GameWorld.DebugLog("GY_Query_GMTTaskMarket %s" % packCMDList)
|
orderId, gmCmdDict = packCMDList
|
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(query_ID)
|
if not curPlayer or curPlayer.IsEmpty():
|
__GameServer_QueryPlayerResult(orderId, query_ID, curPlayer, {"ret":Def_Ret_TokenNotExist,"msg":"token²»´æÔÚ"})
|
return
|
|
#²ÎÊý: cmd Ö´ÐÐÃüÁî
|
# check: ¿ª·¢Õß½öÐèÒª²éѯÈÎÎñ²½ÖèÊÇ·ñÍê³É£¬·µ»Ø²½ÖèÍê³É״̬¡£
|
# check_award: ¿ª·¢ÕßÐèÒª²éѯÈÎÎñ²½ÖèÊÇ·ñÍê³É£¬Èô²½ÖèÒÑÍê³É£¬Ö±½Ó¸øÓû§·¢»õ£¨payitem£©£¬²¢·µ»Ø·¢»õÊÇ·ñ³É¹¦¡£
|
# award: ƽ̨֪ͨ¿ª·¢ÕßÖ±½Ó¸ø¸øÓû§·¢»õ£¬¿ª·¢Õß·µ»Ø·¢»õÊÇ·ñ³É¹¦¡£
|
cmd = gmCmdDict.get("cmd", '')
|
if not cmd or cmd not in ["check", "check_award", "award"]:
|
__GameServer_QueryPlayerResult(orderId, query_ID, curPlayer, {"ret":Def_Ret_ParamErr,"msg":"ÇëÇó²ÎÊý´íÎó(cmd)"})
|
return
|
|
#²ÎÊý: contractid # ÈÎÎñID, ÓɹãµãͨÈÎÎñ´´½¨ºó×Ô¶¯Éú³É
|
contractid = gmCmdDict.get("contractid", '')
|
if not contractid:
|
__GameServer_QueryPlayerResult(orderId, query_ID, curPlayer, {"ret":Def_Ret_ParamErr,"msg":"ÇëÇó²ÎÊý´íÎó(contractid)"})
|
return
|
|
#²ÎÊý: step ÈÎÎñ²½Öè
|
# ÈÎÎñµÄ²½Ö裬step´Ó1¿ªÊ¼¼Æ¡£step=1±íʾµÚÒ»²½£¬Ëĸö²½Öè¶¼ÊDZØÑ¡¡£
|
# µÚÒ»²½ÄÚÈݹ̶¨Îª½øÈëÓ¦Óã¬ÓÉÆ½Ì¨ÅжÏÓû§ÊÇ·ñÍê³É¡£
|
# µÚËIJ½ÄÚÈÝΪÁ¬ÐøÈýÌìµÇ½£¬ÓÉÆ½Ì¨ÅжÏÓû§ÊÇ·ñÍê³É¡£
|
# µÚ¶þ²½¡¢µÚÈý²½ÄÚÈݺÍÍê³ÉÅжϾùÓÉ¿ª·¢Õß×ÔÓÉʵÏÖ£¨ÄÚÈݲ»¿ÉΪÁ¬ÐøµÇ½¡¢³äÖµµÈÌõ¼þ£©
|
step = GameWorld.ToIntDef(gmCmdDict.get("step"), 0)
|
if step not in [1, 2, 3, 4]:
|
__GameServer_QueryPlayerResult(orderId, query_ID, curPlayer, {"ret":Def_Ret_ParamErr,"msg":"ÇëÇó²ÎÊý´íÎó(step)"})
|
return
|
|
#²ÎÊý: payitem µÀ¾ßÀñ°üid
|
# Èô±¾´Î»Øµ÷ÐèÒª·¢»õ£¨cmd×Ö¶ÎֵΪcheck_award »ò award£©£¬±¾×Ö¶ÎֵΪ¸Ã²½ÖèµÀ¾ßÀñ°üid£¬¿ª·¢ÕßÐèÖ±½Ó¸øÓû§·¢·Å¸ÃidµÄµÀ¾ßÀñ°ü¡£
|
# ÆäËûÇé¿ö£¬±¾×Ö¶ÎֵΪ¿Õ¡£
|
payitem = GameWorld.ToIntDef(gmCmdDict.get("payitem"), 0)
|
if cmd in ["check_award", "award"] and payitem <= 0:
|
__GameServer_QueryPlayerResult(orderId, query_ID, curPlayer, {"ret":Def_Ret_ParamErr,"msg":"ÇëÇó²ÎÊý´íÎó(payitem)"})
|
return
|
|
#²ÎÊý: billno # ·¢·Å½±ÀøÁ÷Ë®ºÅ£¬ÓÉÆ½Ì¨Éú³É£¬´«¸øÓ¦Óá£Ó¦ÓÃÐè¼Ç¼¸ÃÁ÷Ë®ºÅ£¬ÓÃÓÚ¿ª·¢ÉÌÓëÆ½Ì¨¶ÔÕÊ¡£
|
billno = gmCmdDict.get("billno", '')
|
|
##--------------------------- ÌÚѶÇëÇó½Ó¿Ú²ÎÊý¼ì²éÍê±Ï ---------------------------
|
|
qqtmCfg = ReadChConfig.GetEvalChConfig("QQTaskMarket")
|
taskMarketDict = qqtmCfg[Def_QQTM_InfoDict]
|
if contractid not in taskMarketDict:
|
__GameServer_QueryPlayerResult(orderId, query_ID, curPlayer, {"ret":Def_CustomRet_ParamErr,"msg":"²ÎÊý´íÎó(contractid)δÅäÖÃ"})
|
return
|
taskNum, conditionDict = taskMarketDict[contractid]
|
|
##--------------------------- ÒÔϾßÌåÂß¼ ---------------------------
|
|
if cmd == "check":
|
retMsg = __DoQQTM_Check(curPlayer, contractid, step, conditionDict)
|
|
elif cmd == "check_award":
|
retMsg = __DoQQTM_Check_Award(curPlayer, contractid, step, conditionDict, taskNum, payitem, billno, qqtmCfg)
|
|
# ½ø1£¬4 ²½Öè¿ÉÒÔÖ±½Ó·¢·Å½±Àø
|
elif cmd == "award" and step in [1, 4]:
|
retMsg = __DoQQTM_Award(curPlayer, contractid, step, taskNum, payitem, billno, qqtmCfg)
|
|
else:
|
retMsg = {"ret":Def_Ret_ParamErr,"msg":"ÇëÇó²ÎÊý´íÎó(cmd step)"}
|
|
__GameServer_QueryPlayerResult(orderId, query_ID, curPlayer, retMsg)
|
return
|
|
#---------------------------------------------------------------------
|
#Ö´Ðнá¹û
|
## Ö´Ðнá¹û
|
# @param curPlayer ·¢³öÇëÇóµÄÍæ¼Ò
|
# @param callFunName ¹¦ÄÜÃû³Æ
|
# @param funResult ²éѯµÄ½á¹û
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def DoResult(curPlayer, callFunName, funResult, tick):
|
return
|
|
def __DoQQTM_Check(curPlayer, contractid, step, conditionDict):
|
# ÓÐÐèÒª¼ì²éÔòÐèÒªÅäÖÃÌõ¼þ
|
if step not in conditionDict:
|
return {"ret":Def_CustomRet_ParamErr,"msg":"²ÎÊý´íÎó(step)δÅäÖÃ"}
|
|
conditionInfo = conditionDict[step]
|
conditionType = conditionInfo[0] # ÈÎÎñÌõ¼þÀàÐÍ
|
|
ret = Def_Ret_NoFinish
|
|
# µÈ¼¶
|
if conditionType == "LV":
|
if curPlayer.GetLV() >= conditionInfo[1]:
|
ret = Def_Ret_OK
|
|
# ¼Ò×å
|
elif conditionType == "Family":
|
if curPlayer.GetFamilyID() > 0:
|
ret = Def_Ret_OK
|
|
# # ³èÎï
|
# elif conditionType == "Pet":
|
# petNPCID, petLV = conditionInfo[1:]
|
# petItemIndex = PlayerPet.GetPetDataItemIndexByNPCID(curPlayer, petNPCID)
|
# if petItemIndex >= 0:
|
# petDataItem = PlayerPet.GetPetDataItemByIndex(curPlayer, petItemIndex)
|
# if petDataItem and petDataItem.GetUserAttr(ShareDefine.Def_IudetPet_StarLV) >= petLV:
|
# ret = Def_Ret_OK
|
|
# # ¹Ù¾ôÐǼ¶
|
# elif conditionType == "Official":
|
# officialLV, star = conditionInfo[1:]
|
# curOfficialLV = curPlayer.GetOfficialRank()
|
# curStar = PlayerPrestigeSys.GetOfficialStarIndex(curPlayer)
|
# if curOfficialLV > officialLV or (curOfficialLV == officialLV and curStar >= star):
|
# ret = Def_Ret_OK
|
|
# # ×øÆï
|
# elif conditionType == "Horse":
|
# classLV, starLV = conditionInfo[1:]
|
# curClassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Horser_ClassLV, 0, ChConfig.Def_PDictType_Horse)
|
# curStarLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Horser_StarLV, 0, ChConfig.Def_PDictType_Horse)
|
# if curClassLV > classLV or (curClassLV == classLV and curStarLV >= starLV):
|
# ret = Def_Ret_OK
|
|
# ²ÎÓ븱±¾
|
elif conditionType == "FBEnter":
|
mapID = conditionInfo[1]
|
if FBLogic.GetHadEnterFB(curPlayer, mapID):
|
ret = Def_Ret_OK
|
|
# Íê³ÉÈÎÎñ
|
elif conditionType == "Mission":
|
missionID = conditionInfo[1]
|
if QuestCommon.GetHadFinishMainMission(curPlayer, missionID):
|
ret = Def_Ret_OK
|
|
# ÆäËûÌõ¼þÖ§³ÖÔÚ´ËÀ©Õ¹
|
else:
|
return {"ret":Def_CustomRet_Condition_Nonsupport,"msg":"²»Ö§³Ö¸ÃÌõ¼þ²éѯ(%s)" % conditionType}
|
|
return {"ret":ret,"msg":"²½ÖèÒÑÍê³É" if ret == Def_Ret_OK else "Óû§ÉÐδÍê³É±¾²½Öè"}
|
|
def __DoQQTM_Check_Award(curPlayer, contractid, step, conditionDict, taskNum, payitem, billno, qqtmCfg):
|
retMsg = __DoQQTM_Check(curPlayer, contractid, step, conditionDict)
|
if retMsg.get("ret") == Def_Ret_OK:
|
retMsg = __DoQQTM_Award(curPlayer, contractid, step, taskNum, payitem, billno, qqtmCfg)
|
return retMsg
|
|
def __DoQQTM_Award(curPlayer, contractid, step, taskNum, payitem, billno, qqtmCfg):
|
ret = Def_Ret_AwardFail
|
msg = "½±Àø·¢·Åʧ°Ü"
|
tmAwardRecord = PlayerQQ.__GetQQPDictValue(curPlayer, ChConfig.Def_PDict_QQTaskMarketRecord % taskNum)
|
if tmAwardRecord&pow(2, step):
|
ret = Def_Ret_AwardGot
|
msg = "¸Ã²½Öè½±ÀøÒÑ·¢·Å¹ý"
|
else:
|
isOK = PlayerControl.SendMail("", qqtmCfg[Def_QQTM_MailContent], qqtmCfg[Def_QQTM_MailGetDays],
|
[curPlayer.GetPlayerID()], [(payitem, 1, 1)])
|
if isOK:
|
PlayerQQ.__SetQQPDictValue(curPlayer, ChConfig.Def_PDict_QQTaskMarketRecord % taskNum, tmAwardRecord|pow(2, step))
|
ret = Def_Ret_OK
|
msg = "½±Àø·¢·Å³É¹¦"
|
addDataDict = {"contractid":contractid, "step":step, "taskNum":taskNum, "payitem":payitem, "billno":billno}
|
DataRecordPack.DR_FuncGiveItem(curPlayer, "QQTaskMarketMail", addDataDict)
|
|
return {"ret":ret,"msg":msg}
|
|
def __GameServer_QueryPlayerResult(orderId, query_ID, curPlayer, retMsg):
|
GameWorld.Log("GMT_TaskMarket retMsg=%s" % retMsg)
|
|
playerName = "" if not curPlayer else curPlayer.GetPlayerName()
|
accID = "" if not curPlayer else curPlayer.GetAccID()
|
|
resultMsg = str([orderId, retMsg, 'GMT_TaskMarket'])
|
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'GMToolResult', resultMsg, len(resultMsg))
|
DataRecordPack.DR_ToolGMOperate(query_ID, playerName, accID, 'GMT_TaskMarket', resultMsg)
|
return
|
|
|
|