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