#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package PlayerDuJie
|
#
|
# @todo:¾³½ç¶É½Ù
|
# @author xdh
|
# @date 2017-10-10 14:30
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ¾³½ç¶É½Ù
|
#-------------------------------------------------------------------------------
|
#"""Version = 2017-10-10 14:30"""
|
#-------------------------------------------------------------------------------
|
|
import GameWorld
|
import ShareDefine
|
import NetPackCommon
|
import ChPyNetSendPack
|
import PlayerUniversalGameRec
|
import PlayerControl
|
import IpyGameDataPY
|
import PlayerCompensation
|
import ChConfig
|
import PlayerFB
|
|
|
(
|
Def_Self, #×Ô¼º¹ÄÎè
|
Def_Common, #ÆÕͨ»¤·¨
|
Def_High, #¸ß¼¶»¤·¨
|
) = range(3)
|
|
AllRecType = ShareDefine.Def_UniversalGameRecType_DujieHelpAllRecord
|
'''
|
value1:Ä¿±êplayerID,
|
value2:Ä¿±ê¾³½çlv
|
value3:ÒÑÔö¼Ó¹¥»÷
|
strValue1:Ä¿±êÃû
|
strValue3:'[»¤·¨ÕßID,..]'
|
'''
|
|
RecType = ShareDefine.Def_UniversalGameRecType_DujieHelpRecord
|
'''
|
value1:Ä¿±êplayerID,
|
value2:»¤·¨ÀàÐÍ
|
strValue1:»¤·¨ÕßÃû
|
'''
|
HelpCntRecType = ShareDefine.Def_UniversalGameRecType_DujieHelpCntRecord # ¶É½Ù¸±±¾»¤·¨´ÎÊý5
|
'''
|
value1:Ä¿±êplayerID,
|
value2:»¤·¨½±Àø»ñµÃ´ÎÊý
|
'''
|
|
## Íæ¼ÒµÇ¼
|
# @param None
|
# @return None
|
def OnPlayerLogin(curPlayer):
|
tagMapID = curPlayer.GetMapID()
|
if PlayerFB.GetRecordMapID(tagMapID) != ChConfig.Def_FBMapID_DuJie:
|
__DelDuJieFBHelpInfo(curPlayer.GetID())
|
return
|
MapServer_DuJieHelpInfo(curPlayer)
|
return
|
|
def OnDayEx():
|
GameWorld.GetUniversalRecMgr().Delete(HelpCntRecType)
|
return
|
|
def DoDuJieFBOver(msgList):
|
#¸±±¾½áÊø
|
#¸ø»¤·¨Õß·¢½±Àø
|
isPass, playerID = msgList
|
findRec = GetRecDataByID(None, playerID, AllRecType)
|
if not findRec:
|
return
|
if isPass:
|
StrValue3 = findRec.GetStrValue3()
|
helpPlayerIDList = eval(StrValue3) if StrValue3 else []
|
if not helpPlayerIDList:
|
return
|
|
givePlayerIDList = []
|
for heroID in helpPlayerIDList:
|
if __AddDujieHelpCnt(heroID):
|
givePlayerIDList.append(heroID)
|
|
|
if givePlayerIDList:
|
mailKey, day, itemList = IpyGameDataPY.GetFuncEvalCfg('RealmFBHelpAward')
|
content = ShareDefine.Def_MailFormat % (mailKey, findRec.GetStrValue1())
|
GameWorld.DebugLog('¸ø»¤·¨Õß·¢½±Àø ·¢ËÍÓʼþ givePlayerIDList=%s,tagPlayerID=%s' % (givePlayerIDList, playerID))
|
PlayerCompensation.SendPersonalItemMailEx('', content, day, givePlayerIDList, itemList)
|
|
# ¶É½Ù¸±±¾½áÊø£¬É¾³ýÊý¾Ý
|
__DelDuJieFBHelpInfo(playerID)
|
return
|
|
def __DelDuJieFBHelpInfo(playerID):
|
universalRecMgr = GameWorld.GetUniversalRecMgr()
|
for rtype in [AllRecType, RecType]:
|
recordList = universalRecMgr.GetTypeList(rtype)
|
delCnt = 0
|
for index in range(recordList.Count()):
|
dataIndex = index - delCnt
|
universalRecData = recordList.At(dataIndex)
|
if universalRecData.GetValue1() == playerID:
|
recordList.Delete(dataIndex)
|
delCnt += 1
|
return
|
|
def GetMemberForHelpDujie(curPlayer, result):
|
'''
|
ÏòÃËÓÑ·¢Æð¶É½Ù»¤·¨ÇëÇó
|
'''
|
atkAdd, isInspire = result
|
|
playerID = curPlayer.GetPlayerID()
|
#×Ô¼º¹ÄÎè
|
if isInspire:
|
#ÐÂÔöÒ»Ìõ¼Ç¼
|
valueList = [playerID, Def_Self]
|
strValueList = [curPlayer.GetName()]
|
PlayerUniversalGameRec.MapServer_UniversalGameRec(None, RecType, valueList, strValueList)
|
MapServer_DuJieHelpInfo(curPlayer)
|
GameWorld.DebugLog("ÏòÃËÓÑ·¢Æð¶É½Ù»¤·¨ÇëÇó, ×Ô¼º¹ÄÎè³É¹¦£¡")
|
else:
|
#²»ÊÇÖ÷¶¯¹ÄÎèÔò´ú±í¸Õ½øÈ븱±¾
|
__DelDuJieFBHelpInfo(playerID)
|
|
|
family = curPlayer.GetFamily()
|
if family == None:
|
GameWorld.Log("ÏòÃËÓÑ·¢Æð¶É½Ù»¤·¨ÇëÇó, ûÓÐÕ½ÃË£¡")
|
return
|
helpPlayerIDList = GetHelpPlayerID(curPlayer)
|
playerManager = GameWorld.GetPlayerManager()
|
for i in range(0, family.GetCount()):
|
notifyMember = family.GetAt(i)
|
notifyPlayer = playerManager.FindPlayerByID(notifyMember.GetPlayerID())
|
if notifyPlayer == None:
|
continue
|
notifyPlayerID = notifyPlayer.GetPlayerID()
|
if notifyPlayerID in helpPlayerIDList:
|
continue
|
if notifyPlayerID == playerID:
|
continue
|
NotifyRealmFBHelpInfo(notifyPlayer, curPlayer, atkAdd)
|
|
return
|
|
def NotifyRealmFBHelpInfo(notifyPlayer, curPlayer, atkAdd):
|
#¸øÃËÓÑ֪ͨ»¤·¨ÐÅÏ¢
|
sendPack = ChPyNetSendPack.tagGCRealmFBHelpInfo()
|
sendPack.Clear()
|
sendPack.PlayerName = curPlayer.GetName()
|
sendPack.PlayerID = curPlayer.GetPlayerID()
|
sendPack.RealmLV = curPlayer.GetOfficialRank()
|
sendPack.Job = curPlayer.GetJob()
|
sendPack.AtkAdd = atkAdd/100
|
NetPackCommon.SendFakePack(notifyPlayer, sendPack)
|
return
|
|
def __AddDujieHelpCnt(playerID, isAdd=True):
|
findRec = GetRecDataByID(None, playerID, HelpCntRecType, True)
|
curCnt = findRec.GetValue2()
|
maxCnt = IpyGameDataPY.GetFuncCfg('RealmFBHelpLimit')
|
if curCnt >= maxCnt:
|
return
|
if isAdd:
|
findRec.SetValue2(curCnt +1)
|
return True
|
|
def GetHelpPlayerID(curPlayer):
|
'''
|
»ñÈ¡ÒѾ»¤·¨µÄÍæ¼ÒIDÁбí
|
'''
|
playerID = curPlayer.GetPlayerID()
|
findRec = GetRecDataByID(curPlayer, playerID, AllRecType, True)
|
|
if not findRec:
|
return []
|
StrValue3 = findRec.GetStrValue3()
|
if not StrValue3:
|
return []
|
return eval(StrValue3)
|
|
def GetRecDataByID(curPlayer, playerID, recType, isAddRec=False):
|
findRec = None
|
universalRecMgr = GameWorld.GetUniversalRecMgr()
|
recTypeListData = universalRecMgr.GetTypeList(recType)
|
for index in range(recTypeListData.Count()):
|
universalRecData = recTypeListData.At(index)
|
if universalRecData.GetValue1() == playerID:
|
findRec = universalRecData
|
break
|
|
if not findRec and isAddRec:
|
findRec = recTypeListData.AddRec()
|
findRec.SetValue1(playerID)
|
if curPlayer:
|
findRec.SetValue2(curPlayer.GetOfficialRank())
|
findRec.SetStrValue1(curPlayer.GetName())
|
return findRec
|
|
#// A9 02 ¶É½Ù»¤·¨ #tagCGRealmFBHelp
|
#
|
#struct tagCGRealmFBHelp
|
#{
|
# tagHead Head;
|
# BYTE PlayerID; //»¤·¨Ä¿±êID
|
#};
|
def OnDujieFBHelp(index, clientData, tick):
|
#»¤·¨
|
tagPlayerID = clientData.PlayerID
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
playerID = curPlayer.GetPlayerID()
|
|
if curPlayer.GetFamilyID() <= 0:
|
GameWorld.DebugLog("ûÓÐÕ½ÃË£¬²»ÄÜÊØ»¤£¡")
|
return
|
|
|
tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID)
|
if tagPlayer:
|
tagMapID = GameWorld.GetQueryPlayerMapID(tagPlayer)
|
if PlayerFB.GetRecordMapID(tagMapID) != ChConfig.Def_FBMapID_DuJie:
|
PlayerControl.NotifyCode(curPlayer, 'Protect_3')
|
return
|
|
findRec = GetRecDataByID(tagPlayer, tagPlayerID, AllRecType)
|
if not findRec:
|
GameWorld.DebugLog("ûÓиÃÄ¿±êÍæ¼ÒÊý¾Ý£¬²»ÄÜÊØ»¤tagPlayerID=%s£¡"%tagPlayerID)
|
return
|
StrValue3 = findRec.GetStrValue3()
|
helpPlayerIDList = eval(StrValue3) if StrValue3 else []
|
if curPlayer.GetPlayerID() in helpPlayerIDList:
|
GameWorld.DebugLog("ÒÑÊØ»¤¹ý£¬ ²»¿ÉÖØ¸´»¤·¨£¡")
|
return
|
curAtkPer = findRec.GetValue3()
|
|
tagRealmLV = findRec.GetValue2()
|
myRealmLV = curPlayer.GetOfficialRank()
|
if myRealmLV <= tagRealmLV:
|
helpType = Def_Common
|
else:
|
helpType = Def_High
|
|
realmFBHelpAttrDict = IpyGameDataPY.GetFuncEvalCfg('RealmFBHelpAttr')
|
attrDict = realmFBHelpAttrDict.get(str(helpType), {})
|
addAtkPer = attrDict.get(str(ShareDefine.Def_Effect_AddAtkByPer), 0)
|
newAtkPer = curAtkPer + addAtkPer
|
if newAtkPer >= IpyGameDataPY.GetFuncCfg('RealmFBHelpAttr', 2):
|
#¼Ó³É´ïµ½ÉÏÏÞ
|
PlayerControl.NotifyCode(curPlayer, 'Protect_2')
|
return
|
|
findRec.SetValue3(newAtkPer)
|
helpPlayerIDList.append(curPlayer.GetPlayerID())
|
findRec.SetStrValue3(str(helpPlayerIDList))
|
|
#ÐÂÔöÒ»Ìõ¼Ç¼
|
valueList = [tagPlayerID, helpType]
|
strValueList = [curPlayer.GetName()]
|
PlayerUniversalGameRec.MapServer_UniversalGameRec(None, RecType, valueList, strValueList)
|
|
|
if tagPlayer:
|
MapServer_DuJieHelpInfo(tagPlayer)
|
|
if not __AddDujieHelpCnt(playerID, False):
|
maxCnt = IpyGameDataPY.GetFuncCfg('RealmFBHelpLimit')
|
PlayerControl.NotifyCode(curPlayer, 'Protect_4', [maxCnt])
|
else:
|
PlayerControl.NotifyCode(curPlayer, 'Protect_1')
|
curPlayer.MapServer_QueryPlayerResult(0, 0, 'DuJieHelpInfo', '', 0)
|
#³É¾Í
|
PlayerControl.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_DujieFBHelp, 1)
|
PlayerControl.DoAddFamilyActivity(curPlayer, ShareDefine.FamilyActive_HelpDujie, 1)
|
|
return
|
|
def MapServer_DuJieHelpInfo(curPlayer):
|
# ֪ͨµØÍ¼¶É½Ù»¤·¨ÐÅÏ¢
|
sendInfo = []
|
playerID = curPlayer.GetPlayerID()
|
universalRecMgr = GameWorld.GetUniversalRecMgr()
|
recTypeListData = universalRecMgr.GetTypeList(RecType)
|
for index in range(recTypeListData.Count() - 1, -1, -1):
|
universalRecData = recTypeListData.At(index)
|
if universalRecData.GetValue1() == playerID:
|
helpType = universalRecData.GetValue2()
|
name = universalRecData.GetStrValue1()
|
sendInfo.append([helpType, name])
|
sendMsg = str(sendInfo)
|
curPlayer.MapServer_QueryPlayerResult(0, 0, 'DuJieHelpInfo', sendMsg, len(sendMsg))
|
return
|
|
def DoRealmUpAddBuff(sendMsg):
|
#¾³½çÌáÉý¸øÈ«·þÔÚÏßÍæ¼Ò¼Ó¾ÑéBUFF
|
minRealmLVLimit = IpyGameDataPY.GetFuncCfg('RadioExpRealm')
|
playerManager = GameWorld.GetPlayerManager()
|
for i in xrange(playerManager.GetActivePlayerCount()):
|
curPlayer = playerManager.GetActivePlayerAt(i)
|
if curPlayer == None or not curPlayer.GetInitOK():
|
continue
|
if PlayerControl.GetIsTJG(curPlayer):
|
continue
|
if curPlayer.GetOfficialRank() < minRealmLVLimit:
|
continue
|
curPlayer.MapServer_QueryPlayerResult(0, 0, 'AddBuff', sendMsg, len(sendMsg))
|
return
|