#!/usr/bin/python # -*- coding: GBK -*- #--------------------------------------------------------------------- # #--------------------------------------------------------------------- ##@package PlayerExam # @todo: ´ðÌâ»î¶¯ # # @author: panwei # @date 2011-03-31 # @version 1.7 # # @change: "2011-04-07 19:00" panwei ´ðÌâÐÂÔöÒ»¸öÎÞµÐBuff # @change: "2011-04-08 10:40" panwei ´ðÌâ½øÈëÐÂÔöµÈ¼¶ÑéÖ¤, Íæ¼ÒÏÂÏßÍ˳ö´ðÌâÂß¼­ÐÞ¸Ä # @change: "2012-05-16 15:00" jiang C++Ð޸ĽӿÚGameServer_QueryPlayerByIDºÍGameServer_QueryPlayerResult # @change: "2013-04-17 20:35" Alee ͳһBUFFɾ³ýº¯ÊýDelBuffBySkillID # @change: "2013-04-25 13:30" Alee ×ªÒÆDelBuffBySkillID # @change: "2014-05-04 15:00" xcc Ð޸ĴðÌâ»î¶¯£¬²»ÅжÏÍæ¼Òµ±Ç°×´Ì¬ºÍËø¶¨Íæ¼Òµ±Ç°×´Ì¬ # @change: "2014-07-14 18:30" hxp Ôö¼ÓÿÈÕ»îÔ¾¶È #------------------------------------------------------------------------------ """Version = 2014-07-14 18:30""" #--------------------------------------------------------------------- import GameWorld import ShareDefine import PlayerControl import ChConfig import SkillCommon import BuffSkill import PetControl import ReadChConfig import IPY_GameWorld import PlayerActivity #--------------------------------------------------------------------- #Íæ¼Ò²»¿É²Î¼Ó´ðÌâ״̬ϵͳÌáʾ Def_Exam_JionFailByPlayerActionNotifyDict = {IPY_GameWorld.paDie: 'FB_liubo_692265', IPY_GameWorld.paAttack: 'FB_liubo_837087', IPY_GameWorld.paTrade: 'Campaign_lhs_372238', IPY_GameWorld.paSit:'Campaign_lhs_425673', IPY_GameWorld.paProduce:'FB_liubo_902992', } #--------------------------------------------------------------------- #=============================================================================== # //01 1B²Î¼Ó»î¶¯#tagCJoinAction # //¶ÔÐÔÄÜÓ°Ïì²»´ó # struct tagCJoinAction # { # BYTE Type;//»î¶¯ÀàÐÍ # }; #=============================================================================== ##²Î¼Ó»î¶¯#tagCJoinAction # @param index Íæ¼ÒË÷Òý # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¿Í»§¶Ë·â°üÏìÓ¦ 01 1B²Î¼Ó»î¶¯#tagCJoinAction def Client_JoinAction(index, tick): # GameWorld.Log("¿Í»§¶Ë·¢°ü£¬ÇëÇó¼ÓÈë/Í˳ö´ðÌâ»î¶¯") curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) pack = IPY_GameWorld.IPY_CJoinAction() sendExamType = pack.GetType() if sendExamType == 0: #Í˳ö»î¶¯ # GameWorld.Log("¿Í»§¶Ë·¢°ü£¬ÇëÇóÍ˳ö´ðÌâ»î¶¯") DoLogic_ExitExam(curPlayer, tick) return #---ÑéÖ¤·â°üºÏ·¨ÐÔ--- if sendExamType not in ShareDefine.Def_Game_ExamTypeList: GameWorld.ErrLog('Client_JoinAction, sendExamType = %s Ìâ¿âÒì³£'%(sendExamType)) return serverExamType = __GetExamType() if sendExamType != serverExamType: #GameWorld.Log('Client_JoinAction Err sendExamType = %s, serverExamType = %s'%(sendExamType, serverExamType)) #FB_liubo_656426 ÏÖÔÚ²»Êǻʱ¼ä,²»Äܲμӻà¡! PlayerControl.NotifyCode(curPlayer, "FB_liubo_656426") return #---¼ì²éÊÇ·ñ¿ÉÒԲμӻ--- if not __CheckPlayerCanJoinExam(curPlayer, serverExamType): # GameWorld.Log("Íæ¼Òµ±Ç°×´Ì¬ÎÞ·¨²Î¼Ó»î¶¯") return # »îÔ¾¶È #PlayerActivity.AddActivityFinishCnt(curPlayer, ShareDefine.ActivityNum_JoinZXH) #·¢ËÍ·â°üµ½GameServer²ÎÓë´ðÌâ»î¶¯ # GameWorld.Log("MapServer ·¢°ü¸ø GameServerÍ¨ÖªÍæ¼ÒÇëÇó¼ÓÈë´ðÌâ»î¶¯") curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_JionExam, sendExamType, '', '', 0) return #--------------------------------------------------------------------- ##¼ì²éÍæ¼ÒÊÇ·ñ¿ÉÒÔ²ÎÓë´ðÌâ # @param curPlayer Íæ¼ÒʵÀý # @param serverExamType µ±Ç°´ðÌâÀàÐÍ # @return ²¼¶ûÖµ # @remarks def __CheckPlayerCanJoinExam(curPlayer, serverExamType): #ÑéÖ¤Íæ¼ÒµÈ¼¶ curPlayerLv = curPlayer.GetLV() enterExamLvDict = ReadChConfig.GetEvalChConfig('ExamJionLv') enterExamLv = enterExamLvDict.get(serverExamType) if enterExamLv != None and enterExamLv > curPlayerLv: #FB_admin_0 ÄúµÄµÈ¼¶²»×ã{%S1%},ÎÞ·¨²Î¼Ó´Ë»î¶¯! PlayerControl.NotifyCode(curPlayer, "FB_admin_0", [enterExamLv]) return False # if curPlayer.IsMoving(): # PlayerControl.NotifyCode(curPlayer, "Campaign_lhs_671654") # return False # # if curPlayer.IsBattleState(): # PlayerControl.NotifyCode(curPlayer, "FB_liubo_837087") # return False # # playerAction = curPlayer.GetPlayerAction() # # if playerAction in Def_Exam_JionFailByPlayerActionNotifyDict: # PlayerControl.NotifyCode(curPlayer, Def_Exam_JionFailByPlayerActionNotifyDict[playerAction]) # return False # # if playerAction != IPY_GameWorld.paNull: # PlayerControl.NotifyCode(curPlayer, "FB_liubo_314575") # return False # # if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull: # PlayerControl.NotifyCode(curPlayer, "FB_liubo_314885") # return False return True #--------------------------------------------------------------------- ##»ñÈ¡´ðÌâÀàÐÍ. # @param ÎÞ²ÎÊý # @return Def_Game_Exam_Type # @remarks def __GetExamType(): return GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_Game_EXAM) #--------------------------------------------------------------------- ##Íæ¼ÒÖ÷¶¯Í˳ö´ðÌâ # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @param needRefresh ÊÇ·ñÁ¢¼´Ë¢Ð # @return ·µ»ØÖµÎÞÒâÒå # @remarks def DoLogic_ExitExam(curPlayer, tick, needRefresh=True): #ɾ³ý´ðÌâBuff if not ClearExamBuff(curPlayer, tick, needRefresh = True): # GameWorld.Log("ɾ³ý´ðÌâbuffʧ°Ü") return # GameWorld.Log("֪ͨGameServer,Íæ¼ÒÍ˳ö´ðÌâ") #֪ͨGameServerÍ˳ö´ðÌâ ÕâÀïÓпÉÄÜÍæ¼ÒÒѾ­ÏÂÏß, ²»Äܵ÷ÓÃcurPlayer.GameServer_QueryPlayerByID GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'ExitExam', '', 0) return #--------------------------------------------------------------------- ##Íæ¼ÒÖ÷¶¯½øÈë´ðÌâ # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå # @remarks def DoLogic_EnterExam(curPlayer, tick): # GameWorld.Log("GameServer ֪ͨ MapServer Íæ¼Ò²Î¼Ó´ðÌâ³É¹¦") # #ÕÙ»½»Ø³öÕ½µÄ³èÎï # PetControl.ReCallFightPet(curPlayer) # #¸øÍæ¼ÒÌí¼Ó´ðÌâBuff # SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer, ChConfig.Def_SkillID_JoinExam, tick) # #¸øÍæ¼Ò¼Ó»î¶¯ÎÞµÐBuff # SkillCommon.AddBuffBySkillType(curPlayer, ChConfig.Def_SkillID_ActionWuDi, tick) # #ÉèÖÃÍæ¼ÒΪ´ðÌâ״̬ # PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paDOT) return #--------------------------------------------------------------------- ##ɾ³ý´ðÌâBuff # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @param needRefresh ÊÇ·ñÁ¢¼´Ë¢Ð # @return ²¼¶ûÖµ # @remarks def ClearExamBuff(curPlayer, tick, needRefresh=True): #ɾ³ý»î¶¯Buff # BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_SkillID_ActionWuDi, tick) # # #ɾ³ý´ðÌâBuff # if not BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_SkillID_JoinExam, tick): # return False # # #Íæ¼Ò״̬±ä¸ü # PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paNull) # # if not needRefresh: # return True # # #ÖØÐÂË¢ÐÂÊôÐÔ # playerControl = PlayerControl.PlayerControl(curPlayer) # playerControl.RefreshAllState() return True