#!/usr/bin/python
|
#-*- coding: GBK -*-
|
#----------------------------------------------------------------------------------------------------
|
#
|
#----------------------------------------------------------------------------------------------------
|
#
|
##@package PlayerNewGuyCard.py
|
# ÐÂÊÖ¿¨
|
#
|
# @author wdb
|
# @date 2012-05-07
|
# @version 3.2
|
#
|
# ÐÞ¸Äʱ¼ä ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ
|
# @change: "2012-05-07 18:30" wdb ÐÞ¸ÄʹÓÃÒ»¸ö×Öµä¼Ç¼ʹÓÃÐÂÊÖ¿¨Çé¿ö
|
# @change: "2012-05-14 15:30" wdb ´úÂëÓÅ»¯ÐÞ¸Ä
|
# @change: "2012-06-15 11:00" wdb δ¼Ç¼·À·¶Ê±¼ä¼ä¸ô
|
# @change: "2012-06-19 12:00" wdb c++½Ó¿ÚÐÞ¸Ä
|
# @change: "2012-06-21 15:30" wdb Ôö¼ÓʹÓÃgm¹¤¾ßÔÙdbÖвåÈëÐÂÊÖ¿¨·½Ê½
|
# @change: "2012-06-27 12:00" wdb È¥³ýÐÂÊÖ¿¨ÀàÐÍ×î´ó29ÏÞÖÆ£¬´óÓë29ÀàÐͲ»¼Ç¼´óÍæ¼Ò×Öµä
|
# @change: "2012-07-05 11:00" wdb ²éѯ·µ»Ø½á¹ûÀàÐÍСÓÚ1ʱ£¬Åж¨Îª¿¨ºÅ²»ÕýÈ·
|
# @change: "2012-07-05 12:00" wdb È¥³ýÅä±íÊÇ·ñÕýÈ·ÅжÏ
|
# @change: "2013-11-14 16:30" hxp »Ö¸´ÐÂÊÖ¿¨¹¦ÄÜ
|
# @change: "2014-12-12 16:00" hxp ÐÞ¸ÄÐÂÊÖ¿¨Öظ´Ê¹ÓùæÔòÂß¼£»¿¨ÀàÐÍ×î´óÖ§³ÖÀàÐ͵½255
|
# @change: "2014-12-28 23:10" ljd Ôö¼ÓÖ¸¶¨Õ˺ÅÐÂÊÖ¿¨Ê¹ÓÃ
|
# @change: "2014-12-29 15:30" hxp Ö¸¶¨Õ˺ÅÐÂÊÖ¿¨Ê¹ÓÃÔö¼ÓÀۼƳäÖµ×êʯÊýÏÞÖÆ
|
# @change: "2015-01-07 14:10" ljd ÐÞ¸ÄÖ¸¶¨Õ˺ÅÐÂÊÖ¿¨ÑéÖ¤¹æÔò
|
# @change: "2015-05-25 19:30" hxp Ôö¼ÓͨÓÃÐÂÊÖ¿¨
|
# @change: "2015-06-06 15:30" hxp ÐÞ¸´ÈÕÖ¾Êä³ö±¨´í
|
# @change: "2015-06-08 20:30" hxp Ôö¼ÓÁ÷Ïòʼþ»ã±¨
|
# @change: "2015-08-13 14:00" ljd ¿ÉÖØ¸´ÁìÈ¡µÄ¿¨ÏÞÖÆÈÕÁìÈ¡´ÎÊý
|
# @change: "2016-07-30 19:00" hxp Ö¸¶¨Õ˺ÅÐÂÊÖ¿¨Ö§³Öͨ·þ¿¨ºÅ
|
# @change: "2016-08-15 20:00" hxp ´úÂëÕûÀí£»Ôö¼Ó¿ÉÅäÖÃÓÐЧÈÕÆÚ
|
# @change: "2016-08-31 20:00" hxp ͨÓÿ¨¿É°ó¶¨³£¹æ¿¨ÀàÐÍ; ͳ¼ÆÐÂÊÖ¿¨Ê¹ÓÃʼþ
|
# @change: "2017-05-26 14:00" hxp Ôö¼ÓаæÃ½Ì忨·¢·Å½±ÀøÖ§³Ö
|
# @change: "2017-07-01 15:30" hxp ƽ̨ÐÅÏ¢¸ÄΪ´ÓÍæ¼ÒÕ˺ÅÖÐÈ¡£¬Ö§³Ö»ì·þ
|
#---------------------------------------------------------------------
|
#"""Version = 2017-07-01 15:30"""
|
#---------------------------------------------------------------------
|
#µ¼Èë
|
import GameWorld
|
import IPY_GameWorld
|
import ChConfig
|
import ReadChConfig
|
import PlayerControl
|
import ItemControler
|
import EventReport
|
import ItemCommon
|
import DataRecordPack
|
import PlayerCoin
|
|
import md5
|
#---------------------------------------------------------------------
|
# Ö¸¶¨Õ˺ÅÉú³ÉµÄÐÂÊÖ¿¨±êʶ
|
MarkIdCardFlag = 'v'
|
# GM¹¤¾ßÉú³ÉµÄÐÂÊÖ¿¨±êÖ¾
|
StoreInDBCardFlag = 'n'
|
|
(
|
Def_NCard_KeyList, # Éú³É¿¨ËùÓõÄkeyÁбí
|
Def_NCard_Notify, # ÒÑÁìÈ¡¹ýµÄÌáʾ
|
Def_NCard_RepeatCnt, # ÿÈÕ¿ÉÖØ¸´ÁìÈ¡´ÎÊý
|
Def_NCard_ItemInfo, # (ÎïÆ·ID, ÎïÆ·ÊýÁ¿, ÊÇ·ñ°ó¶¨)
|
Def_NCard_ValidTime, # ÓÐЧÈÕÆÚ¸ñʽyyyy-MM-dd hh:mm:ss
|
Def_NCard_WriteEvent, # ÊÇ·ñ¼Ç¼ʹÓÃʼþ
|
) = range(6)
|
|
#=======================================================================================================================
|
#//A5 10 ʹÓÃÐÂÊÖ¿¨ #tagUseNewGuyCard
|
#
|
#struct tagUseNewGuyCard
|
#
|
#{
|
# tagHead Head;
|
# BYTE CodeStrLen;
|
# char CodeStr[CodeStrLen]; //size = CodeStrLen
|
#};
|
#=======================================================================================================================
|
## ʹÓÃÐÂÊÖ¿¨
|
# @param index Ë÷Òý
|
# @param clientData ·â°ü½á¹¹Ìå
|
# @param tick ʱ¼ä´Á
|
# @return None
|
def UseNewGuyCard(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_NewGuyCard) \
|
<= ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_NewGuyCard]:
|
#ÐÂÊÖ¿¨²éѯʱ¼ä¼ä¸ô
|
return
|
|
codeStr = clientData.CodeStr
|
GameWorld.DebugLog("ʹÓÃÐÂÊÖ¿¨ codeStr=%s" % codeStr, curPlayer.GetPlayerID())
|
|
curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_NewGuyCard, tick)
|
|
# ÕýÔÚ²éѯÖÐ
|
if curPlayer.GetQueryNewGuyCardState() == IPY_GameWorld.qngcsQuerying:
|
GameWorld.DebugLog(" ÕýÔÚ²éѯÖÐ")
|
return
|
|
# ±³°ü¿Õ¼ä²»×ã
|
if not ItemCommon.CheckPackHasSpace(curPlayer, IPY_GameWorld.rptItem):
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [IPY_GameWorld.rptItem])
|
return
|
|
# ¿¨ÖÖ1: ͨÓÿ¨¼ì²â
|
if UseCommonNewGuyCard(curPlayer, codeStr):
|
return
|
|
# ¿¨ÖÖ2: Ö¸¶¨Õ˺ſ¨¼ì²â
|
if UseAccIDNewGuyCard(curPlayer, codeStr):
|
return
|
|
# ¿¨ÖÖ3: GM¹¤¾ßÉú³ÉµÄп¨£¬Ê¹ÓÃÇé¿öÒÑÈ«²¿¼Ç¼ÔÚÊý¾Ý¿âÖУ¬Ö±½Ó²éѯ
|
if codeStr.startswith(StoreInDBCardFlag):
|
# ÇëÇó¿¨ÊÇ·ñ±»Ê¹Óùý
|
GameWorld.DebugLog(" ÊÇGM¹¤¾ßÉú³ÉµÄ¿¨, ²éѯGM¹¤¾ßÉú³É¿¨ÊÇ·ñ±»Ê¹Óùý")
|
curPlayer.SendQueryNewGuyCardState(codeStr)
|
return
|
|
# ¿¨ÖÖ4: ·ÇGM¹¤¾ßÉú³ÉµÄ¾É¿¨£¬Òª½âÎö»ñµÃ¿¨µÄÀàÐÍ
|
curCardType, notifyMsg, dailyGetCnt = GetNewGuyCardType(codeStr)
|
|
GameWorld.DebugLog(" ·ÇGM¹¤¾ßÉú³ÉµÄ¾É¿¨,curCardType=%s,notifyMsg=%s,dailyGetCnt=%s" % (curCardType, notifyMsg, dailyGetCnt))
|
|
# ¼Ù¿¨
|
if curCardType <= 0:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_pan_161234")
|
return
|
|
# ²»¿ÉÖØ¸´ÁìÈ¡µÄ£¬ÑéÖ¤Íæ¼ÒÊÇ·ñÒÑÓùý¸ÃÀàÐÍ¿¨; ¿ÉÖØ¸´ÁìÈ¡µÄÑé֤ÿÈÕʹÓôÎÊýÉÏÏÞ
|
if not dailyGetCnt:
|
if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_UseNewGuyCardState, curCardType):
|
PlayerControl.NotifyCode(curPlayer, notifyMsg)
|
return
|
else:
|
repeatGotNum = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_UseNewGuyCardNum % curCardType)
|
if repeatGotNum >= dailyGetCnt:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_lwh_372238")
|
return
|
|
# ÇëÇó¿¨ÊÇ·ñ±»Ê¹Óùý
|
curPlayer.SendQueryNewGuyCardState(codeStr)
|
|
# ¼Ç¼²éѯµÄÀàÐÍ£¬ºÍkeyµÄλÖÃ
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_QueryNewGuyCardType, curCardType)
|
return
|
|
## ͨÓÃÐÂÊÖ¿¨Ê¹ÓÃ
|
# @param curPlayer
|
# @param codeStr ¿¨ºÅ
|
# @return False-·Ç¸ÃÖÖÀ࿨; True-ÊǸÃÖÖÀ࿨
|
def UseCommonNewGuyCard(curPlayer, codeStr):
|
CommonCardDict = ReadChConfig.GetEvalChConfig("CommonCardData")
|
if codeStr not in CommonCardDict:
|
GameWorld.DebugLog(" ·ÇͨÓÿ¨£¡%s" % (codeStr))
|
return False
|
|
# ÒÔϱØÐë¶¼·µ»Ø True, ´ú±íÊǸÿ¨ÖÖ
|
cardIndex, itemInfo, hadUseNotify, needLV, needGold, validTime, cardType, isEventLog = CommonCardDict[codeStr]
|
if needLV > 0 and curPlayer.GetLV() < needLV:
|
PlayerControl.NotifyCode(curPlayer, "LvErr")
|
return True
|
|
if needGold > 0:
|
Def_CoinRate = PlayerCoin.GetCoinRate()
|
coinPointTotal = curPlayer.GetChangeCoinPointTotal()
|
if coinPointTotal * Def_CoinRate < needGold:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_676165", [needGold])
|
return True
|
|
isUsed = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_CommonNewGuyCardState, cardIndex)
|
if isUsed:
|
PlayerControl.NotifyCode(curPlayer, hadUseNotify)
|
return True
|
|
# ´óÓÚ0Ôò¶ÔÓ¦ NewGuyCardKey.txt ¼° StoreInDBCardData.txt ÖеĿ¨ÀàÐÍ, Á½Õß°ó¶¨, ½ö¿Éͨ¹ýÆäÖÐÒ»ÖÖ·½Ê½Ê¹ÓÃÒ»´Î
|
if cardType > 0:
|
if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_UseNewGuyCardState, cardType):
|
PlayerControl.NotifyCode(curPlayer, hadUseNotify)
|
return True
|
|
if validTime != "" and GameWorld.GetPastSeconds(validTime) >= 0:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_pan_795514")
|
return True
|
|
#¸øÓèÎïÆ·
|
itemID, itemCnt, isBand = itemInfo
|
if not ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isBand, [IPY_GameWorld.rptItem]):
|
#±³°ü¿Õ¼ä²»×ã
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [IPY_GameWorld.rptItem])
|
return True
|
|
GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_CommonNewGuyCardState, cardIndex, 1) # ¸üиÃÍæ¼ÒÒÑʹÓøÿ¨
|
#PlayerControl.NotifyCode(curPlayer, "ObtainRes01", [itemID, itemCnt])
|
DoUseReport(curPlayer, codeStr, "CommonCard", itemID, itemCnt) # ¼ÇÂ¼Íæ¼ÒʹÓÃÐÂÊÖ¿¨
|
|
if cardType > 0:
|
GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_UseNewGuyCardState, cardType, 1)
|
|
if isEventLog:
|
itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
|
itemName = itemID if not itemData else itemData.GetName()
|
#EventReport.WriteEvent_custom_events(curPlayer, EventReport.Def_Custom_Events_CommonCard % codeStr, itemName)
|
|
GameWorld.DebugLog("ͨÓÿ¨Ê¹ÓÃOK£¡codeStr=%s,cardType=%s,itemID=%s,itemCnt=%s" % (codeStr, cardType, itemID, itemCnt))
|
return True
|
|
## ʹÓÃÖ¸¶¨Õ˺ſ¨ºÅ
|
# @param curPlayer
|
# @param codeStr ¿¨ºÅ
|
# @return False-·Ç¸ÃÖÖÀ࿨; True-ÊǸÃÖÖÀ࿨
|
def UseAccIDNewGuyCard(curPlayer, codeStr):
|
idflagLen = len(MarkIdCardFlag)
|
if not (len(codeStr) == idflagLen + 32 and MarkIdCardFlag == codeStr[:idflagLen]):
|
GameWorld.DebugLog(" ·ÇÖ¸¶¨Õ˺ſ¨ºÅ£¡%s" % (codeStr))
|
return False
|
|
# ÒÔϱØÐë¶¼·µ»Ø True, ´ú±íÊǸÿ¨ÖÖ
|
cardBack = CheckMarkIdCardRule(curPlayer, codeStr)
|
if cardBack == None:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_pan_161234")
|
return True
|
|
cardIndex, cardInfo = cardBack
|
codeKey, itemInfo, hadUseNotify, validTime = cardInfo
|
|
isUsed = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_IDNewGuyCardState, cardIndex)
|
if isUsed:
|
PlayerControl.NotifyCode(curPlayer, hadUseNotify)
|
return True
|
|
if validTime != "" and GameWorld.GetPastSeconds(validTime) >= 0:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_pan_795514")
|
return True
|
|
#¸øÓèÎïÆ·
|
itemID, itemCnt, isBand = itemInfo
|
GameWorld.DebugLog(" itemInfo=%s" % str(itemInfo))
|
if not ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isBand, [IPY_GameWorld.rptItem]):
|
#±³°ü¿Õ¼ä²»×ã
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [IPY_GameWorld.rptItem])
|
return True
|
|
GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_IDNewGuyCardState, cardIndex, 1) # ¸üиÃÍæ¼ÒÒÑʹÓøÿ¨
|
#PlayerControl.NotifyCode(curPlayer, "ObtainRes01", [itemID, itemCnt])
|
DoUseReport(curPlayer, codeStr, "AccIDCard", itemID, itemCnt) # ¼ÇÂ¼Íæ¼ÒʹÓÃÐÂÊÖ¿¨
|
|
GameWorld.DebugLog("Ö¸¶¨Õ˺ſ¨Ê¹ÓÃOK£¡codeKey=%s,codeStr=%s,cardIndex=%s,itemID=%s,itemCnt=%s"
|
% (codeKey, codeStr, cardIndex, itemID, itemCnt), curPlayer.GetPlayerID())
|
return True
|
|
## ÊÇ·ñ·ûºÏÖ¸¶¨Õ˺ÅÉú³Éп¨¹æÔò
|
# @param cardCode ¿¨ºÅ
|
# @return ÐòºÅ
|
def CheckMarkIdCardRule(curPlayer, cardCode):
|
idName = curPlayer.GetAccID()
|
platform = GameWorld.GetPlayerPlatform(curPlayer)
|
platFormIdName = GameWorld.GetPlatformAccID(idName)
|
markIdCardData = ReadChConfig.GetEvalChConfig("IDMarkCardData")
|
for cardIndex, cardInfo in markIdCardData.items():
|
codeKey = cardInfo[0]
|
markMD5 = md5.md5('wyOu' + platform + codeKey).hexdigest()
|
|
# ƽ̨Õ˺Åͨ·þ¿¨ºÅ
|
md5PlatFormId = md5.md5(markMD5 + platFormIdName).hexdigest()
|
if MarkIdCardFlag + md5PlatFormId == cardCode:
|
return cardIndex, cardInfo
|
|
# ¶ÔÓ¦ÓÎÏ·Çø·þÕ˺ſ¨ºÅ
|
md5Id = md5.md5(markMD5 + idName).hexdigest()
|
if MarkIdCardFlag + md5Id == cardCode:
|
return cardIndex, cardInfo
|
return
|
|
## =================================================================================================
|
|
## ÑéÖ¤²¢»ñµÃÐÂÊÖ¿¨µÄÀàÐÍ
|
# @param codeStr ¿¨ºÅ
|
# @return None
|
def GetNewGuyCardType(codeStr):
|
curCardType = 0
|
notifyMsg = ""
|
dailyGetCnt = 0 # ÿÈÕ¿ÉÖØ¸´ÁìÈ¡´ÎÊý
|
NewGuyCardKeyDict = ReadChConfig.GetEvalChConfig("NewGuyCardKey")
|
if NewGuyCardKeyDict == {} or NewGuyCardKeyDict == None:
|
return curCardType, notifyMsg, dailyGetCnt
|
|
# »ñµÃ¿¨µÄË÷Òý
|
keyStr, cardIndex = GetCardInfo(codeStr)
|
|
# ÊÇ·ñÊÇÐÂÊÖ¿¨»òÕßýÌ忨
|
for cardType, values in NewGuyCardKeyDict.items():
|
|
for key in values[Def_NCard_KeyList]:
|
|
# ÊÇ·ñÓëkeyÆ¥Åä
|
if GetRealCardStr(keyStr, cardIndex, key) != codeStr:
|
continue
|
|
curCardType = cardType
|
notifyMsg = values[Def_NCard_Notify]
|
dailyGetCnt = values[Def_NCard_RepeatCnt]
|
break
|
|
return curCardType, notifyMsg, dailyGetCnt
|
|
|
## »ñµÃ¶ÔÓ¦ÕýÈ·µÄ¿¨ºÅ
|
# @param codeStr ¿¨ºÅ
|
# @param mark ÑéÖ¤key
|
# @return None
|
def GetRealCardStr(keyStr, cardIndex, mark):
|
key = 'CJC729058'
|
|
#Ë÷Òý×Ö·û·±¶
|
markMD5 = md5.md5('wyOu' + mark).hexdigest()
|
realStr = str(cardIndex) * 2 + markMD5 + key
|
result = md5.md5(realStr).hexdigest()
|
|
return (result[:3] + keyStr + result[-3:])
|
|
|
## »ñµÃ¿¨ºÅÐÅÏ¢
|
# @param codeStr ¿¨ºÅ
|
# @return None
|
def GetCardInfo(codeStr):
|
xorkey = 11784950
|
|
cardIndex = -1
|
keyStr = ''
|
|
if len(codeStr) <= 6:
|
return keyStr, cardIndex
|
|
# È¥³ý¼ÓÃÜ×Ö¶Î
|
keyStr = codeStr[3:]
|
keyStr = keyStr[:-3]
|
|
try:
|
indexNum = int(keyStr, 16)
|
except ValueError:
|
return keyStr, cardIndex
|
|
cardIndex = indexNum ^ xorkey
|
return keyStr, cardIndex
|
|
|
## ²éѯ»Ø¸´
|
# @param index Ë÷Òý
|
# @param tick ʱ¼ä´Á
|
# @return None
|
def QueryNewGuyCardState(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
# ÒѾʹÓùý
|
if curPlayer.GetNewGuyCardIsUsed():
|
PlayerControl.NotifyCode(curPlayer, "GeRen_pan_543685")
|
return
|
|
dbValidTime = curPlayer.GetNewGuyCardValidTime()
|
if dbValidTime != '':
|
# ½Ó¿ÚÖÐΪµ±Ç°Ê±¼ä¼õ´«Èë²ÎÊýʱ¼ä, ½á¹û´óÓÚ0£¬Ôò¿¨ÒѹýÆÚ
|
if GameWorld.GetPastSeconds(dbValidTime) >= 0:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_pan_795514")
|
return
|
|
# »ñµÃµ±Ç°µÄÐÂÊÖ¿¨ÐÅÏ¢
|
newGuyCardStr = curPlayer.GetNewGuyCardID()
|
validTime = ""
|
itemInfo = None
|
dailyGetCnt = 0 # ÿÈÕ¿ÉÖØ¸´ÁìÈ¡´ÎÊý
|
isWriteEvent = False # ÊÇ·ñдʹÓÃʼþ
|
|
GameWorld.DebugLog(" ÐÂÊÖ¿¨Ê¹Óûظ´£ºnewGuyCardStr=%s" % (newGuyCardStr), curPlayer.GetPlayerID())
|
|
# ÅжÏÊÇ·ñΪgm¹¤¾ßÉú³ÉµÄп¨
|
if newGuyCardStr.startswith(StoreInDBCardFlag):
|
curCardType = curPlayer.GetNewGuyCardCardType()
|
GameWorld.DebugLog(" GM¹¤¾ßÉú³ÉµÄDBп¨ curCardType=%s" % curCardType)
|
if curCardType <= 0:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_pan_161234")
|
return
|
|
# »ñµÃÎïÆ·ÐÅÏ¢
|
StoreInDBCardData = ReadChConfig.GetEvalChConfig("StoreInDBCardData")
|
cardTypeInfo = StoreInDBCardData.get(curCardType)
|
if cardTypeInfo == None:
|
return
|
|
itemInfo, notifyMsg, dailyGetCnt, validTime = cardTypeInfo
|
|
# Íæ¼ÒÒÑÓùý¸ÃÀàÐÍ¿¨
|
if not dailyGetCnt and GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_UseNewGuyCardState, curCardType):
|
PlayerControl.NotifyCode(curPlayer, notifyMsg)
|
return
|
|
else:
|
curCardType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_QueryNewGuyCardType)
|
GameWorld.DebugLog(" Ëã·¨Éú³ÉµÄ¿¨ curCardType=%s" % (curCardType))
|
|
# »ñÈ¡¿¨µÄkey
|
newGuyCardkeyDict = ReadChConfig.GetEvalChConfig("NewGuyCardKey")
|
cardTypeInfo = newGuyCardkeyDict.get(curCardType)
|
if cardTypeInfo == None:
|
return
|
|
dailyGetCnt = cardTypeInfo[Def_NCard_RepeatCnt]
|
itemInfo = cardTypeInfo[Def_NCard_ItemInfo]
|
validTime = cardTypeInfo[Def_NCard_ValidTime]
|
isWriteEvent = cardTypeInfo[Def_NCard_WriteEvent]
|
|
if validTime != "" and GameWorld.GetPastSeconds(validTime) >= 0:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_pan_795514")
|
return
|
|
if itemInfo == None:
|
GameWorld.ErrLog('QueryNewGuyCardResult-> Get new guy card item info error:None')
|
return
|
|
# ²»¿ÉÖØ¸´ÁìÈ¡µÄ¿¨, ÉèÖøÄÖÖ¿¨ÒÑÁìÈ¡¹ý
|
if not dailyGetCnt:
|
GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_UseNewGuyCardState, curCardType, 1)
|
else:
|
repeatGotNumKey = ChConfig.Def_Player_Dict_UseNewGuyCardNum % curCardType
|
repeatGotNum = curPlayer.NomalDictGetProperty(repeatGotNumKey)
|
if repeatGotNum >= dailyGetCnt:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_lwh_372238")
|
return
|
PlayerControl.NomalDictSetProperty(curPlayer, repeatGotNumKey, repeatGotNum + 1)
|
|
#¸øÓèÎïÆ·
|
itemID, itemCnt, isBand = itemInfo
|
if not ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isBand, [IPY_GameWorld.rptItem]):
|
#±³°ü¿Õ¼ä²»×ã
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [IPY_GameWorld.rptItem])
|
return
|
|
#PlayerControl.NotifyCode(curPlayer, "ObtainRes01", [itemID, itemCnt]) # »ñµÃÎïÆ·Ìáʾ
|
curPlayer.SendUpdateNewGuyCardState(newGuyCardStr, True, '', curCardType, validTime) # ¸ü¸ÄÐÂÊÖ¿¨Ê¹ÓÃ״̬
|
DoUseReport(curPlayer, newGuyCardStr, curCardType, itemID, itemCnt, isWriteEvent) # ¼ÇÂ¼Íæ¼ÒʹÓÃÐÂÊÖ¿¨
|
|
GameWorld.DebugLog(" ÐÂÊÖ¿¨Ê¹ÓÃOK£¡newGuyCardStr=%s,curCardType=%s,dailyGetCnt=%s,itemID=%s,itemCnt=%s"
|
% (newGuyCardStr, curCardType, dailyGetCnt, itemID, itemCnt))
|
return
|
|
|
## ʹÓÃÐÂÊÖ¿¨¼Ç¼»ã±¨
|
def DoUseReport(curPlayer, newGuyCardStr, curCardType, itemID, itemCnt, isWriteEvent=False):
|
DataRecordPack.DR_UseNewGuyCard(curPlayer, newGuyCardStr, curCardType, itemID, itemCnt)
|
#===========================================================================
|
# playerName = curPlayer.GetPlayerName()
|
# eventParam = "RoleID=%s,LV=%s,LVEx=%s,CreateRoleTime=%s,CardStr=%s,CardType=%s,ItemID=%s,ItemCount=%s" \
|
# % (playerName, curPlayer.GetLV(), curPlayer.GetLVEx(), curPlayer.GetCreateRoleTime(), \
|
# newGuyCardStr, curCardType, itemID, itemCnt)
|
# EventReport.EventReport(5015, eventParam, curPlayer)
|
#
|
# if isWriteEvent:
|
# itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
|
# itemName = itemID if not itemData else itemData.GetName()
|
# EventReport.WriteEvent_custom_events(curPlayer, EventReport.Def_Custom_Events_NewbieCard % curCardType, itemName)
|
#===========================================================================
|
return
|
|
## ÐÂÊÖ¿¨OnDay
|
# @param curPlayer
|
# @return
|
def NewGuyCardOnday(curPlayer):
|
# Ëã·¨Éú³ÉµÄÐÂÊÖ¿¨
|
NewGuyCardKeyDict = ReadChConfig.GetEvalChConfig("NewGuyCardKey")
|
for cardType, cardData in NewGuyCardKeyDict.items():
|
if cardData[Def_NCard_RepeatCnt] <= 0:
|
continue
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_UseNewGuyCardNum % cardType, 0)
|
|
# ²åÈëdbµÄÐÂÊÖ¿¨
|
StoreInDBCardDataDict = ReadChConfig.GetEvalChConfig("StoreInDBCardData")
|
for dbCardType, dbCardData in StoreInDBCardDataDict.items():
|
if dbCardData[2] <= 0:
|
continue
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_UseNewGuyCardNum % dbCardType, 0)
|
|
return
|
|
def OnGMTGiveMediaCardAwardItem(curPlayer, cardType, cardCode, cardState):
|
'''
|
GM¹¤¾ß·¢·ÅýÌ忨½±ÀøÎïÆ·, ÕâÀïÖ»×ö·¢·Å½±ÀøÂß¼£¬¿¨µÄºÏ·¨ÐÔ¼°Ê¹ÓüǼÔÚýÌ忨ÖÐÐÄ·þÎñÆ÷ÅжÏ
|
@param cardType: ýÌ忨ÖÐÐÄ·þÎñÆ÷ÉèÖõĿ¨ÀàÐÍ
|
@param cardCode: ýÌ忨Âë
|
@param cardState: ¸ÃÍæ¼Òµ±Ç°¿¨ÀàÐÍʹÓÃ״̬£¬ 0 ²»¿ÉÓã¬1.¿ÉÓ÷¢·Å½±Àø £¬2.Òѱ»ËûÈËʹÓÃ
|
'''
|
if cardState == 0:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_pan_161234")
|
return
|
if cardState == 2:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_pan_543685")
|
return
|
|
if cardState != 1:
|
GameWorld.DebugLog("¸ÃýÌ忨״̬²»´¦Àí: cardState=%s" % cardState)
|
return
|
|
if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_UseMediaCardState, cardType):
|
PlayerControl.NotifyCode(curPlayer, "GeRen_admin_327925")
|
return
|
|
platform = GameWorld.GetPlayerPlatform(curPlayer)
|
MediaCardDict = ReadChConfig.GetEvalChConfig("MediaCard")
|
commMediaCardDict, platformMediaCardDict = MediaCardDict
|
|
cardInfo = None
|
if cardType in commMediaCardDict:
|
cardInfo = commMediaCardDict[cardType]
|
elif platform in platformMediaCardDict:
|
curPlatformCardDict = platformMediaCardDict[platform]
|
if cardType in curPlatformCardDict:
|
cardInfo = curPlatformCardDict[cardType]
|
|
if cardInfo == None:
|
GameWorld.ErrLog("ÕÒ²»µ½¸ÃýÌ忨ÀàÐÍÅäÖÃ, cardType=%s,platform=%s" % (cardType, platform))
|
return
|
awardItemMark, isWriteEvent = cardInfo
|
MediaCardAwardItemDict = ReadChConfig.GetEvalChConfig("MediaCardAwardItem")
|
if awardItemMark not in MediaCardAwardItemDict:
|
GameWorld.ErrLog("ÕÒ²»µ½¸ÃýÌ忨ÎïÆ·Àñ°üÆ·ÖÖ¿âÅäÖÃ, cardType=%s,platform=%s,awardItemMark=%s"
|
% (cardType, platform, awardItemMark))
|
return
|
awardItemList = MediaCardAwardItemDict[awardItemMark]
|
|
packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, len(awardItemList))
|
if len(awardItemList) > packSpace:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
|
return
|
|
# ÉèÖÃÒÑʹÓùý¸ÃÀàÐÍ¿¨, ·¢·Å½±Àø
|
GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_UseMediaCardState, cardType, 1)
|
|
succGiveItemList = []
|
for itemInfo in awardItemList:
|
itemID, itemCount, itemBind = itemInfo[:3]
|
isAppoint = itemInfo[3] if len(itemInfo) > 3 else 0
|
|
if isAppoint:
|
isOK = ItemControler.GivePlayerAppointItem(curPlayer, itemID, itemBind, True, True)
|
else:
|
isOK = ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, itemBind, [IPY_GameWorld.rptItem],
|
True, showSysInfo=True)
|
if isOK:
|
succGiveItemList.append(itemInfo)
|
|
DataRecordPack.DR_UseMediaCard(curPlayer, cardCode, cardType, succGiveItemList)
|
#if isWriteEvent:
|
# EventReport.WriteEvent_custom_events(curPlayer, EventReport.Def_Custom_Events_MediaCard % cardType, cardCode)
|
return
|
|