#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- # ##@package GameWorldLogic.FBProcess.GameLogic_ManorWar # # @todo:ÁìµØÕù¶áÕ½ # @author hxp # @date 2014-04-26 # @version 2.0 # # ÏêϸÃèÊö: ÁìµØÕù¶áÕ½ # @change: "2014-04-28 18:00" hxp Õ¼ÁìÌáʾÔö¼ÓµØÍ¼²ÎÊý # @change: "2014-06-04 17:30" hxp Ð޸ĶáÆìÌáʾÐÅÏ¢²ÎÊý£¬¸ÄΪȫ·þÌáʾ # @change: "2014-06-05 18:00" hxp ÐÞ¸´Ä³Ð©Çé¿öÏÂÍæ¼ÒÉÏÒ»³¡¸±±¾¼Ç¼²»»áÖØÖÃÎÊÌâ # @change: "2014-08-16 14:00" hxp »î¶¯Ö»ÔÚÒ»Ïß½øÐÐ # @change: "2015-03-16 10:00" hxp ÐÞ¸´±³°ü¿Õ¼ä²»×ãʱÁìȡÿÈÕ½±ÀøÎÊÌâ # @change: "2016-08-10 20:00" hxp ÐÞ¸´×îºóÒ»·ÖÖÓ²¹Ê±½×¶ÎPK»á¼ÓPKÖµµÄbug # @change: "2016-09-02 17:30" hxp ÆÁ±ÎÁìµØÕ½ÆÚ¼ä»÷ɱÎ޳ͷ£, ÓÉÁìµØÆìÇøÓò¾ö¶¨ # @change: "2016-11-03 21:30" hxp µ±ÈÕÕ½Ã˱ä¸üʱÁì½±ÅжÏÓÅ»¯ # @change: "2016-11-09 21:30" xdh ÿ´Î»î¶¯ÖØÐ¿ªÊ¼Ê±ÖØÖÃÕ¼ÁìȨ # @change: "2016-12-28 00:00" hxp ¶áÆìÔö¼ÓְλÏÞÖÆ£»Ôö¼ÓÕ½Ã˵ȼ¶¶ÔÓ¦Õ¼Áì¸öÊýÏÞÖÆ£»Ôö¼ÓÃËÖ÷רÊô³á°ò£»Ôö¼Ó»î¶¯ÖÐÕ½ÃËÊôÐÔ½±Àø£»ÐÞ¸ÄÿÈÕ½±Àø # #--------------------------------------------------------------------- #"""Version = 2016-12-28 00:00""" #--------------------------------------------------------------------- import PlayerFamily import ChPyNetSendPack import IPY_GameWorld import NetPackCommon import PlayerControl import ReadChConfig import ShareDefine import SkillCommon import ItemCommon import GameWorld import AICommon import ChConfig import FBCommon import ItemControler import DataRecordPack import GameMap import BuffSkill Key_ManorWarState = ShareDefine.Def_Notify_WorldKey_ManorWar # ¸±±¾Ïà¹Ø×Öµäkey ManorWarDict_StartTick = "ManorWar_StartTick" # ÁìµØÕ½»î¶¯¿ªÊ¼Ê±¼ä ManorWarDict_LastRefreshTick = "ManorWar_LastRefreshTick" # ÁìµØÕ½Éϴδ¦ÀíË¢ÐÂʱ¼ä ManorWarDict_LastAwardTick = "ManorWar_LastAwardTick" # ÁìµØÕ½ÉÏ´ÎÕ½³¡¸£Àûʱ¼ä ManorWarDict_CollectFlagTick = "ManorWar_CollectFlagTick" # ÆäËûÕ½ÃË°ÎÆìʱ¼ä ManorWarDict_OwnFlagTickTotal = "ManorWar_OwnFlagTickTotal" # ÆäËûÕ½ÃËÓµÓÐÕ½Æìʱ³¤ ManorWarDict_GetFlagFamilyID = "ManorWar_GetFlagFamilyID" # »ñµÃÕ½ÆìµÄÕ½ÃËid£¬²»´ú±í»ñʤսÃË ManorWarDict_WinFamilyID = "ManorWar_WinFamilyID" # ¼Ç¼»ñʤսÃËid£¬¿ÉÄÜΪ0 ManorWarDict_HadWinResult = "ManorWarDict_HadWinResult" # ¼Ç¼ÊÇ·ñÓлñʤ½á¹û£¬²»´ú±í»î¶¯Ê±¼ä½áÊø # ¸±±¾Íæ¼Ò×Öµäkey ManorWarPlayerDict_LastEnterServerDay = 'ManorWarPlayer_LastEnterServerDay' # Íæ¼ÒÉÏÒ»´Î½øÈëÕ½³¡µÄ¿ª·þÌì ManorWarPlayerDict_RefreshTick = 'ManorWarPlayer_RefreshTick' # Íæ¼ÒÕ½³¡Í£ÁôË¢ÐÂTick ManorWarPlayerDict_StayTick = 'ManorWarPlayer_StayTick' # Íæ¼Ò±¾Õ½³¡Í£ÁôÀÛ¼ÆTick ManorWarPlayerDict_GetExpTotal = 'ManorWarPlayer_GetExpTotal' # Íæ¼Ò±¾Õ½³¡»ñµÃ¾­ÑéÀÛ¼Æ ManorWarPlayerDict_GetZhenQiTotal = 'ManorWarPlayer_GetZhenQiTotal' # Íæ¼Ò±¾Õ½³¡»ñµÃÕæÆøÀÛ¼Æ Def_Action_Close = 0 #¹Ø±Õ±êʶ Def_Action_Open = 1 #¿ªÆô±êʶ Def_Action_ReadyOver = 98 # ×¼±¸½áÊø Def_Action_DoOver = 99 #½áËã±êʶ # ÁìµØÕ½¹«¹²ÅäÖà ( Def_Time_OverTime, # »î¶¯Ê±³¤ Def_Time_FlagPrepare, # Õ¼ÁìÆìÖÄÐè²É¼¯Ê±¼ä£¬Ãë Def_Time_Win, # »ñµÃÁìµØÕ¼ÁìȨÐèÒªµÄʱ¼ä£¬Ãë Def_Time_JoinAward, # ¿É»ñµÃ»î¶¯½áÊøµÄÕ½Ã˲ÎÓë½±ÀøÐèÒª´ýÔÚÕ½³¡µÄʱ¼ä£¬Ãë Def_JoinAwardFamilyActiveList, # ²ÎÓë½±£¬Õ½Ã˻¶È[ʤÀû·½, ʧ°Ü·½] Def_JoinAwardExpList, # ²ÎÓë½±£¬»ñµÃµÄ¾­Ñ鹫ʽ[ʤÀû·½, ʧ°Ü·½] Def_GetFlagNeedMemberLV, # ¶áÆìËùÐèµÄְλ Def_FamilyLVGetFlagCntDict, # Õ½Ã˵ȼ¶¶ÔÓ¦¿ÉÕ¼ÁìÁìµØÊý {Õ½Ã˵ȼ¶:¿ÉÕ¼ÁìÊý, ...} Def_LeaderWingSkinInfo, # ÃËÖ÷רÊô³á°ò[ËùÐèÕ¼ÁìÁìµØÊý, ³á°òƤ·ôID] ) = range(9) # ÁìµØÌØÊâÐÅÏ¢ÅäÖà ( Def_CollectLVLimit, # ²É¼¯Õ½ÆìÍæ¼ÒµÈ¼¶ÏÞÖÆ Def_CollectFamilyMoneyCost, # ²É¼¯Õ½ÆìÏûºÄµÄÕ½ÃË×ʽð Def_TimeAward, # Õ½³¡¶¨Ê±¸£Àû ) = range(3) g_winFamilyName = "" g_getFlagFamilyName = "" ## »ñµÃ¸±±¾ÅäÖà # @param None # @return ÅäÖÃÐÅÏ¢ def __GetManorWarCfg(): return ReadChConfig.GetEvalChConfig("ManorWarCfg") ## ÁìµØÕ½µØÍ¼Áбí # @param None # @return ÅäÖÃÐÅÏ¢ def __GetManorWarMapID(): return ReadChConfig.GetEvalChConfig("ManorWarMapID") ## ÁìµØÕ½ÐÅÏ¢ # @param mapID: µØÍ¼id # @return ÅäÖÃÐÅÏ¢ def __GetManorWarInfo(mapID): manorWarInfoDict = ReadChConfig.GetEvalChConfig("ManorWarInfo") if mapID not in manorWarInfoDict: GameWorld.ErrLog("ÁìµØÕù¶áÕ½ mapID=%s not in ManorWarInfo.txt" % mapID) return [] return manorWarInfoDict[mapID] ## ÁìµØÕ½ÊÇ·ñ»î¶¯ÖÐ # @param None # @return def IsManorWarFighting(): nowState = GameWorld.GetGameWorld().GetGameWorldDictByKey(Key_ManorWarState) return nowState in [Def_Action_Open, Def_Action_ReadyOver] ## ÊÇ·ñÁìµØÕ½µØÍ¼ # @param None # @return def IsManorWarMap(curPlayer=None): mapID = GameWorld.GetGameWorld().GetMapID() if mapID not in __GetManorWarMapID(): return False # Ö»ÔÚÒ»Ï߻ lineID = GameWorld.GetGameWorld().GetLineID() if lineID != 0: if curPlayer: PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_493562") return False return True ## ÁìµØÕ½»î¶¯×´Ì¬¸Ä±ä # @param value: ״ֵ̬ # @param tick # @return def OnManorWarStateChange(value, tick): if not IsManorWarMap(): return curState = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ManorWar) # ±¾µØÍ¼ÒÑÊǸÃÖµ£¬²»´¦Àí£¬ÆäËûµØÍ¼Æô¶¯»áÔÙ´Îͬ²½ if curState == value: GameWorld.DebugLog("OnManorWarStateChange ÒÑÊǸÃÖµ£¬²»´¦Àí£¡value=%s" % value) return if value == Def_Action_Open: __OnOpen(tick) elif value == Def_Action_ReadyOver: __OnClose(tick) elif value == Def_Action_DoOver: __OnDoOver(tick) return ## »ñÈ¡ÉÏÒ»³¡»ñʤսÃËid # @param None # @return def __GetLastWinFamilyID(): mapID = GameWorld.GetGameWorld().GetMapID() winFamilyIDKey = ShareDefine.Def_Notify_WorldKey_ManorWarWinFamilyID % mapID winFamilyID = GameWorld.GetGameWorld().GetGameWorldDictByKey(winFamilyIDKey) return winFamilyID ## ÁìµØÕ½OnDay # @param curPlayer # @return def ManorWarOnDay(curPlayer): # ÖØÖÃÿÈÕ½±ÀøÁìÈ¡¼Ç¼ __UpdDailyAwardRecord(curPlayer, 0) return ## ÁìµØÕ½OnLogin # @param curPlayer # @param tick # @return def OnLogin(curPlayer, tick): CheckManorwarWinLeaderID(curPlayer) # ¸üÐÂÁìµØÕ½²ÎÓë½± warServerDayKey = ShareDefine.Def_Notify_WorldKey_ManorWarServerDay warServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(warServerDayKey) joinDay = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinDay) # ÉϴβÎÓëʱ¼äÓëÉϴλʱ¼ä²»Ò»Ö£¬±íʾÉϴλľÓвμӣ¬ÖØÖòÎÓë״̬ if joinDay != warServerDay: FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarContinueTick, 0) FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState, 0) GameWorld.DebugLog("ÁìµØÕ½ OnLogin ÉϴλľÓвμӣ¬ÖØÖÃÐÅÏ¢£¡ÉϴλÌì=%s,ÉϴβÎÓëÌì=%s" % (warServerDay, joinDay), curPlayer.GetPlayerID()) # ֪ͨÁìµØÕ½½á¹û Sync_ManorWarResult(curPlayer, 0) Sync_ManorDailyAward(curPlayer) return ## ÁìµØÕ½__OnOpen # @param tick # @return def __OnOpen(tick): global g_winFamilyName global g_getFlagFamilyName GameWorld.DebugLog("__OnOpen manorWar...") gameFB = GameWorld.GetGameFB() # »î¶¯Êý¾Ý³õʼ»¯ gameFB.SetGameFBDict(ManorWarDict_StartTick, tick) gameFB.SetGameFBDict(ManorWarDict_LastRefreshTick, tick) gameFB.SetGameFBDict(ManorWarDict_LastAwardTick, tick) gameFB.SetGameFBDict(ManorWarDict_CollectFlagTick, 0) gameFB.SetGameFBDict(ManorWarDict_OwnFlagTickTotal, 0) gameFB.SetGameFBDict(ManorWarDict_GetFlagFamilyID, 0) gameFB.SetGameFBDict(ManorWarDict_WinFamilyID, 0) gameFB.SetGameFBDict(ManorWarDict_HadWinResult, 0) g_winFamilyName = "" g_getFlagFamilyName = "" # ¸ü¸ÄΪÿ´Î¿ªÊ¼¶¼ÖØÖà # ÉèÖÃÆìÖÄĬÈÏÓµÓÐÕßΪÉÏÒ»´Î»î¶¯µÄ»ñʤսÃË #lastWinFamilyID = __GetLastWinFamilyID() #gameFB.SetGameFBDict(ManorWarDict_GetFlagFamilyID, lastWinFamilyID) # µØÍ¼Íæ¼Ò¼ÓÈëÕ½³¡ playerManager = GameWorld.GetMapCopyPlayerManager() for index in range(0, playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(index) if not curPlayer: continue __DoPlayerJoinWar(curPlayer, tick) # ×¢Òâ±¾»î¶¯×îºÃ²»ÒªÓÃClearAllPlayerGameFBDictÀ´ÖØÖø±±¾Íæ¼Ò×ÖµäÐÅÏ¢£¬ÒòΪ±¾»î¶¯µÄµØÍ¼²¢·Ç¶ÀÁ¢»î¶¯µØÍ¼ # ÈôʹÓø÷½Ê½ÖØÖ㬿ÉÄܻᵼÖÂÆäËû¹¦ÄܼǼµÄÁÙʱ¼Ç¼±»Çå³ý return ## »ñÈ¡ÁìµØÕ½Ê£Óàʱ¼ä__GetRemainTick # @param tick # @return def __GetRemainTick(tick): gameFB = GameWorld.GetGameFB() # ÉèÖõØÍ¼ÁìµØÕ½»î¶¯¿ªÊ¼Ê±¼ä startTick = gameFB.GetGameFBDictByKey(ManorWarDict_StartTick) passTick = max(0, tick - startTick) remainTick = max(0, __GetManorWarCfg()[Def_Time_OverTime] * 1000 - passTick) GameWorld.DebugLog("__GetRemainTick ÁìµØÕ½ remainTick=%s" % remainTick) return remainTick ## ÁìµØÕ½¹Ø±Õ # @param tick # @return def __OnClose(tick): GameWorld.DebugLog("__OnClose manorWar...") # ÊÕµ½GameServer֪ͨ»î¶¯½áÊø£¬Í¨ÖªGameServer±¾ÁìµØÕ¼Áì½á¹û # ×¢£º´Ëʱ»¹ÎÞ·¨½áËã»î¶¯£¬ÐèµÈ¸÷ÁìµØÍ¨ÖªGameServerºó£¬ÓÉGameServer·¢Æð½áËã֪ͨ __DoWinLogic() return ##Õ½³¡½áËã´¦Àí # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå def __OnDoOver(tick): GameWorld.DebugLog("__OnDoOver manorWar...") playerManager = GameWorld.GetMapCopyPlayerManager() for index in range(0, playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(index) if not curPlayer: continue __DelFBGameBuff(curPlayer, [ChConfig.Def_SkillID_GetFlagFamilyBuff]) CheckManorwarWinLeaderID(curPlayer) if curPlayer.GetFamilyID() <= 0: continue Sync_ManorWarResult(curPlayer, 1) return ##Íæ¼Ò½øÈ븱±¾ # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks Íæ¼Ò½øÈ븱±¾ def DoEnterFB(curPlayer, tick): if not IsManorWarMap(): return if not IsManorWarFighting(): return GameWorld.DebugLog("ÁìµØÕ½ DoEnterFB...") __DoPlayerJoinWar(curPlayer, tick) return ##Íæ¼Ò¼ÓÈëÕ½³¡ # @param curPlayer # @param tick # @return def __DoPlayerJoinWar(curPlayer, tick): GameWorld.DebugLog("ÁìµØÕ½ __DoPlayerJoinWar...", curPlayer.GetPlayerID()) gameFB = GameWorld.GetGameFB() # Èç¹ûÔڻÖУ¬ÇҲμӻµÄÌìÊý²»µÈÓÚµ±Ç°¿ª·þÌìÊý£¬ÔòÖØÖøüРserverDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) lastJoinDay = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinDay) if lastJoinDay != serverDay: FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinDay, serverDay) FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarContinueTick, 0) FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState, 0) Sync_ManorWarResult(curPlayer, 0) GameWorld.DebugLog(" ¸üвÎÓëÌìÊý=%s£¬ÉÏ´ÎÌì=%s, ÖØÖôýÕ½³¡×Üʱ¼ä£¬²ÎÓ뽱״̬£¡" % (serverDay, lastJoinDay), curPlayer.GetPlayerID()) lastEnterServerDay = gameFB.GetPlayerGameFBDictByKey(curPlayer.GetPlayerID(), ManorWarPlayerDict_LastEnterServerDay) if lastEnterServerDay != serverDay: gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), ManorWarPlayerDict_LastEnterServerDay, serverDay) gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), ManorWarPlayerDict_StayTick, 0) gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), ManorWarPlayerDict_GetExpTotal, 0) gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), ManorWarPlayerDict_GetZhenQiTotal, 0) GameWorld.DebugLog(" ¸üнøÈë¸ÃÕ½³¡ÌìÊý=%s£¬ÉÏ´ÎÌì=%s, ÖØÖÃÍæ¼Ò¸ÃÕ½³¡Ïà¹Ø×ÖµäÐÅÏ¢£¡" % (serverDay, lastEnterServerDay), curPlayer.GetPlayerID()) curFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID) __UpdateGetFlagBuff(curPlayer, curFlagFamilyID, tick) # ¼ÇÂ¼Íæ¼Ò½ø³¡Ë¢ÐÂʱ¼ä gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), ManorWarPlayerDict_RefreshTick, tick) # ֪ͨ»î¶¯Ê£Óàʱ¼ä curPlayer.Sync_TimeTick(IPY_GameWorld.tttFlagTake, 0, __GetRemainTick(tick), True) return ##Íæ¼ÒÍ˳ö # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå def DoExitFB(curPlayer, tick): if not IsManorWarMap(): return False if not IsManorWarFighting(): return False GameWorld.DebugLog("__DoPlayerExitManorWar...") __DelFBGameBuff(curPlayer, [ChConfig.Def_SkillID_GetFlagFamilyBuff]) return ##¸±±¾¶¨Ê±Æ÷ # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¸±±¾¶¨Ê±Æ÷ def OnProcess(tick): if not IsManorWarMap(): return if not IsManorWarFighting(): return gameFB = GameWorld.GetGameFB() mapID = GameWorld.GetGameWorld().GetMapID() manorWarInfo = __GetManorWarInfo(mapID) if not manorWarInfo: return awardInterval, expFormat, zhenQiFormat = manorWarInfo[Def_TimeAward] refreshInterval = min(awardInterval, 15) * 1000 lastRefreshTick = gameFB.GetGameFBDictByKey(ManorWarDict_LastRefreshTick) if tick - lastRefreshTick < refreshInterval: return gameFB.SetGameFBDict(ManorWarDict_LastRefreshTick, tick) #GameWorld.DebugLog("ÁìµØÕ½ OnProcess...") isGiveAward = False lastAwardTick = gameFB.GetGameFBDictByKey(ManorWarDict_LastAwardTick) if tick - lastAwardTick > awardInterval * 1000: awardTick = lastAwardTick + awardInterval * 1000 #GameWorld.DebugLog(" Õ½³¡¸£Àûʱ¼ä£º%s" % (awardTick)) awardTick = min(awardTick, ChConfig.Def_UpperLimit_DWord) gameFB.SetGameFBDict(ManorWarDict_LastAwardTick, awardTick) isGiveAward = True # ¸üÐÂÍæ¼ÒÕ½³¡³ÖÐøÊ±¼ä playerManager = GameWorld.GetMapCopyPlayerManager() for index in range(0, playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(index) if not curPlayer: continue if curPlayer.GetFamilyID() <= 0: continue __WarPlayerProcess(curPlayer, isGiveAward, expFormat, zhenQiFormat, tick) # Èç¹ûÒѾ­Óлñʤ½á¹û£¬Ôò²»ÐèÒªÔÙ´¦ÀíÆìÖÄÕ¼Áìʱ¼ä if gameFB.GetGameFBDictByKey(ManorWarDict_HadWinResult): #GameWorld.DebugLog(" ÒѾ­Óлñʤ½á¹û£¬Ôò²»ÐèÒªÔÙ´¦ÀíÆìÖÄÕ¼Áìʱ¼ä...") return # ÅжÏÕ¼Áìʱ¼ä curFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID) lastWinFamilyID = __GetLastWinFamilyID() # ²»ÊÇÉÏÒ»´Î»î¶¯Ê¤ÀûÕ½Ã˲Ŵ¦ÀíÕ¼Áì»ñʤÂß¼­ if curFlagFamilyID > 0 and curFlagFamilyID != lastWinFamilyID: collectFlagTick = gameFB.GetGameFBDictByKey(ManorWarDict_CollectFlagTick) ownTickTotal = tick - collectFlagTick gameFB.SetGameFBDict(ManorWarDict_OwnFlagTickTotal, ownTickTotal) #GameWorld.DebugLog(" Õ½ÃËid=%s Õ½Æì ²É¼¯tick=%s,tick=%s,ÓµÓÐʱ³¤=%s" # % (curFlagFamilyID, collectFlagTick, tick, ownTickTotal)) if ownTickTotal >= __GetManorWarCfg()[Def_Time_Win] * 1000: # Ö´ÐÐÕ½ÃË»ñʤÂß¼­ __DoWinLogic(curFlagFamilyID) return ##Õ½³¡Íæ¼Ò´¦Àí # @param curPlayer # @param isGiveAward # @param expFormat # @param zhenQiFormat # @param tick # @return def __WarPlayerProcess(curPlayer, isGiveAward, expFormat, zhenQiFormat, tick): gameFB = GameWorld.GetGameFB() playerID = curPlayer.GetPlayerID() refreshTick = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_RefreshTick) if refreshTick <= 0: #GameWorld.DebugLog("__WarPlayerProcess refreshTick=0", curPlayer.GetPlayerID()) return addTick = max(0, tick - refreshTick) #GameWorld.DebugLog(" __WarPlayerProcess tick=%s,refreshTick=%s,addTick=%s" # % (tick, refreshTick, addTick)) gameFB.SetPlayerGameFBDict(playerID, ManorWarPlayerDict_RefreshTick, tick) # ¸üб¾Õ½³¡ÀÛ¼ÆÊ±¼ä curContinueTick = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_StayTick) updTick = curContinueTick + addTick updTick = min(updTick, ChConfig.Def_UpperLimit_DWord) gameFB.SetPlayerGameFBDict(playerID, ManorWarPlayerDict_StayTick, updTick) #GameWorld.DebugLog(" ¸üдýÔÚ±¾Õ½³¡Ê±¼ä£ºcurTick=%s,addTick=%s,updTick=%s" # % (curContinueTick, addTick, updTick), playerID) # ¸üÐÂÕ½³¡×ÜÀÛ¼ÆÊ±¼ä allContinueTick = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarContinueTick) updTick = allContinueTick + addTick updTick = min(updTick, ChConfig.Def_UpperLimit_DWord) FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarContinueTick, updTick) # ³¬¹ý¿ÉÁìÈ¡²ÎÓ뽱ʱ¼ä£¬ÉèÖÃΪ¿ÉÁìÈ¡ if updTick >= __GetManorWarCfg()[Def_Time_JoinAward] * 1000 \ and FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState) != 1: #GameWorld.DebugLog(" ÉèÖÿÉÁìÈ¡ÁìµØÕ½²ÎÓë½±£¡") FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState, 1) #GameWorld.DebugLog(" ¸üдýÔÚÕ½³¡×Üʱ¼ä£ºcurTick=%s,addTick=%s,updTick=%s" # % (allContinueTick, addTick, updTick), playerID) # Õ½³¡¸£Àû if not isGiveAward: return reLV = curPlayer.GetLV() reExp = PlayerControl.GetPlayerReExp(curPlayer) addExp = eval(expFormat) addZhenQi = eval(zhenQiFormat) playerControl = PlayerControl.PlayerControl(curPlayer) playerControl.AddExp(addExp) PlayerControl.PlayerAddZhenQi(curPlayer, addZhenQi, True, True, "ManorWar") totalExp = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_GetExpTotal) + addExp totalZhenQi = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_GetZhenQiTotal) + addZhenQi gameFB.SetPlayerGameFBDict(playerID, ManorWarPlayerDict_GetExpTotal, totalExp) gameFB.SetPlayerGameFBDict(playerID, ManorWarPlayerDict_GetZhenQiTotal, totalZhenQi) #GameWorld.DebugLog(" Õ½³¡¸£ÀûreLV=%s,reExp=%s,addExp=%s,addZQ=%s,totalExp=%s,totalZQ=%s" # % (reLV, reExp, addExp, addZhenQi, totalExp, totalZhenQi), playerID) return ##ʤÀûÂß¼­´¦Àí # @param winFamilyID ĬÈÏid0 # @return def __DoWinLogic(winFamilyID=0): global g_winFamilyName GameWorld.DebugLog("ÁìµØÕ½ __DoWinLogic()...winFamilyID=%s" % winFamilyID) gameFB = GameWorld.GetGameFB() if gameFB.GetGameFBDictByKey(ManorWarDict_HadWinResult): GameWorld.DebugLog(" ÒѾ­Óлñʤ½á¹û£¬Ôò²»ÐèÒªÔÙ´¦Àí»ñʤÂß¼­...") return getFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID) lastWinFamilyID = __GetLastWinFamilyID() # ûÓлñʤսÃË if winFamilyID <= 0: # Èç¹ûÓÐÉÏÒ»´Î»î¶¯Ê¤ÀûÕ½ÃË£¬Ôò´ú±í·ÀÊØ³É¹¦ if lastWinFamilyID > 0: winFamilyID = lastWinFamilyID # Èç¹ûÉÏÒ»´Î»î¶¯Ã»Óб»Õ¼Á죬Ôò»ñʤÕßΪµ±Ç°»ñµÃÕ½ÆìµÄÕ½ÃË elif getFlagFamilyID > 0: winFamilyID = getFlagFamilyID # ÎÞÈËÕ¼Áì else: pass if winFamilyID == getFlagFamilyID: g_winFamilyName = g_getFlagFamilyName gameFB.SetGameFBDict(ManorWarDict_WinFamilyID, winFamilyID) gameFB.SetGameFBDict(ManorWarDict_HadWinResult, 1) # ֪ͨGameServer¸üÐÂÕ¼ÁìȨ mapID = GameWorld.GetGameWorld().GetMapID() sendMsg = '%s' % ([mapID, winFamilyID]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'ManorWarWinner', sendMsg, len(sendMsg)) return ##»ñµÃ¸±±¾°ïÖúÐÅÏ¢, ÓÃÓÚ֪ͨÕóÓª±È·ÖÌõ # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks ÓÃÓÚ֪ͨÕóÓª±È·ÖÌõ def DoFBHelp(curPlayer, tick): if not IsManorWarMap(): return False if not IsManorWarFighting(): return False gameFB = GameWorld.GetGameFB() playerID = curPlayer.GetPlayerID() getExp = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_GetExpTotal) getZhenQi = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_GetZhenQiTotal) stayTick = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_StayTick) curFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID) getName = g_getFlagFamilyName if curFlagFamilyID else '' winFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_WinFamilyID) winName = g_winFamilyName if winFamilyID else '' helpDict = { 'isOver':gameFB.GetGameFBDictByKey(ManorWarDict_HadWinResult), 'winName':winName, 'getName':getName, 'ownTick':gameFB.GetGameFBDictByKey(ManorWarDict_OwnFlagTickTotal), 'getExp':getExp, 'getZhenQi':getZhenQi, 'stayTick':stayTick } #GameWorld.DebugLog("DoFBHelp manorWar helpDict=%s" % str(helpDict), playerID) #֪ͨ¸±±¾°ïÖú½çÃæ FBCommon.Notify_FBHelp(curPlayer, helpDict) return ##Íæ¼ÒÍ˳ö¼Ò×å´¦Àí # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå def OnLeaveFamily(curPlayer, tick): GameWorld.DebugLog("OnLeaveFamily manorWar...") if not IsManorWarMap(): return False if not IsManorWarFighting(): return False # ɾ³ý¶áÆìbuff __DelFBGameBuff(curPlayer, [ChConfig.Def_SkillID_GetFlagFamilyBuff]) return ## ¿É·ñ¹¥»÷ def CanManorWarAtk(): return IsManorWarMap() and IsManorWarFighting() ### Íæ¼Ò¹¥»÷Íæ¼ÒÊÇ·ñÓгͷ£ ## @param atkPlayer: ¹¥»÷·½ ## @param defPlayer: ·ÀÊØ·½ ## @return Íæ¼Ò¹¥»÷Íæ¼ÒÊÇ·ñÓгͷ£ #def DoFBAttackHasPunish(atkPlayer, defPlayer): # # Èç¹ûÔÚÁìµØÕ½µØÍ¼£¬ÇÒÔڻÖУ¬PKÎ޳ͷ£ # if IsManorWarMap() and IsManorWarFighting(): # return False # # return True ##¸±±¾ÖÐ,Õ¼ÁìNPCµÄLoadingʱ¼ä. # @param curPlayer Íæ¼ÒʵÀý # @param curNPC NPCʵÀý # @return ·µ»ØÖµ, Loadingʱ¼ä # @remarks ¸±±¾ÖÐ,Õ¼ÁìNPCµÄLoadingʱ¼ä def GetFBPrepareTime(curPlayer, curNPC): return __GetManorWarCfg()[Def_Time_FlagPrepare] * 1000 ##ÊÇ·ñ¿ÉÒÔ¶áÆì # @param curPlayer Íæ¼ÒʵÀý # @param curNPC NPCʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks def OnCanCollect(curPlayer, curNPC, tick): if not IsManorWarMap(curPlayer): return # ûÓÐÕ½Ã˵IJ»Äܲɼ¯ if curPlayer.GetFamilyID() <= 0: PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_273188") return gameFB = GameWorld.GetGameFB() # ·ÇÕ½¶·½×¶Î²»¿É²É¼¯ if not IsManorWarFighting(): PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_740826") return False # Èç¹ûÒѾ­ÓÐʤÀû½á¹û£¬Ôò²»ÐèÒªÔÙ´¦Àí if gameFB.GetGameFBDictByKey(ManorWarDict_HadWinResult): curWinFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_WinFamilyID) if curWinFamilyID <= 0 or curWinFamilyID == curPlayer.GetFamilyID(): PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_740826") else: PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_341290") return # ÒÑ»ñµÃÕ½ÆìµÄÕ½Ã˲»¿É²É¼¯ getFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID) if getFlagFamilyID == curPlayer.GetFamilyID(): PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_976459") return False manorCfg = __GetManorWarCfg() # ËùÐè³ÉԱְλ if curPlayer.GetFamilyMemberLV() < manorCfg[Def_GetFlagNeedMemberLV]: PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_221749") return False # Õ½Ã˵ȼ¶¿ÉÕ¼ÁìÊýÁ¿ curFamilyGetCnt = 0 warMapList = __GetManorWarMapID() for mapID in warMapList: tempFamilyIDKey = ShareDefine.Def_Notify_WorldKey_ManorWarTempFamilyID % mapID if GameWorld.GetGameWorld().GetGameWorldDictByKey(tempFamilyIDKey) == curPlayer.GetFamilyID(): curFamilyGetCnt += 1 canGetCnt = manorCfg[Def_FamilyLVGetFlagCntDict].get(curPlayer.GetFamilyLV(), 0) if canGetCnt <= curFamilyGetCnt: PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_577188", [curPlayer.GetFamilyLV(), canGetCnt]) return False mapID = GameWorld.GetGameWorld().GetMapID() manorWarInfo = __GetManorWarInfo(mapID) if not manorWarInfo: return False # ²É¼¯µÈ¼¶ limitLV = manorWarInfo[Def_CollectLVLimit] if limitLV > curPlayer.GetLV(): PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_818877", [limitLV]) return False # ²É¼¯Õ½ÃË×ʽðÏûºÄ familyMoneyCost = manorWarInfo[Def_CollectFamilyMoneyCost] familyMoney = curPlayer.GetFamilyMoney() if familyMoney < familyMoneyCost: PlayerControl.NotifyCode(curPlayer, "Collect_liubo_817032", [familyMoneyCost]) return False return True ##Íæ¼ÒÊÕ¼¯³É¹¦(Ëþ, Æì) # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks def OnCollectOK(curPlayer, npcID, tick): global g_getFlagFamilyName if not IsManorWarMap(curPlayer): return GameWorld.DebugLog("ManorWar OnCollectOK...familyID=%s,tick=%s" % (curPlayer.GetFamilyID(), tick), curPlayer.GetPlayerID()) # ·ÇÕ½¶·½×¶Î²»¿É²É¼¯ if not IsManorWarFighting(): return False # Èç¹ûÒѾ­Óнá¹û£¬Ôò²»¿É²É¼¯ gameFB = GameWorld.GetGameFB() if gameFB.GetGameFBDictByKey(ManorWarDict_HadWinResult) > 0: return tagObj = curPlayer.GetActionObj() if not tagObj: return if tagObj.GetGameObjType() != IPY_GameWorld.gotNPC: return curNPC = GameWorld.GetNPCManager().GetNPCByIndex(tagObj.GetIndex()) AICommon.ClearPlayerPreparing(curNPC) curFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID) nextFlagFamilyID = curPlayer.GetFamilyID() if nextFlagFamilyID <= 0: return if curFlagFamilyID == nextFlagFamilyID: return mapID = curPlayer.GetMapID() manorWarInfo = __GetManorWarInfo(mapID) if not manorWarInfo: return False familyMoneyCost = manorWarInfo[Def_CollectFamilyMoneyCost] # ·¢ËÍÇëÇóµ½ÊÀ½ç·þÎñÆ÷¿Û³ý°ÎÆìÏûºÄ[familyID, ÏûºÄ×ʽð] sendMsg = '%s' % ([mapID, nextFlagFamilyID, familyMoneyCost]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'ManorWarGetFlagCost', sendMsg, len(sendMsg)) # ¸üÐÂÕ½Æì¹éÊôÐÅÏ¢£¬»ñµÃÕ½Æìʱ¼ä£¬ÖØÖÃÓµÓÐÕ½Æìʱ¼ä gameFB.SetGameFBDict(ManorWarDict_GetFlagFamilyID, nextFlagFamilyID) lastWinFamilyID = __GetLastWinFamilyID() if nextFlagFamilyID != lastWinFamilyID: gameFB.SetGameFBDict(ManorWarDict_CollectFlagTick, tick) gameFB.SetGameFBDict(ManorWarDict_OwnFlagTickTotal, 0) # ¸üÐÂÕ½ÆìbuffÌØÐ§ for index in range(GameWorld.GetMapCopyPlayerManager().GetPlayerCount()): player = GameWorld.GetMapCopyPlayerManager().GetPlayerByIndex(index) if not player: continue __UpdateGetFlagBuff(player, nextFlagFamilyID, tick) # Õ¼Áì¹ã²¥ PlayerControl.WorldNotify(0, "FB_liubo_149184", [curPlayer.GetFamilyName(), curPlayer.GetPlayerName(), mapID, curNPC.GetNPCID()]) GameWorld.DebugLog(" lastWinFamilyID=%s,curFlagFamilyID=%s" % (lastWinFamilyID, curFlagFamilyID), curPlayer.GetPlayerID()) # ¸øÒ»³¡»î¶¯Ê¤ÀûÕ½ÃË·¢ÆµµÀÏûÏ¢ if lastWinFamilyID > 0 and nextFlagFamilyID != lastWinFamilyID: PlayerControl.FamilyNotify(lastWinFamilyID, "PK_liubo_293296", [mapID]) # ¸øÉÏÒ»´Î°ÎÆìÕ½ÃË·¢ÆµµÀÏûÏ¢ if curFlagFamilyID > 0 and curFlagFamilyID != lastWinFamilyID: PlayerControl.FamilyNotify(curFlagFamilyID, "PK_liubo_293296", [mapID]) g_getFlagFamilyName = curPlayer.GetFamilyName() return ##¸üжáÆìbuff # @param curPlayer # @param curFlagFamilyID # @param tick # @return ÎÞ def __UpdateGetFlagBuff(curPlayer, curFlagFamilyID, tick): # ÇåÌØÐ§ if curPlayer.GetFamilyID() != curFlagFamilyID: __DelFBGameBuff(curPlayer, [ChConfig.Def_SkillID_GetFlagFamilyBuff]) # ¼ÓÌØÐ§ elif curPlayer.GetFamilyID() == curFlagFamilyID and curFlagFamilyID > 0: SkillCommon.AddBuffBySkillType(curPlayer, ChConfig.Def_SkillID_GetFlagFamilyBuff, tick) return ##ɾ³ýBUFF # @param curPlayer Íæ¼Ò # @param buffList BuffIDÁбí # @return ÎÞ # @remarks ɾ³ýBUFF def __DelFBGameBuff(curPlayer, buffList): tick = GameWorld.GetGameWorld().GetTick() for skillTypeID in buffList: if not skillTypeID or skillTypeID <= 0: continue BuffSkill.DelBuffBySkillID(curPlayer, skillTypeID, tick) return ##²éÕÒÍæ¼ÒBUFF # @param curPlayer Íæ¼Ò # @param skillTypeID BuffID # @return BUFFºÍBUFF¹ÜÀíÆ÷ # @remarks ²éÕÒÍæ¼ÒBUFF def __FindBuffByID(curPlayer, skillTypeID): findSkill = GameWorld.GetGameData().GetSkillBySkillID(skillTypeID) if not findSkill: GameWorld.ErrLog("Êý¾Ý¿âÖÐûÓÐÕÒµ½¼¼ÄÜ£¬skillTypeID = %s" % skillTypeID) return None, None buffType = SkillCommon.GetBuffType(findSkill) buffTuple = SkillCommon.GetBuffManagerByBuffType(curPlayer, buffType) #ͨ¹ýÀàÐÍ»ñȡĿ±êµÄbuff¹ÜÀíÆ÷Ϊ¿Õ£¬ÔòÌø³ö if buffTuple == (): return None, None buffManager = buffTuple[0] findBuff = buffManager.FindBuff(skillTypeID) return findBuff, buffManager ###--------------------------------------------------------------------- ##// AB 01 ÁìÈ¡ÁìµØÕù¶áÕ½²ÎÓë½± #tagCMGetManorWarJoinAward ## ÁìÈ¡ÁìµØÕù¶áÕ½²ÎÓë½± # @param None # @return None def OnGetManorWarJoinAward(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) GameWorld.Log("ÁìÈ¡ÁìµØÕù¶áÕ½²ÎÓë½±...", curPlayer.GetPlayerID()) if curPlayer.GetFamilyID() <= 0: GameWorld.Log(" Íæ¼ÒÎÞÕ½ÃË£¬²»¿ÉÁì½±!", curPlayer.GetPlayerID()) return if IsManorWarFighting(): GameWorld.Log(" »î¶¯ÖУ¬²»¿ÉÁì½±!", curPlayer.GetPlayerID()) PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_672958") return forbidState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ForbidFamilyAward) if forbidState&pow(2, ShareDefine.Def_FamActivity_Manor): GameWorld.Log(" µ±Èջ¿ªÆôºó±ä¸ü¹ýÕ½ÃË£¬ÎÞ·¨ÁìÈ¡½±Àø!", curPlayer.GetPlayerID()) PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_193917") return joinAwardState = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState) if joinAwardState == 2: GameWorld.Log(" ÒÑÁìÈ¡¹ý²ÎÓë½±!", curPlayer.GetPlayerID()) return if joinAwardState == 0: GameWorld.Log(" ûÓÐÁìÈ¡²ÎÓ뽱ȨÏÞ!", curPlayer.GetPlayerID()) return familyWinState = __GetFamilyWarResult(curPlayer) if familyWinState not in [1, 2]: GameWorld.Log(" Õ½ÃËʤ¸ºÇé¿öδ֪!familyID=%s" % curPlayer.GetFamilyID(), curPlayer.GetPlayerID()) return awardIndex = 0 if familyWinState == 1 else 1 # ʤÀû0£¬Ê§°Ü1 reLV = curPlayer.GetLV() reExp = PlayerControl.GetPlayerReExp(curPlayer) familyActiveAwardList = __GetManorWarCfg()[Def_JoinAwardFamilyActiveList] addFamilyActive = familyActiveAwardList[awardIndex] expAwardList = __GetManorWarCfg()[Def_JoinAwardExpList] addExp = eval(expAwardList[awardIndex]) FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState, 2) Sync_ManorWarResult(curPlayer, 0) # PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, addFamilyActive, True, \ # PlayerFamily.Def_AddFAVReason_ManorWar) PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_243780", [addFamilyActive]) playerControl = PlayerControl.PlayerControl(curPlayer) playerControl.AddExp(addExp) GameWorld.Log(" Õ½ÃËʤ¸º=%s,addFamilyActive=%s,addExp=%s£¬Áì½±OK!" % (familyWinState, addFamilyActive, addExp), curPlayer.GetPlayerID()) return ##// AB 02 ÁìÈ¡ÁìµØÕù¶áսÿÈÕ½±Àø #tagCMGetManorWarDailyAward ## ÁìÈ¡ÁìµØÕù¶áսÿÈÕ½±Àø # @param None # @return None def OnGetManorWarDailyAward(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) awardIndex = clientData.MapID # ½±ÀøË÷Òý #GameWorld.Log("ÁìÈ¡ÁìµØÕù¶áսÿÈÕ½±Àø, awardIndex=%s" % awardIndex, curPlayer.GetPlayerID()) familyID = curPlayer.GetFamilyID() if familyID <= 0: GameWorld.Log(" Íæ¼ÒÎÞÕ½ÃË£¬²»¿ÉÁì½±!", curPlayer.GetPlayerID()) return if IsManorWarFighting(): GameWorld.Log(" »î¶¯ÖУ¬²»¿ÉÁì½±!", curPlayer.GetPlayerID()) PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_672958") return forbidState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ForbidFamilyAward) if forbidState&pow(2, ShareDefine.Def_FamActivity_Manor): GameWorld.Log(" µ±Èջ¿ªÆôºó±ä¸ü¹ýÕ½ÃË£¬ÎÞ·¨ÁìÈ¡½±Àø!", curPlayer.GetPlayerID()) PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_193917") return awardRecord = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarDailyAwardRecord) if awardRecord&pow(2, awardIndex): GameWorld.Log(" ÒÑÁìÈ¡¸ÃÁìµØµ±ÈÕ½±Àø£¬ÎÞ·¨ÁìÈ¡!", curPlayer.GetPlayerID()) PlayerControl.NotifyCode(curPlayer, "PK_liubo_341290") return winCnt = 0 # Õ¼ÁìµÄÁìµØÊý winLeaderID = 0 # Õ¼ÁìʱµÄÃËÖ÷ID mapIDList = __GetManorWarMapID() for mapID in mapIDList: winFamilyIDKey = ShareDefine.Def_Notify_WorldKey_ManorWarWinFamilyID % mapID if GameWorld.GetGameWorld().GetGameWorldDictByKey(winFamilyIDKey) != familyID: continue winCnt += 1 leaderIDKey = ShareDefine.Def_Notify_WorldKey_ManorWarFamilyLeaderID % mapID winLeaderID = GameWorld.GetGameWorld().GetGameWorldDictByKey(leaderIDKey) manorWarDailyAwardDict = ReadChConfig.GetEvalChConfig("ManorWarDailyAward") if awardIndex not in manorWarDailyAwardDict: GameWorld.ErrLog(" ûÓÐÅäÖÃÁìµØ¶ÔÓ¦½±Àø£¬Çë¼ì²éManorWarDailyAward.txt£¡awardIndex=%s" % awardIndex, curPlayer.GetPlayerID()) return needWinCnt, awardItemList, leaderItemExList = manorWarDailyAwardDict[awardIndex] if needWinCnt > winCnt: GameWorld.Log(" Õ¼ÁìÁìµØ¸öÊý²»×ã, ·¨ÁìÈ¡!needWinCnt(%s) > winCnt(%s),familyID=%s" % (needWinCnt, winCnt, familyID), curPlayer.GetPlayerID()) return totalItemList = awardItemList if curPlayer.GetPlayerID() == winLeaderID: totalItemList = awardItemList + leaderItemExList # ¼ì²é±³°ü packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem) if len(totalItemList) > packSpace: PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371") return updAwardRecord = awardRecord|pow(2, awardIndex) __UpdDailyAwardRecord(curPlayer, updAwardRecord) # ¸ø½±Àø packIndexList = [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere] for itemID, itemCount, itemBind in totalItemList: ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, itemBind, packIndexList, True, showSysInfo=True) addDataDict = {"AwardIndex":awardIndex, "WinLeaderID":winLeaderID, "AwardItemList":totalItemList} DataRecordPack.DR_FuncGiveItem(curPlayer, "ManorWar", addDataDict) return ## ¸üÐÂÿÈÕ½±Àø¼Ç¼ # @param curPlayer # @param record # @return def __UpdDailyAwardRecord(curPlayer, record): FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarDailyAwardRecord, record) # ֪ͨ±ä¸ü Sync_ManorDailyAward(curPlayer) return ###--------------------------------------------------------------------- ## »ñÈ¡ÉÏÒ»³¡ÁìµØÕ½½á¹û # @param curPlayer # @return def __GetFamilyWarResult(curPlayer, resultType=0): # »î¶¯ÖÐĬÈÏΪδ֪ if (not resultType and IsManorWarFighting()) or curPlayer.GetFamilyID() <= 0: return 0 warMapList = __GetManorWarMapID() for mapID in warMapList: winFamilyIDKey = ShareDefine.Def_Notify_WorldKey_ManorWarWinFamilyID % mapID winFamilyID = GameWorld.GetGameWorld().GetGameWorldDictByKey(winFamilyIDKey) # Ö»ÒªÓÐÒ»¸öÕ½³¡»ñʤ¾ÍËãʤÀû if winFamilyID > 0 and winFamilyID == curPlayer.GetFamilyID(): return 1 return 2 ## ͬ²½ÁìµØÕ½½á¹û # @param curPlayer # @param resultType ÀàÐÍ0-Êý¾Ýͬ²½£¬1-»î¶¯½áËãÊý¾Ý£¬¿Í»§¶Ë¸ù¾Ý´ËÀàÐ;ö¶¨ÊÇ·ñµ¯½çÃæ # @return def Sync_ManorWarResult(curPlayer, resultType): manorWar = ChPyNetSendPack.tagMCManorWarResult() manorWar.Clear() manorWar.Type = resultType manorWar.Result = __GetFamilyWarResult(curPlayer, resultType) manorWar.JoinTime = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarContinueTick) manorWar.JoinAward = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState) NetPackCommon.SendFakePack(curPlayer, manorWar) return ## ͬ²½ÁìµØÕ½Ã¿ÈÕ½±Àø # @param curPlayer # @return def Sync_ManorDailyAward(curPlayer): dailyAward = ChPyNetSendPack.tagMCManorDailyAward() dailyAward.Clear() dailyAward.AwardRecord = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarDailyAwardRecord) NetPackCommon.SendFakePack(curPlayer, dailyAward) return def CalcManorWarFamilyAttrPrize(curPlayer, allAttrList): # ¸ù¾ÝÉÏ´ÎÕ¼ÁìÁìµØÊýÁ¿»ñµÃÊôÐÔ½±Àø¼Ó³É # Ö»ÔÚÁìµØPKÇøÓòÏíÊܼӳɣ¬ÇøÓòÒѾ­ÑéÖ¤¹ý»î¶¯µÄÓÐЧÐÔ£¬ÕâÀï²»ÔÙÖØ¸´ÑéÖ¤£¬Ö»ÅжÏÊÇ·ñÁìµØPKÇøÓò¼´¿É if GameMap.GetAreaTypeByMapPos(curPlayer.GetPosX(), curPlayer.GetPosY()) != ShareDefine.gatManor: GameWorld.DebugLog("·ÇÁìµØPKÇøÓò, ²»ÏíÊܼӳÉ!", curPlayer.GetPlayerID()) return warMapList = __GetManorWarMapID() gameWorldMgr = GameWorld.GetGameWorld() lastFamilyWinCntDict = {} maxWinCnt = 0 for mapID in warMapList: lastFamilyID = gameWorldMgr.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ManorWarLastFamilyID % mapID) if not lastFamilyID: continue updCnt = lastFamilyWinCntDict.get(lastFamilyID, 0) + 1 lastFamilyWinCntDict[lastFamilyID] = updCnt if updCnt > maxWinCnt: maxWinCnt = updCnt familyID = curPlayer.GetFamilyID() curWinCnt = lastFamilyWinCntDict.get(familyID, 0) diffValue = maxWinCnt - curWinCnt if diffValue <= 0: GameWorld.DebugLog("²»ÏíÊÜÁìµØÕ½ÊôÐÔ¼Ó³É! Óë×î¶àÕ¼Áì¸öÊý²îֵΪ: %s, familyID=%s,lastFamilyWinCntDict=%s" % (diffValue, familyID, lastFamilyWinCntDict), curPlayer.GetPlayerID()) return GameWorld.DebugLog("ÁìµØÕ½ÊôÐÔ¼Ó³É: diffValue=%s,familyID=%s, %s" % (diffValue, familyID, lastFamilyWinCntDict), curPlayer.GetPlayerID()) attrPrizeDict = ReadChConfig.GetEvalChConfig("ManorWarAttrPrize") for attrName, attrFormat in attrPrizeDict.items(): PlayerControl.CalcAttrDict_Type(attrName, eval(attrFormat), allAttrList) return def CheckManorwarWinLeaderID(curPlayer): return