#!/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.IsCrossServer():
|
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
|
|