#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#---------------------------------------------------------------------
|
#
|
#---------------------------------------------------------------------
|
##@package PlayerGMOper
|
# @todo: Íæ¼ÒGMÃüÁî²Ù×÷±í
|
#
|
# @author: panwei
|
# @date 2011-05-23
|
# @version 1.1
|
#
|
# @note:
|
# @change: "2011-05-31 21:30" Alee ÐÂÔö·âºÅº¯Êý²ÎÊý²»Í¬
|
#---------------------------------------------------------------------
|
"""Version = 2011-05-31 21:30"""
|
#---------------------------------------------------------------------
|
import GameWorld
|
import IPY_GameWorld
|
import ChConfig
|
import PlayerControl
|
#---------------------------------------------------------------------
|
#È«¾Ö±äÁ¿
|
#---------------------------------------------------------------------
|
|
#---------------------------------------------------------------------
|
#Â߼ʵÏÖ
|
|
|
## ³õʼ»¯GM²Ù×÷
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def DoGMOperLogic(curPlayer, tick):
|
#Íæ¼ÒGM²Ù×÷Áбí
|
curPlayer_GMOper = curPlayer.GetGMOperManager()
|
curPlayer_GMOper_Count = curPlayer_GMOper.GetCount()
|
|
if not curPlayer_GMOper_Count:
|
#ûÓоͷµ»ØÁË
|
return
|
|
curDateTime = GameWorld.GetCurrentTime()
|
delList = []
|
|
for index in range(curPlayer_GMOper_Count):
|
curOper = curPlayer_GMOper.GetAt(index)
|
curOperValue = curOper.GetOper()
|
curOperEndTime = GameWorld.GetDateTimeByStr(curOper.GetEndTime())
|
|
#ʱ¼äµ½
|
if curOperEndTime != None and curDateTime >= curOperEndTime:
|
DoClearOper(curPlayer, curOperValue)
|
delList.append(curOperValue)
|
continue
|
|
if curOperValue == IPY_GameWorld.gmForbidTalk:
|
if not curPlayer.GetAccState() & pow(2, ChConfig.Def_PysForbidTalk):
|
GameWorld.DebugLog("Íæ¼ÒÕ˺Å״̬Òѱ»½â³ý½ûÑÔ£¬É¾³ý¸ÃGMOperÃüÁî!")
|
DoClearOper(curPlayer, curOperValue)
|
delList.append(curOperValue)
|
continue
|
|
#Ö´ÐÐGMÃüÁî
|
DoOper(curPlayer, curOperValue)
|
|
for oper in delList:
|
curPlayer_GMOper.DeleteOper(oper)
|
|
#¼´Ê±´æÅÌ
|
curPlayer_GMOper.Sync_SaveToDB()
|
|
#Õʺű»·â
|
if curPlayer.GetDictByKey(ChConfig.Def_GM_Oper_ForbidAcc):
|
curPlayer.Kick(IPY_GameWorld.disGMKick)
|
|
return
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# enum TGMOper
|
# {
|
# gmForbidFight = 0, //½ûÖ¹Õ½¶·
|
# gmForbidAcc, //½ûÖ¹ÕʺÅ
|
# gmForbidVisible, //ÒþÉí
|
# gmForbidTalk, //½ûÑÔ
|
# };
|
#===============================================================================
|
#---------------------------------------------------------------------
|
## Ö´ÐÐGMOper²Ù×÷
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param curOperValue gmÃüÁî²Ù×÷Öµ
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def DoOper(curPlayer, curOperValue):
|
if curOperValue == IPY_GameWorld.gmForbidFight:
|
__Do_ForbidenFight(curPlayer)
|
|
elif curOperValue == IPY_GameWorld.gmForbidAcc:
|
__Do_ForbidAcc(curPlayer)
|
|
elif curOperValue == IPY_GameWorld.gmForbidVisible:
|
__Do_ForbidVisible(curPlayer)
|
|
elif curOperValue == IPY_GameWorld.gmForbidTalk:
|
__Do_ForbidTalk(curPlayer)
|
|
else:
|
GameWorld.Log("ÎÞЧGM²Ù×÷·û = %s"%(curOperValue), curPlayer.GetPlayerID())
|
|
return
|
|
#---------------------------------------------------------------------
|
## Çå³ýGMOper²Ù×÷
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param curOperValue gmÃüÁî²Ù×÷Öµ
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def DoClearOper(curPlayer, curOperValue):
|
if curOperValue == IPY_GameWorld.gmForbidFight:
|
__Cancel_ForbidenFight(curPlayer)
|
|
elif curOperValue == IPY_GameWorld.gmForbidAcc:
|
pass
|
|
elif curOperValue == IPY_GameWorld.gmForbidVisible:
|
__Cancel_ForbidVisible(curPlayer)
|
|
elif curOperValue == IPY_GameWorld.gmForbidTalk:
|
__Cancel_ForbidTalk(curPlayer)
|
|
else:
|
GameWorld.Log("ÎÞЧGM²Ù×÷·û = %s"%(curOperValue), curPlayer.GetPlayerID())
|
|
return
|
|
#---------------------------------------------------------------------
|
## ½ûÖ¹Õ½¶·
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def __Do_ForbidenFight(curPlayer):
|
if not curPlayer.GetGMForbidenFight():
|
curPlayer.SetGMForbidenFight(True)
|
|
return
|
|
## È¡Ïû½ûÖ¹Õ½¶·
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def __Cancel_ForbidenFight(curPlayer):
|
if curPlayer.GetGMForbidenFight():
|
curPlayer.SetGMForbidenFight(False)
|
|
return
|
#---------------------------------------------------------------------
|
## ÒþÉí
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def __Do_ForbidVisible(curPlayer):
|
if curPlayer.GetVisible():
|
curPlayer.SetVisible(False)
|
|
return
|
|
## È¡ÏûÒþÉí
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def __Cancel_ForbidVisible(curPlayer):
|
if not curPlayer.GetVisible():
|
curPlayer.SetVisible(True)
|
|
return
|
#---------------------------------------------------------------------
|
## ½ûÖ¹ÁÄÌì
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def __Do_ForbidTalk(curPlayer):
|
if not curPlayer.GetGMForbidenTalk():
|
PlayerControl.SetGMForbidenTalk(curPlayer, 1)
|
|
return
|
|
## È¡Ïû½ûÖ¹ÁÄÌì
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def __Cancel_ForbidTalk(curPlayer):
|
if curPlayer.GetGMForbidenTalk():
|
PlayerControl.SetGMForbidenTalk(curPlayer, 0)
|
|
return
|
#---------------------------------------------------------------------
|
## ½ûÖ¹Õ˺ŵǽ
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def __Do_ForbidAcc(curPlayer):
|
curPlayer.SetDict(ChConfig.Def_GM_Oper_ForbidAcc, 1)
|
return
|
|
#---------------------------------------------------------------------
|
## GMOper·âºÅ lastTime(·ÖÖÓ)
|
# @param curTagPlayer µ±Ç°Íæ¼Ò
|
# @param lastTime ½áÊøÊ±¼ä
|
# @param msg gmÏûÏ¢
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def ClosePlayerByAccID(curTagPlayer, lastTime, msg):
|
curFindPlayer_GMOper = curTagPlayer.GetGMOperManager()
|
|
gmOper = curFindPlayer_GMOper.AddGMOper(IPY_GameWorld.gmForbidAcc)
|
|
gmOper.SetGMAccID('sys')
|
gmOper.SetLastTime(lastTime)
|
gmOper.SetMsg(msg)
|
|
curFindPlayer_GMOper.Sync_SaveToDB()
|
|
PlayerControl.SetPlayerAccState(curTagPlayer, IPY_GameWorld.pysForbidden)
|
|
curTagPlayer.Kick(IPY_GameWorld.disGMKick)
|
return
|
|
## GMOper·âºÅ £¨²ÎÊý²»Í¬£©
|
# @param curTagPlayer µ±Ç°Íæ¼Ò
|
# @param lastTime ½áÊøÊ±¼ä
|
# @param msg gmÏûÏ¢
|
# @param oper ¼Ç¼Á÷ÏòºÅ
|
# @return None
|
def ClosePlayerByAccIDEx(curTagPlayer, lastTime, msg, oper):
|
curFindPlayer_GMOper = curTagPlayer.GetGMOperManager()
|
|
gmOper = curFindPlayer_GMOper.AddGMOper(IPY_GameWorld.gmForbidAcc)
|
|
gmOper.SetGMAccID('sys')
|
gmOper.SetLastTime(lastTime)
|
gmOper.SetMsg(msg)
|
|
curFindPlayer_GMOper.Sync_SaveToDB()
|
|
PlayerControl.SetPlayerAccState(curTagPlayer, IPY_GameWorld.pysForbidden)
|
|
curTagPlayer.Kick(IPY_GameWorld.disGMKick)
|
return
|
|
|