#!/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 <n color="255,255,255" BKCOLOR="0,0,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
|
|