| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #  | 
| #  | 
| ##@package HighLadderTube.py  | 
| #  | 
| # @todo:ÌìÌݾº¼¼³¡MapServer  | 
| #  | 
| # @author xmnathan  | 
| # @date 2010-01-01 10:00  | 
| # @version 3.2  | 
| # @note:  | 
| # @change: "2014-08-05 18:00" xmnathan ÌìÌݾº¼¼³¡  | 
| # @change: "2014-08-07 11:30" xmnathan Ã¿ÈÕ½±ÀøÖ§³ÖÁìÈ¡ »ý·Ö ¾Ñé Ä§»ê ½ð±Ò;Ôö¼Ó¹ºÂò´ÎÊýÉÏÏÞ  | 
| # @change: "2014-08-07 16:30" xmnathan ÐÞ¸ÄÀäȴʱ¼ä¼ÆË㣺ÿ´ÎÌôÕ½Ôö¼ÓÀäȴʱ¼ä£¬Ê±¼ä´ïµ½Ò»¶¨ÖµÊ±ÐèÒªÀäȴʱ¼äΪ0²ÅÄÜÌôÕ½   | 
| # @change: "2014-08-08 10:00" hxp Ôö¼Ó²Î¼Ó¾º¼¼³¡ÈÎÎñʼþ´¥·¢  | 
| # @change: "2014-08-08 17:30" xmnathan Ôö¼Óħ»êÔÊÐíÒç³ö  | 
| # @change: "2014-08-12 10:50" xmnathan Ôö¼ÓÁ¬Ê¤¹ã²¥  | 
| # @change: "2014-10-30 21:51" Alee ·þÎñÆ÷µÄtickÊÇ¿ª»úºó´Ó0ËãÆðµÄ£¬ÒªÓÃÏÖʵʱ¼ä´Á  | 
| # @change: "2014-11-12 16:30" hxp Ôö¼ÓʤÀû³É¾Í  | 
| # @change: "2014-11-13 16:30" xmnathan ¹ýÌìÔö¼ÓÒ»´Î½±Àø²éѯ ÒÔ֪ͨ¿Í»§¶ËˢР | 
| # @change: "2014-12-08 17:00" hxp Ôö¼Ó×êʯÏû·ÑÁ÷Ïò  | 
| # @change: "2015-01-14 20:30" hxp Ôö¼Ó¸ù¾ÝÌôÕ½´ÎÊýÒ»¶¨¼¸ÂʸøÎïÆ·  | 
| # @change: "2015-01-29 21:52" xmnathan ¾º¼¼³¡±£´æÊý¾ÝÔö¼ÓÍæ¼ÒתÉúµÈ¼¶¡¢´ÎÊý  | 
| # @change: "2015-02-10 22:30" hxp Ôö¼Ó×êʯÏûºÄÀàÐÍʼþ»ã±¨  | 
| # @change: "2015-02-26 11:40" xmnathan ¾º¼¼³¡±£´æÊý¾ÝÔö¼ÓÍæ¼Ò´óʦµÈ¼¶  | 
| # @change: "2015-03-19 16:50" ljd ¹ó×å¼Ó³É  | 
| # @change: "2015-04-16 17:50" ljd µ¼ÈëmathÓÃÓÚ¿ªÅäÖà  | 
| # @change: "2015-07-10 15:40" xdh ¾º¼¼³¡±£´æÊý¾ÝÔö¼ÓÍæ¼ÒÔËÓªÉÌÐÅÏ¢  | 
| # @change: "2015-07-28 11:10" ljd ¹ó×å¼Ó³É »¹Ô  | 
| # @change: "2015-07-29 11:30" ljd Ïû·ÑVIPÔö¼Ó´ÎÊý  | 
| # @change: "2015-08-24 11:00" xdh Ôö¼ÓJJCÁ¬Ðø»÷ɱ³É¾Í  | 
| # @change: "2016-01-26 15:00" hxp PY±íÖ§³ÖÖØ¶Á  | 
| # @change: "2016-12-13 21:00" xdh Ôö¼ÓJJCÒ»´ÎÐÔÅÅÃû½±Àø  | 
| #---------------------------------------------------------------------  | 
| """Version = 2016-12-13 21:00"""   | 
| #---------------------------------------------------------------------  | 
|   | 
| import IPY_GameWorld  | 
| import GameWorld  | 
| import ChConfig  | 
| import ReadChConfig  | 
| import ShareDefine  | 
| import ChPyNetSendPack  | 
| import NetPackCommon  | 
| import PlayerControl  | 
| import ItemCommon  | 
| import ItemControler  | 
| import DataRecordPack  | 
| import ChMapToGamePyPack  | 
| import PyMapTable  | 
| import PlayerActivity  | 
| import PlayerSuccess  | 
| import EventShell  | 
| import PlayerCostVIP  | 
|   | 
| import time  | 
| import math  | 
|   | 
| # ¶¨ÒåÎïÆ·ÀàÐÍ  | 
| (  | 
| Def_ItemType_CommonItem, # Ò»°ãÎïÆ·  | 
| Def_ItemType_AppointItem, # ÌØÊâ¶¨ÖÆÎïÆ·  | 
| ) = range(2)  | 
|   | 
| ##//1A 13 ÌìÌݾº¼¼³¡ÌôÕ½Íæ¼Ò#tagCHightLadderChallenge  | 
| #struct    tagCHightLadderChallenge  | 
| #{  | 
| #    tagHead    Head;  | 
| #    DWORD    VSOrder;        //ÒªÌôÕ½µÄÅÅλ      | 
| #};  | 
| ## ÌìÌݾº¼¼³¡ÌôÕ½Íæ¼Ò  | 
| #  @param index, tick  | 
| #  @return None  | 
| def OnHightLadderChallenge(index, tick):  | 
|     GameWorld.DebugLog('HightLadder### OnHightLadderChallenge in')  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|     if not curPlayer:  | 
|         return  | 
|     clientPack = IPY_GameWorld.IPY_CHightLadderChallenge()  | 
|       | 
|     HighLadderPriceDict = ReadChConfig.GetEvalChConfig("HighLadderPrice")  | 
|     needPay = 0  | 
|     buyCount = False  | 
|     Count = 0  | 
|     #УÑé´ÎÊý  | 
|     #ÒÑÌôÕ½´ÎÊý  | 
|     hadFightCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadderFightCnt, 0,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|     #¹ºÂò´ÎÊý  | 
|     AddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadderAddCnt, 0,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|     #ÿÈÕĬÈÏ´ÎÊý  | 
|     vipAddNum = PlayerCostVIP.GetArenaNum(curPlayer)  | 
|     HighLadderFightCntDict = ReadChConfig.GetEvalChConfig("HighLadderFightCnt")  | 
|     FightCntPerDay = HighLadderFightCntDict["FightCnt"] + vipAddNum  | 
|     CanAddCntPerDay = HighLadderFightCntDict["CanAddCnt"]  | 
|     if hadFightCnt >= (FightCntPerDay + AddCnt): #ÿÈÕĬÈÏ´ÎÊý + ÒѹºÂò´ÎÊý  | 
|         Count = AddCnt + 1  | 
|         if Count > CanAddCntPerDay:  | 
|             GameWorld.DebugLog('HightLadder### OnHightLadderChallenge AddCnt %s max %s' % (AddCnt, CanAddCntPerDay))  | 
|             return  | 
|         AddCountPrice = eval(HighLadderPriceDict["AddCount"])  | 
|         GameWorld.DebugLog('HightLadder### OnHightLadderChallenge hadFightCnt %s max %s' % (hadFightCnt, FightCntPerDay))  | 
|         needPay += AddCountPrice  | 
|         buyCount = True  | 
|       | 
|     #УÑéÌôÕ½CD  | 
|     CDTime = GetCDTime(curPlayer)  | 
|     isRelCDTime = IsRelCDTime(curPlayer, tick)  | 
|     if isRelCDTime:  | 
|         ClearCDPrice = eval(HighLadderPriceDict["ClearCD"])  | 
|         needPay += ClearCDPrice  | 
|           | 
|     #×êʯ¹ºÂò¼Û¸ñ  | 
|     if needPay:  | 
|         infoDict = {"CDTime":CDTime, "IsRelCDTime":isRelCDTime, "IsBuyCount":buyCount, "Count":Count,  | 
|                     ChConfig.Def_Cost_Reason_SonKey:"CDAndCount"}  | 
|         if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needPay,  | 
|                                       ChConfig.Def_Cost_HighLadder, infoDict):  | 
|             return  | 
|         #ÇåCD  | 
|         if isRelCDTime:  | 
|             ClearCDTime(curPlayer);  | 
|         #¹ºÂò´ÎÊý  | 
|         if buyCount:  | 
|             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadderAddCnt, AddCnt + 1,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|           | 
|         SendHighLadderState(curPlayer, tick)  | 
|           | 
|     #·¢ËÍÏà¹ØÊý¾Ý  | 
|     sendPack = ChMapToGamePyPack.tagMGHighLadderChallenge()  | 
|     sendPack.PlayerID = curPlayer.GetPlayerID()  | 
|     sendPack.PlayerName = curPlayer.GetPlayerName()  | 
|     sendPack.PlayerLV = curPlayer.GetLV()  | 
|     sendPack.FightPower = curPlayer.GetFightPower()  | 
|     sendPack.VSOrder = clientPack.GetVSOrder()  | 
|     GameWorld.DebugLog('HightLadder### OnHightLadderChallenge VSOrder %s' % sendPack.VSOrder)  | 
|     #¸½´øÊý¾Ý  | 
|     curFightPropertyDict = {}  | 
|     curFightPropertyDict["Job"] = curPlayer.GetJob()  | 
|     curFightPropertyDict["LVEx"] = curPlayer.GetLVEx()  | 
|     curFightPropertyDict["LV2"] = curPlayer.GetLV2()  | 
|     curFightPropertyDict["ReincarnationLv"] = curPlayer.GetReincarnationLv()  | 
|     curFightPropertyDict["OperateInfo"] = curPlayer.GetOperateInfo()  | 
|     #Õ½¶·ÊôÐÔ  | 
|     curFightPropertyDict["Atk"] = curPlayer.GetMaxAtk()  | 
|     curFightPropertyDict["Def"] = curPlayer.GetDef()  | 
|     curFightPropertyDict["MaxHP"] = curPlayer.GetMaxHP()  | 
|     curFightPropertyDict["Hit"] = curPlayer.GetHit()  | 
|     curFightPropertyDict["Miss"] = curPlayer.GetMiss()  | 
|     curFightPropertyDict["AtkSpeed"] = curPlayer.GetBattleValEx1()  | 
|     curFightPropertyDict["GreatHitRate"] = curPlayer.GetGreatHitRate()  | 
|     curFightPropertyDict["GreatHit"] = curPlayer.GetGreatHitVal()  | 
|     curFightPropertyDict["LuckyHitRate"] = curPlayer.GetLuckyHitRate()  | 
|     curFightPropertyDict["LuckyHit"] = curPlayer.GetLuckyHitVal()  | 
|     curFightPropertyDict["SuperHitRate"] = curPlayer.GetSuperHitRate()  | 
|     curFightPropertyDict["SuperHit"] = curPlayer.GetSuperHit()  | 
|     curFightPropertyDict["IgnoreDefRate"] = curPlayer.GetIgnoreDefRate()  | 
|     curFightPropertyDict["DamageReduceRate"] = curPlayer.GetDamageReduceRate()  | 
|     hadFightCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadderFightCnt, 0,  | 
|                                                  ChConfig.Def_PDictType_Default)  | 
|     curFightPropertyDict["HadFightCnt"] = hadFightCnt  | 
|     historyMaxOrder = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadder_HistoryMaxOrder, 0,  | 
|                     ChConfig.Def_PDictType_Default)  | 
|     curFightPropertyDict["HistoryMaxOrder"] = historyMaxOrder  | 
|     sendPack.FightPropertyData = str(curFightPropertyDict)  | 
|     sendPack.FightPropertyDataLen = len(sendPack.FightPropertyData)  | 
|     #×°±¸Êý¾Ý  | 
|     equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)  | 
|     for index in xrange(ShareDefine.retMax):  | 
|         curEquip = equipPack.GetAt(index)  | 
|         if curEquip.IsEmpty():  | 
|             continue  | 
|         curEquipData = ChMapToGamePyPack.tagHightLadderItemInfo()  | 
|         curEquipData.ItemTypeID = curEquip.GetItemTypeID()  | 
|         curEquipData.ItemPlaceType = curEquip.GetItemPlaceType()  | 
|         curEquipData.ItemPlaceIndex = curEquip.GetItemPlaceIndex()  | 
|         curEquipData.Count = curEquip.GetCount()  | 
|         curEquipData.Maker = curEquip.GetGearScore()  | 
|         curEquipData.UserData = curEquip.GetUserData()  | 
|         curEquipData.UserDataLen = len(curEquipData.UserData)  | 
|   | 
|         curEquipData.IsSuite = curEquip.GetIsSuite()  | 
|   | 
|         sendPack.EquipList.append(curEquipData)  | 
|     sendPack.EquipCount = len(sendPack.EquipList)  | 
|     GameWorld.DebugLog('HightLadder### OnHightLadderChallenge out')      | 
|     NetPackCommon.SendPyPackToGameServer(sendPack)  | 
|     return   | 
|   | 
| ##//03 01 ÌìÌݾº¼¼³¡Íæ¼ÒÌôÕ½½á¹ûͬ²½#tagGMHighLadderChallengeReuslt  | 
| #  @param curPackData, tick  | 
| #  @return None  | 
| def OnGMHighLadderChallengeReuslt(curPackData, tick):  | 
|     GameWorld.DebugLog('HightLadder### OnGMHighLadderChallengeReuslt in')   | 
|     curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(curPackData.PlayerID)  | 
|     if not curPlayer:  | 
|         return  | 
|     # »îÔ¾¶È  | 
|     #PlayerActivity.AddActivityFinishCnt(curPlayer, ShareDefine.ActivityNum_HighLadderArena)  | 
|       | 
|     #¼Ç¼Àäȴʱ¼ä  | 
|     AddCDTimePer(curPlayer, tick)  | 
|       | 
|     #¼Ç¼ÌôÕ½´ÎÊý  | 
|     hadFightCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadderFightCnt, 0,  | 
|                     ChConfig.Def_PDictType_Default)  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadderFightCnt, hadFightCnt + 1,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|     #¼Ç¼Á¬Ê¤´ÎÊý  | 
|     if curPackData.Result > 0:  | 
|         EventShell.EventRespons_ArenaEvent(curPlayer, "on_win")  | 
|           | 
|         WinningStreakCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadder_WinningStreak, 0,  | 
|                     ChConfig.Def_PDictType_Default)  | 
|         WinningStreakCnt += 1  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadder_WinningStreak, WinningStreakCnt,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|           | 
|         WinningStreakMsgDict = ReadChConfig.GetEvalChConfig("HighLadderWinningStreakMsg")  | 
|         winMsg = WinningStreakMsgDict.get(WinningStreakCnt, "")  | 
|         if winMsg:  | 
|             PlayerControl.WorldNotify(0, winMsg, [curPlayer.GetPlayerName(), "%s" % WinningStreakCnt])  | 
|           | 
|         # Ê¤Àû³É¾Í  | 
|         #PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_HighLadderWin, 1)  | 
|         # Á¬ÐøÊ¤Àû³É¾Í  | 
|         #successType = ShareDefine.SuccType_JJCWin  | 
|         #PlayerSuccess.UptateSuccessProgress(curPlayer, successType, WinningStreakCnt)  | 
|           | 
|     else:  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadder_WinningStreak, 0,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|           | 
|       | 
|       | 
|     #¼ÆËã½±Àø ²ÎÊý  | 
|     PlusInfoDict = eval(curPackData.PlusInfo)  | 
|     upOrder = PlusInfoDict["upOrder"]  | 
|     order = PlusInfoDict["Order"]  | 
|     vsorder = PlusInfoDict["VSOrder"]  | 
|     awardItemList = PlusInfoDict["AwardItemList"]  | 
|     newMaxOrder = PlusInfoDict["HistoryMaxOrder"]  | 
|     GameWorld.DebugLog("OnGMHighLadderChallengeReuslt awardItemList=%s" % str(awardItemList))  | 
|     reLV = curPlayer.GetLV()  | 
|     reExp = 0  | 
|     reMoney = 0  | 
|     result = curPackData.Result  | 
|       | 
|     historyMaxOrder = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadder_HistoryMaxOrder, 0,  | 
|                     ChConfig.Def_PDictType_Default)  | 
|   | 
|     GameWorld.DebugLog('        JJCÀúÊ·×î¸ßÅÅÃû¸üРoldhistoryMaxOrder=%s,newMaxOrder=%s,upOrder=%s' % (historyMaxOrder, newMaxOrder, upOrder))  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadder_HistoryMaxOrder, newMaxOrder,  | 
|                                                   ChConfig.Def_PDictType_Default)  | 
|       | 
|     # ´¥·¢ÈÎÎñʼþ  | 
|     EventShell.EventRespons_ArenaEvent(curPlayer, "on_join")  | 
|       | 
|     #¼ÆËã½±Àø  | 
|     HighLadderRewardDict = ReadChConfig.GetEvalChConfig("HighLadderReward")  | 
|     curHighLadderPoint = eval(HighLadderRewardDict["HighLadderPoint"])  | 
|     curExp = eval(HighLadderRewardDict["Exp"])  | 
|     curMoney = eval(HighLadderRewardDict["Money"])  | 
|     curGoldPaper = eval(HighLadderRewardDict["GoldPaper"])  | 
|     #»ý·Ö  | 
|     PlayerControl.AddHighLadderCurrency(curPlayer, curHighLadderPoint, False, False)  | 
|       | 
|     #¾Ñé  | 
|     playerControl = PlayerControl.PlayerControl(curPlayer)  | 
|     playerControl.AddExp(curExp, isSysHint=False)  | 
|     #½ð±Ò  | 
|     addDataDict = {ChConfig.Def_Give_Reason_SonKey:"Challenge"}  | 
|     PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, curMoney,  | 
|                             ChConfig.Def_GiveMoney_HighLadder, addDataDict, False)  | 
|     #°ó¶¨×êʯ  | 
|     PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, curGoldPaper,  | 
|                             ChConfig.Def_GiveMoney_HighLadder, addDataDict, False)  | 
|     GameWorld.DebugLog('HightLadder### OnGMHighLadderChallengeReuslt out')   | 
|     if awardItemList:  | 
|         for itemID, itemCnt, isBind in awardItemList:  | 
|             ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isBind,  | 
|                                          [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere])  | 
|       | 
|     SendHighLadderState(curPlayer, tick)  | 
|     return   | 
|   | 
|   | 
|   | 
| ##»ñÈ¡¾º¼¼³¡ÌôÕ½Àäȴʱ¼ä  | 
| #  @param curPlayer  | 
| #  @return None  | 
| def GetCDTime(curPlayer):  | 
| #    HighLadderCDTimeDict = ReadChConfig.GetEvalChConfig("HighLadderCDTime")  | 
| #    CDTime = HighLadderCDTimeDict["CDTime"]  | 
| #    AddCDPer = HighLadderCDTimeDict["AddCDPer"]  | 
|     #·þÎñÆ÷µÄtickÊÇ¿ª»úºó´Ó0ËãÆðµÄ£¬ÒªÓÃÏÖʵʱ¼ä´Á£¬½ÚÊ¡×ÖµäµÄ×ö·¨ÎªÉÏÏßµÄʱºò¼õÈ¥CDʱ¼ä  | 
|     tick = int(time.time())  | 
|       | 
|     totalCD = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadder_CDTime, 0,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|     lastTick = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadder_CDBeginTime, 0,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|       | 
|     totalCD = max(0, totalCD - max((tick - lastTick), 0) * 1000)  | 
|       | 
|     #¸üÐÂCDʱ¼ä ¸üÐÂCDÆðʼʱ¼ä  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadder_CDTime, totalCD,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadder_CDBeginTime, tick,  | 
|                                               ChConfig.Def_PDictType_Default)    | 
|     if totalCD == 0:  | 
|         #ÖØÖÃCDʱ¼ä  | 
|         ClearCDTime(curPlayer)   | 
|     return totalCD  | 
|   | 
| ## ¹Ì¶¨Ôö¼ÓÒ»´ÎCDʱ¼ä  | 
| #  @param curPlayer, tick  | 
| #  @return None  | 
| def AddCDTimePer(curPlayer, tick):  | 
|     HighLadderCDTimeDict = ReadChConfig.GetEvalChConfig("HighLadderCDTime")  | 
|     CDTime = HighLadderCDTimeDict["CDTime"]  | 
|     AddCDPer = HighLadderCDTimeDict["AddCDPer"]  | 
|       | 
|     totalCD = GetCDTime(curPlayer)  | 
|     totalCD = totalCD + AddCDPer  | 
|   | 
|     #·þÎñÆ÷µÄtickÊÇ¿ª»úºó´Ó0ËãÆðµÄ£¬ÒªÓÃÏÖʵʱ¼ä´Á£¬½ÚÊ¡×ÖµäµÄ×ö·¨ÎªÉÏÏßµÄʱºò¼õÈ¥CDʱ¼ä  | 
|     tick = int(time.time())  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadder_CDBeginTime, tick,  | 
|                                               ChConfig.Def_PDictType_Default)    | 
|     #¸üÐÂCDʱ¼ä  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadder_CDTime, totalCD,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|     if totalCD > CDTime:#³¬¹ý¿ÉÀÛ¼ÆCD£¬½øÈëÕæÕýÀäȴ״̬  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadder_IsRelCD, 1,  | 
|                                               ChConfig.Def_PDictType_Default)   | 
|     return  | 
|   | 
| ## Çå³ýCDʱ¼ä  | 
| #  @param curPlayer, tick  | 
| #  @return None  | 
| def ClearCDTime(curPlayer):  | 
|     #¸üÐÂCDʱ¼ä  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadder_CDTime, 0,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadder_CDBeginTime, 0,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadder_IsRelCD, 0,  | 
|                                               ChConfig.Def_PDictType_Default)   | 
| ## ÊÇ·ñÔÚÕæÊµÀäȴ״̬  | 
| #  @param curPlayer, tick  | 
| #  @return None   | 
| def IsRelCDTime(curPlayer, tick):  | 
|     GetCDTime(curPlayer)  | 
|     return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadder_IsRelCD, 0,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|       | 
| ##//A5 36 ÌìÌÝÇå³ýÌôÕ½CD#tagCMHighLadderClearCD  | 
| #  @param index, clientPack, tick  | 
| #  @return None  | 
| def OnHighLadderClearCD(index, clientPack, tick):      | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|     HighLadderPriceDict = ReadChConfig.GetEvalChConfig("HighLadderPrice")  | 
|     #УÑéÌôÕ½CD  | 
|     CDTime = GetCDTime(curPlayer)  | 
|     if CDTime > 0:  | 
|         ClearCDPrice = eval(HighLadderPriceDict["ClearCD"])  | 
|         if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, ClearCDPrice,  | 
|                                       ChConfig.Def_Cost_HighLadder, {"CDTime":CDTime, ChConfig.Def_Cost_Reason_SonKey:"CD"}):  | 
|             return  | 
|       | 
|         ClearCDTime(curPlayer)  | 
|         SendHighLadderState(curPlayer, tick)  | 
|     return  | 
|   | 
| ##//A5 37 ÌìÌÝÔö¼ÓÌôÕ½´ÎÊý#tagCMHighLadderAddCount  | 
| #  @param index, clientPack, tick  | 
| #  @return None  | 
| def OnHighLadderAddCount(index, clientPack, tick):  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|     HighLadderFightCntDict = ReadChConfig.GetEvalChConfig("HighLadderFightCnt")  | 
|     FightCntPerDay = HighLadderFightCntDict["FightCnt"]  | 
|     CanAddCntPerDay = HighLadderFightCntDict["CanAddCnt"]  | 
|     #¹ºÂò´ÎÊý  | 
|     AddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadderAddCnt, 0,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|     Count = AddCnt + 1  | 
|     if Count > CanAddCntPerDay:  | 
|         GameWorld.DebugLog('HightLadder### OnHighLadderAddCount AddCnt %s max %s' % (AddCnt, CanAddCntPerDay))  | 
|         return  | 
|     HighLadderPriceDict = ReadChConfig.GetEvalChConfig("HighLadderPrice")  | 
|     AddCountPrice = eval(HighLadderPriceDict["AddCount"])  | 
|     if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, AddCountPrice,  | 
|                                   ChConfig.Def_Cost_HighLadder, {"Count":Count, ChConfig.Def_Cost_Reason_SonKey:"Count"}):  | 
|         return  | 
|           | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadderAddCnt, AddCnt + 1,  | 
|                                               ChConfig.Def_PDictType_Default)      | 
|     SendHighLadderState(curPlayer, tick)  | 
|     return  | 
|   | 
|   | 
|   | 
|   | 
| ##//A5 34 ²éѯÌìÌݾº¼¼³¡×´Ì¬#tagCMQueryHighLadderState  | 
| #  @param index, clientPack, tick  | 
| #  @return None  | 
| def OnQueryHighLadderState(index, clientPack, tick):  | 
|       | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|       | 
|     SendHighLadderState(curPlayer, tick)  | 
|       | 
| ## Ë¢ÐÂÌìÌݾº¼¼³¡×´Ì¬  | 
| #  @param curPlayer  | 
| #  @return None      | 
| def SendHighLadderState(curPlayer, tick):  | 
|     hadFightCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadderFightCnt, 0,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|     AddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadderAddCnt, 0,  | 
|                                               ChConfig.Def_PDictType_Default)  | 
|     vipAddNum = PlayerCostVIP.GetArenaNum(curPlayer)  | 
|     HighLadderFightCntDict = ReadChConfig.GetEvalChConfig("HighLadderFightCnt")  | 
|     FightCntPerDay = HighLadderFightCntDict["FightCnt"] + vipAddNum  | 
|     curCurrency = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadder_Currency, 0,  | 
|                                                  ChConfig.Def_PDictType_Default)  | 
|       | 
|     sendPack = ChPyNetSendPack.tagMCHighLadderState()  | 
|     sendPack.Count = hadFightCnt  | 
|     sendPack.MaxCount = FightCntPerDay + AddCnt  | 
|     sendPack.CDTime = GetCDTime(curPlayer)  | 
|     sendPack.IsRelCD = IsRelCDTime(curPlayer, tick)  | 
|     sendPack.Currency = curCurrency  | 
|     NetPackCommon.SendFakePack(curPlayer, sendPack)  | 
|     return  | 
|   | 
|   | 
| ## ÌìÌÝÿÈÕÂß¼  | 
| #  @param curPlayer  | 
| #  @return None  | 
| def OnDay(curPlayer):  | 
|     #Çå³ýÿÈÕÌôÕ½ÌìÌÝ´ÎÊý¼Ç¼  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadderFightCnt, 0, ChConfig.Def_PDictType_Default)  | 
|     #Çå³ý×òÈÕÒѹºÂò´ÎÊý  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadderAddCnt, 0, ChConfig.Def_PDictType_Default)  | 
|     #Çå³ý×òÈÕÁì½±¼Ç¼  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadder_DayRewardGot, 0, ChConfig.Def_PDictType_Default)  | 
|     #Çå³ýCD  | 
|     ClearCDTime(curPlayer)  | 
|     tick = GameWorld.GetGameWorld().GetTick()  | 
|     #Ë¢ÐÂÌìÌݾº¼¼³¡×´Ì¬  | 
|     SendHighLadderState(curPlayer, tick)  | 
|     #֪ͨGameServer²éѯһ´Î½±ÀøÇé¿ö     | 
|     sendMsg = '%s' % ([curPlayer.GetID(), 0, 0])   | 
|     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'HighLadderReward',  | 
|                                                                   sendMsg, len(sendMsg))  | 
|     return  | 
|   | 
| ## //A5 35 ²éѯÌìÌݾº¼¼³¡½±Àø#tagCMQueryHighLadderReward  | 
| #  @param index, clientPack, tick  | 
| #  @return None  | 
| def OnQueryHighLadderReward(index, clientPack, tick):  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|     hadGot = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadder_DayRewardGot, 0, ChConfig.Def_PDictType_Default)  | 
|     if clientPack.Type == 1 and hadGot:  | 
|         #Áì½±£¬ÒÑÁìÈ¡µÄÖ±½Ó·µ»Ø¿Í»§¶Ë  | 
|         return  | 
|       | 
|     #֪ͨGameServer²éѯ»òÁìÈ¡½±Àø            | 
|     sendMsg = '%s' % ([curPlayer.GetID(), clientPack.Type, hadGot])   | 
|     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'HighLadderReward',  | 
|                                                                   sendMsg, len(sendMsg))  | 
| ## GameServer²éѯÌìÌݾº¼¼³¡½±ÀøÁìÈ¡½á¹û  | 
| #  @param curPlayer,order  | 
| #  @return None  | 
| def GameServer_GetHighLadderRewardResult(curPlayer, order):  | 
|     hadGot = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadder_DayRewardGot, 0, ChConfig.Def_PDictType_Default)  | 
|     if hadGot:  | 
|         return  | 
|     #¸ù¾Ý½±ÀøÀàÐ͸øÓè½±Àø  | 
|     result = GiveHighLadderReward(curPlayer, order)  | 
|     if result:  | 
|         #¼Ç¼ÒÑÁìÈ¡  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HighLadder_DayRewardGot, 1, ChConfig.Def_PDictType_Default)  | 
|     hadGot = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HighLadder_DayRewardGot, 0, ChConfig.Def_PDictType_Default)  | 
|     #֪ͨ¿Í»§¶Ë¸üн±ÀøÁìȡ״̬  | 
|     sendPack = ChPyNetSendPack.tagGCHighLadderRewardInfo()  | 
|     sendPack.hadGot = hadGot  | 
|     sendPack.Order = order  | 
|     NetPackCommon.SendFakePack(curPlayer, sendPack)  | 
|     return  | 
|   | 
| ## ¸ù¾Ý½±ÀøÀàÐ͸øÓè½±Àø  | 
| #  @param curPlayer,order  | 
| #  @return None  | 
| def GiveHighLadderReward(curPlayer, order):  | 
|     HighLadderDayRewardDict = ReadChConfig.GetEvalChConfig("HighLadderDayReward")  | 
|     playerJob = curPlayer.GetJob()  | 
|     curJobReward = None  | 
|     for key in HighLadderDayRewardDict.keys():  | 
|         minOrder, maxOrder = key  | 
|         if order >= minOrder and order <= maxOrder:  | 
|             curRewardDict = HighLadderDayRewardDict.get(key, {})  | 
|             if curRewardDict == {}:  | 
|                 GameWorld.DebugLog('HightLadder### GiveHighLadderReward order=%s no Reward' % order)   | 
|                 return False  | 
|             curJobReward = curRewardDict.get(playerJob, None)  | 
|             if curJobReward == None:  | 
|                 GameWorld.DebugLog('HightLadder### GiveHighLadderReward order=%s  job = %s no Reward' % (\  | 
|                                                               order, playerJob))  | 
|                 return False  | 
|             break  | 
|     if curJobReward == None:  | 
|         return False  | 
|     #»ý·Ö,½ð±Ò,¾Ñé,ħ»ê,½±ÀøÕ¼±³°ü¸ñ×ÓÊý,[[ÊÇ·ñ¶¨ÖƱí,ID, ÊýÁ¿, ÊÇ·ñ°ó¶¨],[ÏÂÒ»¸ö½±Àø,...,...,...],...]  | 
|     rewardCurrency, rewardMoney, rewardExp, rewardMohun, needSpace, rewardList = curJobReward  | 
|     packSpaceCnt = max((ItemControler.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)), \  | 
|                    ItemControler.GetItemPackSpace(curPlayer, IPY_GameWorld.rptAnyWhere))  | 
|       | 
|     if needSpace > packSpaceCnt:  | 
|         #±³°ü¿Õ¼äÒÑÂú  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  | 
|         return False  | 
|     #»ý·Ö      | 
|     PlayerControl.AddHighLadderCurrency(curPlayer, rewardCurrency)  | 
|     #¾Ñé  | 
|     playerControl = PlayerControl.PlayerControl(curPlayer)  | 
|     playerControl.AddExp(rewardExp, isSysHint=True)  | 
|     #½ð±Ò  | 
|     addDataDict = {ChConfig.Def_Give_Reason_SonKey:"Reward"}  | 
|     PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, rewardMoney, ChConfig.Def_GiveMoney_HighLadder, addDataDict)  | 
|     #ħ»ê  | 
|     PlayerControl.PlayerAddZhenQi(curPlayer, rewardMohun, True, True, "HighLadder")  | 
|       | 
|     for index in xrange(len(rewardList)):  | 
|         itemType, itemID, itemCount, isBind = rewardList[index]  | 
|         #¸øÓèÎïÆ·          | 
|         # Ò»°ãÎïÆ·  | 
|         if itemType == Def_ItemType_CommonItem:  | 
|             if not ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, \  | 
|                                                  [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere], True):  | 
|                 continue  | 
|             #PlayerControl.NotifyCode(curPlayer, "ObtainRes01", [itemID, itemCount])  | 
|         # ÌØÊâ¶¨ÖÆÎïÆ·  | 
|         elif itemType == Def_ItemType_AppointItem:  | 
|             itemData = PyMapTable.GetPyMapTable("AppointItemList").GetRecord("ItemIndex", str(itemID))  | 
|             if not itemData:  | 
|                 GameWorld.ErrLog("GiveHighLadderReward()itemType=%s,ItemIndex=%s not data" % (itemType, itemID))  | 
|                 continue  | 
|             if len(itemData) != 1:  | 
|                 GameWorld.ErrLog("GiveHighLadderReward()itemType=%s,ItemIndex=%s,recordCount=%s !=1 error" % \  | 
|                                                         (itemType, itemID, len(itemData)))  | 
|                 continue  | 
|               | 
|             itemDictData = itemData[0]  | 
|             itemDictData['IsBind'] = str(isBind)  | 
|             ItemControler.GivePlayerEquip(curPlayer, itemDictData, True)  | 
|             #PlayerControl.NotifyCode(curPlayer, "ObtainRes01", [int(itemDictData['ItemID']), itemCount])  | 
|     return True  | 
|   | 
| ## Íæ¼ÒµÇ¼֪ͨ  | 
| #  @param curPlayer  | 
| #  @return None  | 
| def OnLogin(curPlayer):  | 
|     tick = GameWorld.GetGameWorld().GetTick()  | 
|     SendHighLadderState(curPlayer, tick)  | 
|     return  | 
|   | 
|   | 
|   | 
|   |