| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #  | 
| #  | 
| ##@package GameWorldAverageLv.py  | 
| #  | 
| # @todo:ÊÀ½çµÈ¼¶  | 
| #  | 
| # @author zhangxi  | 
| # @date 2012-07-06  | 
| # @version 1.5  | 
| # @note:  | 
| # @change: "2012-07-09 15:40" zhangxi ÐÞ¸ÄÅäÖñí¶ÁÈ¡  | 
| # @change: "2012-07-17 14:30" zhangxi ÐÞ¸ÄÅÅÐаñΪ¿ÕʱµÄÅÐ¶Ï  | 
| # @change: "2012-07-19 19:30" zhangxi ÐÞ¸´µÚ9Ìì²Å¿ªÆô  | 
| # @change: "2012-12-03 10:00" wdb ¿ç·þ·þÎñÆ÷¹¦ÄÜÏÞÖÆ  | 
| # @change: "2015-02-02 12:00" hxp ÊÀ½çµÈ¼¶¼ÆËãȡֵÐÞ¸Ä(µÈ¼¶°ñ´æÖµ±ä¸ü)  | 
| #------------------------------------------------------------------------------------------------------------   | 
| """Version = 2015-02-02 12:00"""       | 
| #------------------------------------------------------------------------------   | 
| import GameWorld  | 
| import ShareDefine  | 
| import PlayerDBGSEvent  | 
| import ChConfig  | 
| import IpyGameDataPY  | 
| #------------------------------------------------------------------------------  | 
|   | 
|           | 
| ## ¿ªÆôÊÀ½çµÈ¼¶  | 
| #  @param None:   | 
| #  @return: None  | 
| def OpenWorldAverageLv():  | 
|     if not __IsWorldAverageLv():  | 
|         return  | 
|       | 
|     beforeLv = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)  | 
|       | 
|     #ÉèÖÃÊÀ½çµÈ¼¶  | 
|     worldAverageLv = __GetWorldAverageLv(beforeLv)  | 
|     if worldAverageLv != beforeLv:  | 
|         PlayerDBGSEvent.SetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv, worldAverageLv)  | 
|       | 
|     #֪ͨµØÍ¼·þÎñÆ÷µ±Ç°ÊÀ½çµÈ¼¶  | 
|     if GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv) != worldAverageLv:  | 
|         GameWorld.GetGameWorld().SetDict(ShareDefine.Def_Notify_WorldKey_WorldAverageLv, worldAverageLv)  | 
|         GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_WorldAverageLv, worldAverageLv)  | 
|           | 
|         GameWorld.Log("WorldAverageLv Change:beforeLv = %s, curLv = %s"%(beforeLv, worldAverageLv))  | 
|     return  | 
|   | 
|   | 
| ## ÊÇ·ñ¿ªÆôÊÀ½çµÈ¼¶  | 
| #  @param None:   | 
| #  @return:   | 
| def __IsWorldAverageLv():  | 
|     # ¿ç·þ·þÎñÆ÷¹¦ÄÜÏÞÖÆ  | 
|     if GameWorld.IsMergeServer():  | 
|         return  | 
|     return True  | 
|   | 
|   | 
| ## »ñÈ¡ÊÀ½çµÈ¼¶  | 
| #  @param None:   | 
| #  @return:   | 
| def __GetWorldAverageLv(beforeLv):  | 
|     worldLV = 0  | 
|     initOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)  | 
|     if initOpenServerTime <= 0:  | 
|         return beforeLv  | 
|     diffSecond = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_WorldLVExtraTime) #¶îÍâʱ¼ä²ÎÊý  | 
|     initOpenServerTime = GameWorld.ChangeTimeNumToDatetime(initOpenServerTime, ChConfig.TYPE_Time_Format)  | 
|     openServerSecond = max(0, GameWorld.GetPastSeconds(str(initOpenServerTime)) + diffSecond)  | 
|     maxCnt = IpyGameDataPY.IPY_Data().GetWorldLVCount()  | 
|     for i in xrange(max(0, beforeLv-1), maxCnt):  | 
|         curIpyData = IpyGameDataPY.IPY_Data().GetWorldLVByIndex(i)  | 
|         if i == maxCnt - 1:  | 
|             worldLV = curIpyData.GetWorldLV()  | 
|         else:  | 
|             nextIpyData = IpyGameDataPY.IPY_Data().GetWorldLVByIndex(i+1)  | 
|             if curIpyData.GetOpenServerSecond() <= openServerSecond < nextIpyData.GetOpenServerSecond():  | 
|                 worldLV = curIpyData.GetWorldLV()  | 
|                 break  | 
|             if openServerSecond < curIpyData.GetOpenServerSecond():  | 
|                 #·Àֹʱ¼äÍù»Øµ÷µÄÇé¿ö£¬µ¼ÖÂÊÀ½çµÈ¼¶Òì³£  | 
|                 worldLV = beforeLv  | 
|                 break  | 
|       | 
|     return worldLV  | 
|   |