#!/usr/bin/python # -*- coding: GBK -*- #--------------------------------------------------------------------- # #--------------------------------------------------------------------- ##@package PlayerControl # @todo: Íæ¼Ò¿ØÖÆÆ÷ # # @author: panwei # @date 2010-02-16 # @version 2.6 # # @change: "2011-02-23 14:20" panwei ϵͳÌáʾº¯ÊýÖØÐ´ # @change: "2011-07-15 19:30" Alee ¶ÓÎé֪ͨ # @change: "2011-09-02 16:20" panwei ÐÂÔö¾º¼¼³¡ÉèÖúͻñÈ¡¾ö¶·Öµ½Ó¿Ú # @change: "2012-11-06 15:00" jiang ÐÂÔö¾ºÍþÍûÉèÖúͻñÈ¡ÍþÍûÉè½Ó¿Ú # @change: "2012-11-07 17:30" wdb ÐÂÔö¿ç·þԤѡÈüÅÅλÐÅÏ¢ # @change: "2012-11-14 12:00" jiang ÐÞ¸ÄÀ©Õ¹ÊôÐÔ×ֶμǼµÄÊôÐÔÀàÐͱØÐëºÍMapServerÒ»Ö # @change: "2013-12-27 13:30" xmnathan ÁÄÌì¼ÓGm±êʶ # @change: "2014-02-28 21:10" hxp Ôö¼ÓÐÂÊÖÖ¸µ¼Ô±Âß¼­ # @change: "2014-03-05 10:00" Alee ÁÄÌì֪ͨ±êʶ # @change: "2014-11-12 20:00" hxp Ôö¼Ó֪ͨMapServerÔö¼Ó³É¾ÍÍê³É½ø¶È # @change: "2015-07-14 21:00" xdh ÁÄÌìÐÅÏ¢Ô­¸½¼ÓÖµ¸ÄΪExtras # @change: "2015-10-28 00:00" hxp Ôö¼ÓÉèÖöÔÕ½·¿¼äID # @change: "2015-11-05 12:00" hxp Ôö¼Ó¿ç·þÈ«·þ¹ã²¥ # @change: "2017-06-22 15:00" hxp ¿ç·þ¹ã²¥Ôö¼ÓÌõ¼þ¹ýÂË×Ó·þÊÇ·ñÌáÐÑ£»¿ç·þ·þÎñÆ÷È«·þ¹ã²¥Í¬²½×Ó·þ #--------------------------------------------------------------------- #"""Version = 2017-06-22 15:00""" #--------------------------------------------------------------------- import GameWorld import IPY_GameServer import MergeBroadcast import IpyGameDataPY import CrossRealmMsg import ShareDefine import ChConfig import types #--------------------------------------------------------------------- #ϵͳÌáʾ²ÎÊýÁбí NotifyCodeList = IPY_GameServer.IPY_NotifyCodeList() #--------------------------------------------------------------------- ## ÏûÏ¢Ìáʾ # @param curPlayer ÌáʾµÄÍæ¼Ò # @param msgMark ÌáʾÐÅÏ¢Mark # @param msgParamList ÐÅÏ¢²ÎÊýÁбí # @return ÎÞ·µ»ØÖµ # @remarks def NotifyCode(curPlayer, msgMark, msgParamList=[]): if curPlayer == None: GameWorld.ErrLog('NotifyCode Player = None') return curPlayer.NotifyCode(msgMark, __GetNotifyCodeList(msgParamList)) return def NotifyCodeToClientServer(serverGroupIDList, playerID, msgMark, msgParamList=[]): dataMsg = {"Type":"Player", "ID":playerID, "Mark":msgMark, "Param":msgParamList} CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_Notify, dataMsg, serverGroupIDList) return def CrossServerMsg_Notify(notifyInfoDict): notifyType = notifyInfoDict["Type"] notifyID = notifyInfoDict["ID"] if notifyType == "Player": curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(notifyID) if not curPlayer: return NotifyCode(curPlayer, notifyInfoDict["Mark"], notifyInfoDict["Param"]) return ## ¿ç·þÊÀ½ç¹ã²¥ # @param country ÌáʾµÄ¹ú¼Ò # @param msgMark ÌáʾÐÅÏ¢Mark # @param msgParamList ÐÅÏ¢²ÎÊýÁбí # @param mergeMinOSD ¸ÃÌáʾÕë¶Ô¿ç·þ×Ó·þÓÐЧµÄ×îС¿ª·þÌì, >=0ʱÓÐÏÞÖÆ # @param mergeMaxOSD ¸ÃÌáʾÕë¶Ô¿ç·þ×Ó·þÓÐЧµÄ×î´ó¿ª·þÌì, >=0ʱÓÐÏÞÖÆ # @param mergeMapInfo ¸ÃÌáʾËùÊôµÄ¿ç·þ»î¶¯µØÍ¼ÐÅÏ¢, Ö÷ÒªÓÃÓÚ²»Í¬×Ó·þ¶ÔÓ¦Ëù¿çµÄ»î¶¯µØÍ¼ID # @remarks def MergeWorldNotify(country, msgMark, msgParamList=[], lineID=0, mergeMinOSD=-1, mergeMaxOSD=-1, mergeMapInfo=[], isMapNotify=0): # ·ÇµØÍ¼Í¬²½µÄ¹ã²¥²Å½øÐÐÈ«·þ¹ã²¥ if not isMapNotify: GameWorld.GetPlayerManager().CountryNotifyCode(country, msgMark, __GetNotifyCodeList(msgParamList)) notifyDict = {"country":country, "msgMark":msgMark, "msgParamList":msgParamList, "lineID":lineID, "mergeMinOSD":mergeMinOSD, "mergeMaxOSD":mergeMaxOSD, "mergeMapInfo":mergeMapInfo} MergeBroadcast.SendBroadcastMerge(ChConfig.Def_MergeWorldNotify, 0, notifyDict, False) return ## ÊÀ½ç¹ã²¥ # @param country ÌáʾµÄ¹ú¼Ò # @param msgMark ÌáʾÐÅÏ¢Mark # @param msgParamList ÐÅÏ¢²ÎÊýÁбí # @return ÎÞ·µ»ØÖµ # @remarks def WorldNotify(country, msgMark, msgParamList=[]): if GameWorld.IsMergeServer(): MergeWorldNotify(country, msgMark, msgParamList) else: GameWorld.GetPlayerManager().CountryNotifyCode(country, msgMark, __GetNotifyCodeList(msgParamList)) return #--------------------------------------------------------------------- ## ¼Ò×å¹ã²¥ # @param familyID ÌáʾµÄ¼Ò×åID # @param msgMark ÌáʾÐÅÏ¢Mark # @param msgParamList ÐÅÏ¢²ÎÊýÁбí # @return ÎÞ·µ»ØÖµ # @remarks def FamilyNotify(familyID, msgMark, msgParamList=[]): GameWorld.GetPlayerManager().FamilyNotifyCode(familyID, msgMark, __GetNotifyCodeList(msgParamList)) return ## ¶ÓÎé¹ã²¥ # @param teamID ¶ÓÎéID # @param msgMark ÌáʾÐÅÏ¢Mark # @param msgParamList ÐÅÏ¢²ÎÊýÁбí # @return ÎÞ·µ»ØÖµ def TeamNotify(teamID, msgMark, msgParamList=[]): curTeam = GameWorld.GetGameWorld().GetTeamManager().FindTeam(teamID) if curTeam == None: return for i in range(curTeam.GetMemberCount()): curPlayer = curTeam.GetMemberPlayer(i) if not curPlayer: continue #֪ͨÿ¸ö¶ÓÔ± NotifyCode(curPlayer, msgMark, msgParamList) return #--------------------------------------------------------------------- ## ¹¹½¨ÏµÍ³Ìáʾ²ÎÊýÁбí # @param msgParamList ÐÅÏ¢²ÎÊýÁбí # @return ϵͳÌáʾ²ÎÊýÁбí IPY_NotifyCodeList # @remarks def __GetNotifyCodeList(msgParamList): #ÏûÏ¢ÌáʾÁбí, ÏÈÇåÔÚÌí¼Ó global NotifyCodeList NotifyCodeList.Clear() if not msgParamList: return NotifyCodeList for msg in msgParamList: itemPythonType = type(msg) if itemPythonType is types.IntType or itemPythonType is types.LongType: #PythonÒªÑéÖ¤ÕûÐͺͳ¤ÕûÐÍ NotifyCodeList.AddInt(msg) else: NotifyCodeList.AddStr(msg) return NotifyCodeList #waring:ÒÔÏÂʹÓõÄÀ©Õ¹ÊôÐÔ×ֶμǼµÄÊôÐÔÀàÐͱØÐëºÍMapServerÒ»Ö #------------------------------------------------------------------------------ ##ÉèÖþö¶·Öµ(¾º¼¼³¡ÓÃ) # @param curPlayer Íæ¼Ò # @param value ÊýÖµ # @return None def SetVsFightValue(curPlayer, value): return ##»ñÈ¡¾ö¶·Öµ(¾º¼¼³¡ÓÃ) # @param curPlayer Íæ¼Ò # @return ¾ö¶·Öµ def GetVsFightValue(curPlayer): return 0 #------------------------------------------------------------------------------ ## ÉèÖÃÍþÍû # @param curPlayer: Íæ¼ÒʵÀý # @param value: ÍþÍûÖµ # @return: def SetPrestige(curPlayer, value): return ## »ñÈ¡ÍþÍû # @param curPlayer: Íæ¼ÒʵÀý # @return: ÍþÍûÖµ def GetPrestige(curPlayer): return 0 #------------------------------------------------------------------------------ ## ÉèÖÃÍæ¼Ò¿ç·þÔ¤ÈüÅÅλ # @param curPlayer: Íæ¼ÒʵÀý # @param value: ÍþÍûÖµ # @return: def SetMergeWarRank(curPlayer, value): return ## »ñÈ¡Íæ¼Ò¿ç·þÔ¤ÈüÅÅλ # @param curPlayer: Íæ¼ÒʵÀý # @return: ÍþÍûÖµ def GetMergeWarRank(curPlayer): return 0 ## Ö°Òµ½×Êý def GetJobRank(curPlayer): return curPlayer.GetExAttr1() def SetJobRank(curPlayer, jobRank): return curPlayer.SetExAttr1(jobRank) ##VIPµ½ÆÚʱ¼ä def GetVIPExpireTime(curPlayer): return curPlayer.GetExAttr9() def SetVIPExpireTime(curPlayer, expireTime): return curPlayer.SetExAttr9(expireTime) def GetValidVIPLV(curPlayer): # @return: ·µ»Øµ±Ç°ÓÐЧµÄVIPµÈ¼¶ # vipTime = GetVIPExpireTime(curPlayer) # curTime = GameWorld.ChangeTimeStrToNum(GameWorld.GetCurrentDataTimeStr()) # if vipTime <= curTime: # return 0 return curPlayer.GetVIPLv() ## ¸ù¾ÝÌØÈ¨ID ºÍ VIPµÈ¼¶»ñµÃÌØÈ¨Öµ def GetPrivilegeValue(vipLV, privilegeID): if privilegeID not in ChConfig.VIPPrivilegeList: return 0 vipMsg = IpyGameDataPY.GetIpyGameData('VipPrivilege', privilegeID) if not vipMsg: return 0 return getattr(vipMsg, 'GetVIP%d' % vipLV)() ##ÁÄÌìÆøÅÝ¿ò def GetChatBubbleBox(curPlayer): return curPlayer.GetExAttr10() def SetChatBubbleBox(curPlayer, value): return curPlayer.SetExAttr10(value) ##½ñÈÕÒÑ»ñµÃÏÉÔµ±Ò def GetTodayXianyuanCoin(curPlayer): return curPlayer.GetExAttr11() def SetTodayXianyuanCoin(curPlayer, value): return curPlayer.SetExAttr11(value) ##Íæ¼ÒÖ÷¶¯Í˳öÏÉÃËʱ¼ä(<100´ú±íÍ˳ö´ÎÊý) def SetLeaveFamilyTime(curPlayer, value, isSyncMap=True): curPlayer.SetExAttr12(value) if isSyncMap: sysMsg = '%s'%value curPlayer.MapServer_QueryPlayerResult(0, 0, "SetLeaveFamilyTime", sysMsg, len(sysMsg)) return def GetLeaveFamilyTime(curPlayer):return curPlayer.GetExAttr12() ## ÊÇ·ñÍÑ»ú¹Ò»ú״̬ def GetIsTJG(curPlayer): if curPlayer.GetDictByKey(ChConfig.Def_OnlineType): return True if curPlayer.GetIP() == "127.0.0.1": # ´Ë´¦Ö»ÄÜÓÃIPÅж¨£¬ÒòΪÍÑ»ú״̬»¹Î´Í¨Öªµ½GameServer return True return False def SetIsTJG(curPlayer, state): curPlayer.SetDict(ChConfig.Def_OnlineType, state) ## »ñÈ¡ÍÑ»ú¹Ò»úÊ£Óàʱ¼ä def GetTJGTime(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_TJGTime) def SetTJGTime(curPlayer, tjgTime): curPlayer.SetDict(ChConfig.Def_TJGTime, tjgTime) # ½ûÑÔ def GetGMForbidenTalk(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_ForbiddenTalk) def SetGMForbidenTalk(curPlayer, value): curPlayer.SetDict(ChConfig.Def_ForbiddenTalk, value) #------------------------------------------------------------------------------ ## ÉèÖÃÐÂÊÖÖ¸µ¼Ô±ÌìÊý # @param curPlayer: Íæ¼ÒʵÀý # @param day: ÌìÊý # @return: def SetFreshmanGuiderDay(curPlayer, day): curPlayer.SetDict(ChConfig.Def_PlayerKey_FreshmanGuiderDay, day) return ## »ñÈ¡ÐÂÊÖÖ¸µ¼Ô±ÌìÊý # @param curPlayer: Íæ¼ÒʵÀý # @return: ÌìÊý def GetFreshmanGuiderDay(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FreshmanGuiderDay) ## Ôö¼Ó³É¾ÍÍê³É½ø¶È # @param curPlayer # @param successType: ³É¾ÍÀàÐÍ # @param addCnt: Ôö¼Ó½ø¶ÈÖµ # @param condition: À©Õ¹Ìõ¼þ # @return def DoAddSuccessProgress(curPlayer, successType, addCnt, condition=[]): if successType not in ShareDefine.SuccessTypeList: return sysMsg = '%s'%([successType, addCnt, condition]) curPlayer.MapServer_QueryPlayerResult(0, 0, "AddSuccessProgress", sysMsg, len(sysMsg)) return ## ÉèÖÃÍæ¼Ò·¿¼äID # @param curPlayer # @param roomID # @return def SetVsRoomId(curPlayer, roomID, isSetMergeRegRoomID=False): curPlayer.SetVsRoomId(roomID) if isSetMergeRegRoomID: curPlayer.SetDict(ChConfig.Def_PlayerKey_MergeRegisterRoomID, roomID) GameWorld.Log("SetVSRoomID playerID=%s, roomID=%s" % (curPlayer.GetPlayerID(), roomID)) SetMapServerPlayerAttrValue(curPlayer, "SetVsRoomId", roomID) return ## ¿ç·þ״̬: 0-·Ç¿ç·þ״̬£¬1-¿ç·þ״̬ def GetCrossRealmState(curPlayer): return curPlayer.GetExAttr5() def SetCrossRealmState(curPlayer, value): ''' ÉèÖÃÍæ¼Ò¿ç·þ״̬ @param isExitCrossRealm: ·Ç¿ç·þ״̬ʱÊÇ·ñ֪ͨǰ¶ËÍ˳ö¿ç·þ·þÎñÆ÷ ''' curPlayer.SetExAttr5(value) SetMapServerPlayerAttrValue(curPlayer, "SetExAttr5", value) return def SetMapServerPlayerAttrValue(curPlayer, attrName, value, exData=[]): ## ÉèÖõØÍ¼·þÎñÆ÷Íæ¼Ò¶ÔÓ¦ÊôÐÔÖµ setAttrInfo = str([attrName, value] + exData) curPlayer.MapServer_QueryPlayerResult(0, 0, "SetPlayerAttr", setAttrInfo, len(setAttrInfo)) return ## µØÍ¼·þÎñÆ÷¿ÛÎïÆ· # @param curPlayer # @param itemList [(itemID,count), (itemID,count),..] def MapServerDelItem(curPlayer, itemList, eventName): result = str([itemList, eventName]) curPlayer.MapServer_QueryPlayerResult(0, 0, "DelItem", result, len(result)) return ## Ôö¼ÓÏÉÃË»îÔ¾ # @param curPlayer # @param successType: ³É¾ÍÀàÐÍ # @param addCnt: Ôö¼Ó½ø¶ÈÖµ # @param condition: À©Õ¹Ìõ¼þ # @return def DoAddFamilyActivity(curPlayer, actionid, addCnt): if actionid not in ShareDefine.FamilyActiveIDList: return sysMsg = '%s'%([actionid, addCnt]) curPlayer.MapServer_QueryPlayerResult(0, 0, "AddFamilyActivity", sysMsg, len(sysMsg)) return ## »ñÈ¡¹¦ÄÜÏÞÖÆµÈ¼¶(µÈ¼¶Ìõ¼þΪȫ¾Ö) def GetFuncLimitLV(funcID): ipyData = IpyGameDataPY.GetIpyGameData("FuncOpenLV", funcID) if not ipyData: return 0 return ipyData.GetLimitLV()