#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#
|
#
|
##@package HighLadder.py
|
#
|
# @todo:ÌìÌݾº¼¼³¡GameServer
|
#
|
# @author xmnathan
|
# @date 2010-01-01 10:00
|
# @version 2.4
|
# @note:
|
# @change: "2014-08-08 10:30" xmnathan ÌìÌݾº¼¼³¡
|
# @change: "2014-08-11 17:30" xmnathan ÌìÌݾº¼¼³¡Ä¬ÈÏ¿ÉÌôÕ½ÅÅλÁбí
|
# @change: "2014-08-11 18:30" xmnathan ÌìÌݾº¼¼³¡Ôö¼ÓÌôսǰ¼¸Ãû³É¹¦ÏµÍ³Ìáʾ
|
# @change: "2014-08-18 16:30" xmnathan ÌìÌݾº¼¼³¡Ôö¼ÓÌôսʱÅÅÃû±ä¸üϵͳÌáʾ
|
# @change: "2014-08-19 14:30" xmnathan ÌìÌݾº¼¼³¡ÌôÕ½ÁбíËæ»úѡȡ
|
# @change: "2014-08-21 09:39" xmnathan ÌìÌݾº¼¼³¡ ÅÅÐаñID ID2±ØÐë¶¼´æÍ¬Ò»¸öÖµ£¬·â°ü·¢µÄÊÇID2
|
# @change: "2014-09-09 16:40" xmnathan ÌìÌݾº¼¼³¡¿ÉÌôÕ½ÁбíÌí¼Ó¸Ä³ÉÃû´Î
|
# @change: "2014-11-10 10:30" xmnathan PlayerBillboardͳһ¿½±´ÅÅÐаñ×òÈÕ°ñ
|
# @change: "2014-12-22 20:30" xmnathan ¾º¼¼³¡Ã¿ÈÕÅÅÐн±Àø²éѯ·À·¶
|
# @change: "2015-01-14 20:30" hxp Ôö¼Ó¸ù¾ÝÌôÕ½´ÎÊýÒ»¶¨¼¸ÂʸøÎïÆ·
|
# @change: "2015-07-13 10:30" ljd ÅÅÐаñ¼ÓÍæ¼Òƽ̨²ÎÊýName2,ƽ̨ÐÅϢȡֵ
|
# @change: "2016-10-27 16:00" hxp »ñÈ¡¿ÉÌôÕ½Ãû´ÎÁбíÂß¼ÓÅ»¯
|
# @change: "2016-11-07 21:40" xdh Ô¤·À±¨´í
|
# @change: "2016-12-13 21:00" xdh Ôö¼ÓJJCÒ»´ÎÐÔÅÅÃû½±Àø
|
#------------------------------------------------------------------------------
|
#"""Version = 2016-12-13 21:00"""
|
#------------------------------------------------------------------------------
|
|
import GameWorld
|
import ShareDefine
|
import IPY_GameServer
|
import ReadChConfig
|
import ChGameToMapPyPack
|
import NetPackCommon
|
import PlayerControl
|
import PlayerBillboard
|
import ChPyNetSendPack
|
import random
|
|
(
|
Def_TopPlayer_Count, # ²é¿´ÌìÌݶ¥¼¶Íæ¼ÒÁбíµÄλÊý
|
Def_StartOrder, # ÌìÌÝÍæ¼ÒĬÈÏÆðʼλÖÃ(Ë÷Òý´Ó0Æð)
|
Def_CanFightCount, # ¿ÉÌôÕ½Íæ¼ÒÏÔʾ¸öÊý
|
Def_HighOrderAtleastCnt, # ¿ÉÌôÕ½µÄÍæ¼ÒÖÁÉÙÐè°üº¬¶àÉÙÃû×ÔÉíÅÅÃûºóµÄÍæ¼Ò
|
Def_MinOrder, # ÌìÌÝÍæ¼Ò½ø°ñ×îµÍÃû´Î
|
Def_Rec_Count, # ¶ÔÕ½¼Ç¼ÌõÊý
|
Def_CanFightOrderList, # ¿ÉÖ±½ÓÌôÕ½µÄÅÅÃû
|
) = range(7)
|
|
def GetHighLadderCfg(index):
|
hladderCfg = ReadChConfig.GetEvalChConfig("HighLadderDef")
|
if index < 0 or index >= len(hladderCfg):
|
return 0
|
return hladderCfg[index]
|
|
##//1A 11 ÌìÌݾº¼¼³¡²éѯ¶¥¼¶Íæ¼ÒÁбí#tagCHightLadderTopPlayerQuery
|
#struct tagCHightLadderTopPlayerQuery
|
#{
|
# tagHead Head;
|
#};
|
# @param index, tick
|
# @return None
|
def OnHightLadderTopPlayerQuery(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
if not curPlayer:
|
return
|
curPlayer.Sync_HightLadderTopPlayer(GetHighLadderCfg(Def_TopPlayer_Count))
|
return
|
|
|
##//1A 12 ÌìÌݾº¼¼³¡²éѯµ±Ç°Î»ÖÿÉÌôÕ½Íæ¼ÒÁбí#tagCHightLadderCanFightPlayerQuery
|
#struct tagCHightLadderCanFightPlayerQuery
|
#{
|
# tagHead Head;
|
# DWORD PlayerID;
|
#};
|
# @param index, tick
|
# @return None
|
def OnHightLadderCanFightPlayerQuery(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
if not curPlayer:
|
return
|
recvPack = IPY_GameServer.IPY_CHightLadderCanFightPlayerQuery()
|
|
PlayerID = recvPack.GetPlayerID()
|
Sync_HightLadderCanFightPlayer(curPlayer, PlayerID)
|
curPlayer.Sync_HighLadderPlayerVsRec()
|
return
|
##֪ͨ ÌìÌݾº¼¼³¡²éѯµ±Ç°Î»ÖÿÉÌôÕ½Íæ¼ÒÁбí
|
# @param curPlayer, PlayerID
|
# @return
|
def Sync_HightLadderCanFightPlayer(curPlayer, PlayerID):
|
|
myOrder = GetPlayerOrder(PlayerID)
|
curPlayer.Begin_AddHightLadderCanFightPlayer(myOrder)
|
#Ìí¼Ó¿É¶ÔÕ½Íæ¼Ò ¡¡
|
highOrderList, lowOrderList = GetCanFightOrder(myOrder)
|
highAtleastCnt = GetHighLadderCfg(Def_HighOrderAtleastCnt)
|
canFightCnt = GetHighLadderCfg(Def_CanFightCount)
|
randomList = []
|
if highAtleastCnt:
|
if highOrderList:
|
randomList = random.sample(highOrderList, min(len(highOrderList), highAtleastCnt)) # ÖÁÉÙÐè°üº¬µÄ
|
for order in randomList:
|
highOrderList.remove(order) # ÏȰÑÒÑÑ¡³öÀ´µÄÒÆ³ý£¬ºóÃæ¸öÊý²»¹»Ê±»¹ÐèÒª´ÓÖÐÑ¡Ôñ
|
|
GameWorld.DebugLog("ÖÁÉÙÐè°üº¬µÄ: highAtleastCnt=%s, randomList=%s, highOrderList=%s"
|
% (highAtleastCnt, randomList, highOrderList))
|
|
if lowOrderList:
|
randomList += random.sample(lowOrderList, min(len(lowOrderList), max(0, canFightCnt - len(randomList)))) # »¹ÐèÌí¼ÓµÄ
|
GameWorld.DebugLog("Ëæ»úÌí¼ÓlowOrderList: randomList=%s" % randomList)
|
|
# Èç¹û»¹²»¹»
|
if len(randomList) < canFightCnt:
|
if highOrderList:
|
randomList += random.sample(highOrderList, canFightCnt - len(randomList)) # »¹ÐèÌí¼ÓµÄ
|
GameWorld.DebugLog("»¹²»¹»ÔòÌí¼Ó֮ǰµÄhighOrderList: randomList=%s" % randomList)
|
|
randomList.sort()
|
GameWorld.DebugLog("×îÖÕËæ»úÌôÕ½Áбí: myOrder=%s,randomList=%s" % (myOrder, randomList))
|
for orderIndex in randomList:
|
curPlayer.Add_HightLadderCanFightPlayer(orderIndex)
|
curPlayer.Sync_HightLadderCanFightPlayer()
|
return
|
|
## »ñÈ¡Íæ¼Òµ±Ç°Ãû´Î
|
# @param PlayerID
|
# @return myOrder
|
def GetPlayerOrder(PlayerID):
|
myPlayerData = GameWorld.GetHightLadderMgr().FindPlayerData(PlayerID)
|
myOrder = GetHighLadderCfg(Def_StartOrder)
|
if myPlayerData:
|
myOrder = myPlayerData.GetOrder()
|
return myOrder
|
|
## ¸ù¾Ý¹æÔò»ñÈ¡¿ÉÌôÕ½ÅÅÃûÁбí
|
# @param myOrder
|
# @return None
|
def GetCanFightOrder(myOrder):
|
'''
|
@todo: ¸ù¾ÝÍæ¼ÒÅÅÃû»ñÈ¡¿ÉÌôÕ½µÄÍæ¼ÒÅÅÃûÁбí
|
@param myOrder: Íæ¼ÒÃû´Î
|
@return: ¿ÉÌôÕ½µÄ½Ï¸ßÅÅÃûÍæ¼ÒÁбí, ¿ÉÌôÕ½µÄ½ÏµÍÅÅÃûÍæ¼ÒÁбí
|
@note:
|
Ãû´ÎÔ½¸ßʵÁ¦Ô½²î, µÚÒ»ÃûµÄÃû´ÎΪ0
|
'''
|
HightLadderCanFightDict = ReadChConfig.GetEvalChConfig("HighLadderCanFight")
|
#»ñÈ¡¿ÉÌôÕ½·¶Î§
|
orderRange = GameWorld.GetDictValueByRangeKey(HightLadderCanFightDict, myOrder, [-10, 10])
|
highOrder = max(0, min(myOrder - orderRange[0], GetHighLadderCfg(Def_MinOrder)))
|
lowOrder = max(0, myOrder - orderRange[1])
|
|
highOrderList = range(myOrder + 1, highOrder + 1)
|
lowOrderList = range(lowOrder, myOrder)
|
|
GameWorld.DebugLog("¿ÉÌôÕ½Áбí: myOrder=%s, highOrderList=%s, lowOrderList=%s"
|
% (myOrder, highOrderList, lowOrderList))
|
return highOrderList, lowOrderList
|
|
##//03 02 ÌìÌݾº¼¼³¡Íæ¼Ò·¢ÆðÌôÕ½#tagMGHighLadderChallenge
|
# @param routeIndex, mapID, curPackData, tick
|
# @return None
|
def OnMGHighLadderChallenge(routeIndex, mapID, curPackData, tick):
|
GameWorld.DebugLog("HighLadder### OnMGHighLadderChallenge in")
|
myPlayerID = curPackData.PlayerID
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(myPlayerID)
|
myOrder = GetPlayerOrder(myPlayerID)
|
GameWorld.DebugLog("HighLadder### OnMGHighLadderChallenge in myOrder %s VSOrder %s"%(myOrder, curPackData.VSOrder))
|
highOrderList, lowOrderList = GetCanFightOrder(myOrder)
|
canFightOrderList = highOrderList + lowOrderList
|
#УÑé Íæ¼ÒÄÜ·ñÌôÕ½¸ÃÅÅλ ¸ù¾Ý×ÔÉíÅÅλËã³öÀ´µÄ¿ÉÌôÕ½Áбí ĬÈÏÅäÖõĿÉÌôÕ½Áбí
|
if(curPackData.VSOrder not in canFightOrderList) and (curPackData.VSOrder not in GetHighLadderCfg(Def_CanFightOrderList)):
|
#ÄúµÄλÖÃÒѱä¸ü£¬ÇëÖØÐÂÑ¡ÔñÌôÕ½µÄÍæ¼Ò
|
Sync_HightLadderCanFightPlayer(curPlayer, myPlayerID)
|
PlayerControl.NotifyCode(curPlayer, "Arena_liubo_807125")
|
GameWorld.DebugLog("HighLadder### OnMGHighLadderChallenge canFightOrderList %s"%canFightOrderList)
|
GameWorld.DebugLog("HighLadder### OnMGHighLadderChallenge out order err")
|
return
|
#Õ½¶·ÊôÐÔ
|
curFightPropertyDict = eval(curPackData.FightPropertyData)
|
curFightPropertyDict["FightPower"] = curPackData.FightPower
|
curVsFightPropertyDict = GetFightPropertyDictByOrder(curPackData.VSOrder)
|
|
hadFightCnt = curFightPropertyDict["HadFightCnt"]
|
awardItemList = __GetFightCntAwardItemList(hadFightCnt)
|
GameWorld.DebugLog("OnMGHighLadderChallenge hadFightCnt=%s,awardItemList=%s"
|
% (hadFightCnt, str(awardItemList)))
|
historyMaxOrder = curFightPropertyDict["HistoryMaxOrder"]#ÀúÊ·×î¸ßÅÅÃûĬÈÏ1¿ªÊ¼,0´ú±íδ¼Ç¼¹ý
|
result = DoFight(curFightPropertyDict, curVsFightPropertyDict)
|
#ÏÈ֪ͨ¶ÔÕ½½á¹û
|
curVsHightLadderPlayer = GameWorld.GetHightLadderMgr().FindPlayerDataByOrder(curPackData.VSOrder)
|
curVsPlayerID = 0
|
curVsPlayerName = ""
|
# ¸½¼ÓÐÅÏ¢
|
PlusInfoDict = {}
|
PlusInfoDict["Order"] = myOrder
|
PlusInfoDict["VSOrder"] = curPackData.VSOrder
|
PlusInfoDict["AwardItemList"] = awardItemList
|
myNewOrder = min(myOrder, curPackData.VSOrder) if result else myOrder
|
if historyMaxOrder == 0:
|
upOrder = GetHighLadderCfg(Def_StartOrder) - myNewOrder
|
else:
|
upOrder = max(0, historyMaxOrder - 1 - myNewOrder) # ÌáÉýµÄÅÅÃû
|
|
newMaxOrder = (historyMaxOrder - upOrder) if historyMaxOrder else (myNewOrder + 1)
|
PlusInfoDict["HistoryMaxOrder"] = newMaxOrder
|
PlusInfoDict["upOrder"] = upOrder
|
strPlusInfoDict = str(PlusInfoDict)
|
|
if curVsHightLadderPlayer:
|
curVsPlayerID = curVsHightLadderPlayer.GetPlayerID()
|
curVsPlayerName = curVsHightLadderPlayer.GetPlayerName();
|
curPlayer.Sync_HightLadderVSPlayerInfo(curVsPlayerID, result, strPlusInfoDict, len(strPlusInfoDict))
|
|
GameWorld.DebugLog("HighLadder### OnMGHighLadderChallenge Send tagGMHighLadderChallengeReuslt")
|
#·¢°üµ½µØÍ¼·þÎñÆ÷¸ø½±Àø
|
sendPack = ChGameToMapPyPack.tagGMHighLadderChallengeReuslt()
|
sendPack.PlayerID = myPlayerID
|
sendPack.Result = result
|
sendPack.PlusInfo = strPlusInfoDict
|
sendPack.PlusInfoSize = len(strPlusInfoDict)
|
NetPackCommon.SendPyPackToMapServer(routeIndex, mapID, sendPack)
|
GameWorld.DebugLog("HighLadder### OnMGHighLadderChallenge Send tagGMHighLadderChallengeReuslt OK")
|
|
#Ìí¼Ó¶ÔÕ½¼Ç¼»º´æ
|
GameWorld.GetHightLadderMgr().AddPlayerVsRec(myPlayerID, curVsPlayerID, curVsPlayerName, \
|
myOrder, curPackData.VSOrder, 0, result)
|
myRec = GameWorld.GetHightLadderMgr().GetPlayerVsRec(myPlayerID)
|
#ɾ³ý¶àÓà³öÀ´µÄÌõÊý
|
DelUselessRec(myRec)
|
|
curPlayer.Sync_HighLadderPlayerVsRec()
|
|
if curVsPlayerID:#±»ÌôÕ½Íæ¼ÒÒ²Òª¼Ç¼ ½á¹ûÐèÒª·´¹ýÀ´ ÒÔ±»ÌôÕ½Õ߽Ƕȿ´
|
GameWorld.GetHightLadderMgr().AddPlayerVsRec(curVsPlayerID, myPlayerID, curPackData.PlayerName, \
|
curPackData.VSOrder, myOrder, 1, not result)
|
vsRec = GameWorld.GetHightLadderMgr().GetPlayerVsRec(curVsPlayerID)
|
DelUselessRec(vsRec)
|
|
VsPlayer = GameWorld.GetPlayerManager().FindPlayerByID(curVsPlayerID)
|
if VsPlayer:
|
VsPlayer.Sync_HighLadderPlayerVsRec()
|
|
GameWorld.DebugLog("HighLadder### OnMGHighLadderChallenge AddPlayerVsRec OK")
|
|
#ÔÙͬ²½Êý¾Ý
|
if result: #»ñʤ£¬ÐèÒªÌæ»»Î»Ö㬸üÐÂÊý¾Ý
|
newOrder = curPackData.VSOrder
|
WinMsgDict = ReadChConfig.GetEvalChConfig("HighLadderWinMsg")
|
winMsg = WinMsgDict.get(newOrder, "")
|
if myOrder > GetHighLadderCfg(Def_MinOrder): #ÅÅÃûÖ®Íâ½øÈëÅÅÃû
|
GameWorld.GetHightLadderMgr().DelPlayerDataByOrder(newOrder)
|
GameWorld.GetHightLadderMgr().AddPlayerData(myPlayerID, newOrder)
|
if winMsg != "":
|
PlayerControl.WorldNotify(0, winMsg, [curPlayer.GetName(), "%s"%(newOrder+1)])
|
else:
|
if curVsPlayerID: #½»»»Íæ¼ÒλÖÃ
|
if newOrder < myOrder:
|
GameWorld.GetHightLadderMgr().ExchangePlayerOrder(myPlayerID, curVsPlayerID)
|
if winMsg != "":
|
PlayerControl.WorldNotify(0, winMsg, [curPlayer.GetName(), "%s"%(newOrder+1)])
|
else: #Õ¼¾ÝNPCλÖÃ
|
if newOrder < myOrder:
|
GameWorld.GetHightLadderMgr().AddPlayerData(myPlayerID, newOrder)
|
if winMsg != "":
|
PlayerControl.WorldNotify(0, winMsg, [curPlayer.GetName(), "%s"%(newOrder+1)])
|
#¸üÐÂÍæ¼ÒÊý¾Ý
|
UpdataHightLadderPlayer(myPlayerID, curPackData)
|
else:
|
#ʧ°Ü£¬¸üÐÂ×ÔÉíÕ½¶·ÊôÐÔ£¬ÆäÓ಻±ä
|
if myOrder > GetHighLadderCfg(Def_MinOrder): #ÅÅÃûÖ®Íâδ»ñʤ²»ÄܽøÈë½øÈëÅÅÃû
|
GameWorld.DebugLog("HighLadder### OnMGHighLadderChallenge out Result 0")
|
return
|
#¸üÐÂÍæ¼ÒÊý¾Ý
|
UpdataHightLadderPlayer(myPlayerID, curPackData)
|
GameWorld.DebugLog("HighLadder### OnMGHighLadderChallenge out Result %s"%result)
|
|
return
|
|
|
## ɾ³ý¶àÓàÌõÊý
|
# @param
|
# @return None
|
def DelUselessRec(myRec):
|
if not myRec:
|
return
|
|
delcnt = max(myRec.RecCount() - GetHighLadderCfg(Def_Rec_Count), 0)
|
for i in range(delcnt):
|
myRec.DelRec(0)
|
|
return
|
|
|
##¸ù¾ÝÌôÕ½´ÎÊý»ñÈ¡½±ÀøÎïÆ·
|
# @param playerFightCnt Íæ¼ÒÒÑÌôÕ½´ÎÊý
|
# @return None
|
def __GetFightCntAwardItemList(playerFightCnt):
|
fightCntAwardDict = ReadChConfig.GetEvalChConfig("HighLadderFightCntAward")
|
fightCntList = fightCntAwardDict.keys()
|
fightCntList.sort()
|
|
for fCnt in fightCntList:
|
|
if playerFightCnt <= fCnt:
|
happenRate, awardItemList = fightCntAwardDict[fCnt]
|
if GameWorld.CanHappen(happenRate):
|
return awardItemList
|
|
return []
|
|
return []
|
|
##¸üÐÂÍæ¼ÒÊý¾Ý
|
# @param curPlayerID, infoPack
|
# @return None
|
def UpdataHightLadderPlayer(curPlayerID, infoPack):
|
curHightLadderPlayer = GameWorld.GetHightLadderMgr().FindPlayerData(curPlayerID)
|
#¸üÐÂÍæ¼ÒÊý¾Ý
|
curHightLadderPlayer.SetPlayerName(infoPack.PlayerName)
|
curHightLadderPlayer.SetPlayerLV(infoPack.PlayerLV)
|
curHightLadderPlayer.SetFightPower(infoPack.FightPower)
|
curHightLadderPlayer.SetFightPropertyData(infoPack.FightPropertyData, infoPack.FightPropertyDataLen)
|
|
#¸üÐÂÍæ¼Ò×°±¸Êý¾Ý
|
curHightLadderPlayer.ClearPlayerEquipt()
|
GameWorld.DebugLog("HighLadder### UpdataHightLadderPlayer EquipCount %s"%infoPack.EquipCount)
|
for i in xrange(infoPack.EquipCount):
|
curEquipInfo = infoPack.EquipList[i]
|
curEquipData = IPY_GameServer.IpyHighLadderPlayerItem()
|
curEquipData.ItemID = curEquipInfo.ItemTypeID
|
curEquipData.ItemPlaceType = curEquipInfo.ItemPlaceType
|
curEquipData.ItemPlaceIndex = curEquipInfo.ItemPlaceIndex
|
curEquipData.Count = curEquipInfo.Count
|
curEquipData.ItemStarLV = curEquipInfo.ItemStarLV
|
curEquipData.IdentifyPar = curEquipInfo.IdentifyPar
|
curEquipData.CurDurg = curEquipInfo.CurDurg
|
curEquipData.MaxDurg = curEquipInfo.MaxDurg
|
curEquipData.CanPlaceStoneCount = curEquipInfo.CanPlaceStoneCount
|
curEquipData.ItemProperty = curEquipInfo.ItemProperty
|
curEquipData.SoulProperty = curEquipInfo.SoulProperty
|
curEquipData.Maker = curEquipInfo.Maker
|
curEquipData.MakerName = curEquipInfo.MakerName
|
curEquipData.Stone1 = curEquipInfo.Stone1
|
curEquipData.Stone2 = curEquipInfo.Stone2
|
curEquipData.Stone3 = curEquipInfo.Stone3
|
curEquipData.Stone4 = curEquipInfo.Stone4
|
curEquipData.Stone5 = curEquipInfo.Stone5
|
curEquipData.Stone6 = curEquipInfo.Stone6
|
curEquipData.Stone7 = curEquipInfo.Stone7
|
curEquipData.Stone8 = curEquipInfo.Stone8
|
curEquipData.Stone9 = curEquipInfo.Stone9
|
# curEquipData.IsRenZhu = curEquipInfo.IsRenZhu
|
curEquipData.EquipDefenseValue = curEquipInfo.EquipDefenseValue
|
curEquipData.EquipMinAtkValue = curEquipInfo.EquipMinAtkValue
|
curEquipData.EquipMaxAtkValue = curEquipInfo.EquipMaxAtkValue
|
curEquipData.UserData = curEquipInfo.UserData
|
curEquipData.FitLV = curEquipInfo.FitLV
|
curEquipData.Proficiency = curEquipInfo.Proficiency
|
curEquipData.IsSuite = curEquipInfo.IsSuite
|
curEquipData.BaseHP = curEquipInfo.BaseHP
|
curEquipData.BaseMagicDef = curEquipInfo.BaseMagicDef
|
curEquipData.MaxAddSkillCnt = curEquipInfo.MaxAddSkillCnt
|
# curEquipData.PetID = curEquipInfo.PetID
|
curEquipData.EquipMagicDefValue = curEquipInfo.EquipMagicDefValue
|
curEquipData.EquipMinMagicAtkValue = curEquipInfo.EquipMinMagicAtkValue
|
curEquipData.EquipMaxMagicAtkValue = curEquipInfo.EquipMaxMagicAtkValue
|
curHightLadderPlayer.AddEquipIpyData(curEquipData)
|
|
#curHightLadderPlayer.DumpEquipData()
|
|
return
|
|
##»ñȡָ¶¨Íæ¼ÒµÄÕ½¶·ÊôÐÔ
|
# @param orderIndex
|
# @return None
|
def GetFightPropertyDictByOrder(orderIndex):
|
curVsFightPropertyDict = {}
|
curVsPlayer = GameWorld.GetHightLadderMgr().FindPlayerDataByOrder(orderIndex)
|
if not curVsPlayer:
|
curVsFightPropertyDict = GetNPCFightPropertyByOrder(orderIndex)
|
else:
|
curVsFightPropertyDict = eval(curVsPlayer.GetFightPropertyData())
|
curVsFightPropertyDict["FightPower"] = curVsPlayer.GetFightPower()
|
return curVsFightPropertyDict
|
|
##»ñȡָ¶¨ÅÅλNPCµÄÕ½¶·ÊôÐÔ
|
# @param order
|
# @return None
|
def GetNPCFightPropertyByOrder(order):
|
HighLadderNPCPropertyDict = ReadChConfig.GetEvalChConfig("HighLadderNPCProperty")
|
curPropertyDict = {}
|
curPropertyDict["Atk"] = eval(HighLadderNPCPropertyDict["Atk"])
|
curPropertyDict["Def"] = eval(HighLadderNPCPropertyDict["Def"])
|
curPropertyDict["MaxHP"] = eval(HighLadderNPCPropertyDict["MaxHP"])
|
curPropertyDict["Hit"] = eval(HighLadderNPCPropertyDict["Hit"])
|
curPropertyDict["Miss"] = eval(HighLadderNPCPropertyDict["Miss"])
|
curPropertyDict["AtkSpeed"] = eval(HighLadderNPCPropertyDict["AtkSpeed"])
|
curPropertyDict["GreatHitRate"] = eval(HighLadderNPCPropertyDict["GreatHitRate"])
|
curPropertyDict["GreatHit"] = eval(HighLadderNPCPropertyDict["GreatHitRate"])
|
curPropertyDict["LuckyHitRate"] = eval(HighLadderNPCPropertyDict["LuckyHitRate"])
|
curPropertyDict["LuckyHit"] = eval(HighLadderNPCPropertyDict["LuckyHit"])
|
curPropertyDict["SuperHitRate"] = eval(HighLadderNPCPropertyDict["SuperHitRate"])
|
curPropertyDict["SuperHit"] = eval(HighLadderNPCPropertyDict["SuperHit"])
|
curPropertyDict["IgnoreDefRate"] = eval(HighLadderNPCPropertyDict["IgnoreDefRate"])
|
curPropertyDict["DamageReduceRate"] = eval(HighLadderNPCPropertyDict["DamageReduceRate"])
|
curPropertyDict["FightPower"] = eval(HighLadderNPCPropertyDict["FightPower"])
|
return curPropertyDict
|
|
##Ö´ÐжÔÕ½ »ñÈ¡½á¹û
|
# @param curFightPropertyDict, curVsFightPropertyDict
|
# @return None
|
def DoFight(curFightPropertyDict, curVsFightPropertyDict):
|
#Õ½¶·¹«Ê½¼ÆËã
|
HighLadderFightFormula = ReadChConfig.GetChConfig("HighLadderFightFormula")
|
|
Atk = curFightPropertyDict["Atk"]
|
Def = curFightPropertyDict["Def"]
|
MaxHP = curFightPropertyDict["MaxHP"]
|
Hit = curFightPropertyDict["Hit"]
|
Miss = curFightPropertyDict["Miss"]
|
AtkSpeed = curFightPropertyDict["AtkSpeed"]
|
GreatHitRate = curFightPropertyDict["GreatHitRate"]
|
GreatHit = curFightPropertyDict["GreatHit"]
|
LuckyHitRate = curFightPropertyDict["LuckyHitRate"]
|
LuckyHit = curFightPropertyDict["LuckyHit"]
|
SuperHitRate = curFightPropertyDict["SuperHitRate"]
|
SuperHit = curFightPropertyDict["SuperHit"]
|
IgnoreDefRate = curFightPropertyDict["IgnoreDefRate"]
|
DamageReduceRate = curFightPropertyDict["DamageReduceRate"]
|
FightPower = curFightPropertyDict["FightPower"]
|
RandomRate = random.randint(0, 10000)
|
|
VS_Atk = curVsFightPropertyDict["Atk"]
|
VS_Def = curVsFightPropertyDict["Def"]
|
VS_MaxHP = curVsFightPropertyDict["MaxHP"]
|
VS_Hit = curVsFightPropertyDict["Hit"]
|
VS_Miss = curVsFightPropertyDict["Miss"]
|
VS_AtkSpeed = curVsFightPropertyDict["AtkSpeed"]
|
VS_GreatHitRate = curVsFightPropertyDict["GreatHitRate"]
|
VS_GreatHit = curVsFightPropertyDict["GreatHit"]
|
VS_LuckyHitRate = curVsFightPropertyDict["LuckyHitRate"]
|
VS_LuckyHit = curVsFightPropertyDict["LuckyHit"]
|
VS_SuperHitRate = curVsFightPropertyDict["SuperHitRate"]
|
VS_SuperHit = curVsFightPropertyDict["SuperHit"]
|
VS_IgnoreDefRate = curVsFightPropertyDict["IgnoreDefRate"]
|
VS_DamageReduceRate = curVsFightPropertyDict["DamageReduceRate"]
|
VS_FightPower = curVsFightPropertyDict["FightPower"]
|
VS_RandomRate = random.randint(0, 10000)
|
return bool(eval(HighLadderFightFormula))
|
|
###FightPropertyData¸½´øÊôÐÔ
|
# Íæ¼ÒÖ°Òµ
|
# ¹¥»÷
|
# ·ÀÓù
|
# ÉúÃü
|
# ÃüÖÐ
|
# ÉÁ±Ü
|
# ¹¥ËÙ
|
# ׿Խһ»÷ ±¶ÂÊ
|
# ÐÒÔËÒ»»÷ ±¶ÂÊ
|
# ±©»÷ ±¶ÂÊ
|
# ÎÞÊÓ·ÀÓù
|
###
|
|
## ¹ýÌì´¦Àí
|
# @param None
|
# @return None
|
def OnDay():
|
#¸üÐÂÅÅÐаñ
|
RefreshBillboard()
|
# #¸üоº¼¼³¡×òÈÕÅÅÐаñ
|
# PlayerBillboard.CopyBillboard(ShareDefine.Def_BT_HighLadder_Yester, ShareDefine.Def_BT_HighLadder)
|
return
|
|
## ÿСʱ´¦Àí
|
# @param None
|
# @return None
|
def OnHour():
|
#¸üÐÂÅÅÐаñ
|
RefreshBillboard()
|
return
|
|
## Ë¢ÐÂÅÅÐаñ
|
# @param None
|
# @return None
|
def RefreshBillboard():
|
billboardType = ShareDefine.Def_BT_HighLadder
|
PlayerBillboard.ClearBillboardByIndex(billboardType)
|
billboardMgr = GameWorld.GetBillboard()
|
billBoard = billboardMgr.FindBillboard(billboardType)
|
highLadderMgr = GameWorld.GetHightLadderMgr()
|
minOrder = GetHighLadderCfg(Def_MinOrder)
|
for Order in xrange(minOrder):
|
playerData = highLadderMgr.FindPlayerDataByOrder(Order)
|
if not playerData:
|
#playerID = Order + 1 #Íæ¼ÒIDÊÇ´Ó10000£¬¿ªÊ¼Ð¡ÓÚ10000µÄ¶¼²»ÊÇÍæ¼Ò£¬Ö»ÊÇռλNPC
|
continue
|
playerID = playerData.GetPlayerID()
|
billBoardData = billBoard.AddToBillboard(playerID)
|
billBoardData.SetType(billboardType)
|
#¸½ÊôÀàÐÍ
|
billBoardData.SetID(playerID)
|
billBoardData.SetID2(playerID)
|
billBoardData.SetName1(playerData.GetPlayerName())
|
curFightPropertyDict = eval(playerData.GetFightPropertyData())
|
billBoardData.SetName2(str(curFightPropertyDict.get("OperateInfo", 0)))
|
#SetValue1´æ´¢¿Õ¼äΪWord
|
billBoardData.SetValue1(Order + 1) #ÓÃÓÚÏÔʾµÄÅÅÃû ÐèÒª+1
|
#SetValue2´æ´¢¿Õ¼äΪDWord
|
billBoardData.SetValue2(playerData.GetFightPower())
|
#±È½ÏÓõÄÖµ
|
billBoardData.SetCmpValue(max(0, minOrder - Order + 1))
|
billBoard.Sort()
|
return
|
|
|
## µØÍ¼²éѯ½±Àø
|
# @param curPlayer, msgList
|
# @return None
|
def MapServer_HighLadderReward(curPlayer, msgList):
|
PlayerID = msgList[0]
|
queryType = msgList[1] #0 ²éѯ 1 ÁìÈ¡
|
hadGot = msgList[2] #ÊÇ·ñÒѾÁìÈ¡
|
billboardMgr = GameWorld.GetBillboard()
|
billBoardYester = billboardMgr.FindBillboard(ShareDefine.Def_BT_HighLadder_Yester)
|
highLadderMgr = GameWorld.GetHightLadderMgr()
|
|
order = GetPlayerOrder(PlayerID) #Íæ¼Òµ±Ç°ÅÅÃû
|
|
if billBoardYester:#Èç¹ûÓÐ×òÈÕÅÅÐУ¬ÔòÈ¡×òÈÕÅÅÐÐ
|
billBoardData = billBoardYester.FindByID(PlayerID)
|
if billBoardData:
|
order = billBoardData.GetValue1() - 1#ÓÃÓÚÅÅÐò£¬°ÑÏÔʾÓõÄÅÅÃûÖµ -1
|
else:
|
order = GetHighLadderCfg(Def_StartOrder)
|
|
if queryType == 0:#²éѯ Ö±½ÓÍ¨ÖªÍæ¼Ò
|
|
sendPack = ChPyNetSendPack.tagGCHighLadderRewardInfo()
|
sendPack.hadGot = hadGot
|
sendPack.Order = order
|
if curPlayer:
|
NetPackCommon.SendFakePack(curPlayer, sendPack)
|
return False, "%s"%[PlayerID, hadGot, order]
|
else: #Áì½± ÐèҪ֪ͨµ½µØÍ¼
|
return True, "%s"%[PlayerID, hadGot, order]
|
|
|
|