| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package Player.PlayerCrossYaomoBoss  | 
| #  | 
| # @todo:¿ç·þÑýħboss  | 
| # @author hxp  | 
| # @date 2022-11-11  | 
| # @version 1.0  | 
| #  | 
| # ÏêϸÃèÊö: ¿ç·þÑýħboss  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #"""Version = 2022-11-11 15:30"""  | 
| #-------------------------------------------------------------------------------  | 
|   | 
| import GameWorld  | 
| import NPCHurtMgr  | 
| import PlayerControl  | 
| import IpyGameDataPY  | 
| import ItemControler  | 
| import IPY_GameWorld  | 
| import ShareDefine  | 
| import ItemCommon  | 
| import ChConfig  | 
| import PlayerGubao  | 
|   | 
| def OnYaomoBossStateChange(state, tick):  | 
|     ## »î¶¯×´Ì¬±ä¸ü  | 
|     if state:  | 
|         # ¿ªÊ¼µÄ²»ÐèÒª´¦Àí  | 
|         return  | 
|     return  | 
|   | 
| def OnCrossYaomoBossDead(curNPC):  | 
|       | 
|     objID = curNPC.GetID()  | 
|     npcID = curNPC.GetNPCID()  | 
|     mapID = GameWorld.GetGameWorld().GetMapID()  | 
|     lineID = GameWorld.GetGameWorld().GetLineID()  | 
|     realMapID = GameWorld.GetGameWorld().GetRealMapID()  | 
|     copyMapID = GameWorld.GetGameWorld().GetCopyMapID()  | 
|       | 
|     zoneID = 0  | 
|     zoneTypeName = ChConfig.Def_CrossZoneMapTableName.get(mapID)  | 
|     ipyDataMgr = IpyGameDataPY.IPY_Data()  | 
|     if zoneTypeName and hasattr(ipyDataMgr, "Get%sCount" % zoneTypeName):  | 
|         for index in range(getattr(ipyDataMgr, "Get%sCount" % zoneTypeName)()):  | 
|             ipyData = getattr(ipyDataMgr, "Get%sByIndex" % zoneTypeName)(index)  | 
|             if realMapID == ipyData.GetMapID() and copyMapID == ipyData.GetCopyMapID():  | 
|                 zoneID = ipyData.GetZoneID()  | 
|                 break  | 
|               | 
|     npcHurtList = NPCHurtMgr.GetPlayerHurtList(curNPC)  | 
|     if not npcHurtList or not npcHurtList.GetHurtCount():  | 
|         GameWorld.ErrLog("¿ç·þÑýħboss½áËãÎÞÉ˺¦Áбí: mapID=%s,lineID=%s,realMapID=%s,copyMapID=%s,zoneID=%s,npcID=%s,objID=%s"   | 
|                          % (mapID, lineID, realMapID, copyMapID, zoneID, npcID, objID))  | 
|         return  | 
|       | 
|     GameWorld.Log("¿ç·þÑýħbossÉ˺¦½áËã: mapID=%s,lineID=%s,realMapID=%s,copyMapID=%s,zoneID=%s,npcID=%s,objID=%s"   | 
|                   % (mapID, lineID, realMapID, copyMapID, zoneID, npcID, objID))  | 
|     npcHurtList.Sort()  #sortÒÔºóÉËѪÁбí´Ó´óµ½Ð¡ÅÅÐò  | 
|       | 
|     rank = 0  | 
|     playerHurtList = []  | 
|     for index in xrange(npcHurtList.GetHurtCount()):  | 
|         #»ñµÃÉËѪ¶ÔÏó  | 
|         hurtObj = npcHurtList.GetHurtAt(index)  | 
|         hurtType = hurtObj.GetValueType()  | 
|         hurtID = hurtObj.GetValueID()  | 
|         hurtValue = hurtObj.GetHurtValue()  | 
|         hurtName = hurtObj.GetHurtName()  | 
|         if hurtType != ChConfig.Def_NPCHurtTypePlayer or not hurtID:  | 
|             continue  | 
|         rank += 1  | 
|         playerID = hurtID  | 
|         GameWorld.Log("    zoneID=%s,rank=%s,playerID=%s,hurtValue=%s" % (zoneID, rank, playerID, hurtValue))  | 
|         playerHurtList.append([playerID, hurtValue, hurtName])  | 
|           | 
|     msgInfo = str([zoneID, npcID, playerHurtList])  | 
|     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "CrossYaomoBossHurtInfo", msgInfo, len(msgInfo))  | 
|     return  | 
|   | 
| def GetCrossYaomoBossHurtAward(curPlayer, awardIndex, tick):  | 
|       | 
|     playerID = curPlayer.GetPlayerID()  | 
|     if not ItemCommon.CheckPackHasSpace(curPlayer, IPY_GameWorld.rptItem, True):  | 
|         return  | 
|       | 
|     if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_CrossYaomoBoss, tick):  | 
|         PlayerControl.NotifyCode(curPlayer, "RequestLater")  | 
|         return  | 
|       | 
|     # ·¢ËÍ¿ç·þ·þÎñÆ÷  | 
|     dataMsg = {"playerID":playerID, "awardIndex":awardIndex}  | 
|     GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_CrossYaomoBossHurtAward, dataMsg)  | 
|     return  | 
|   | 
| def GameServer_CrossYaomoBoss_DoResult(curPlayer, msgData):  | 
|     msgType, dataMsg = msgData[:2]  | 
|     #ret = msgData[2] if len(msgData) > 2 else None  | 
|       | 
|     ## É˺¦Ä¿±ê½±Àø   | 
|     if msgType == "HurtValueAward":  | 
|         __DoGiveCrossYaomoBossHurtAward(curPlayer, dataMsg)  | 
|           | 
|     ## ²ÎÓë»÷ɱÑýħboss  | 
|     if msgType == "KillYaomoBoss":  | 
|         PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_CrossYaomoBoss, 1)  | 
|           | 
|     return  | 
|   | 
| def __DoGiveCrossYaomoBossHurtAward(curPlayer, dataMsg):  | 
|     playerID = curPlayer.GetPlayerID()  | 
|     awardIndex, awardItemList = dataMsg  | 
|     GameWorld.Log("¸øÍæ¼Ò¿ç·þÑýħbossÉ˺¦Ä¿±ê½±Àø: awardIndex=%s,awardItemList=%s" % (awardIndex, awardItemList), playerID)  | 
|     ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["CrossYaomoBoss", False, {}])  | 
|     return  |