#!/usr/bin/python # -*- coding: GBK -*- #--------------------------------------------------------------------- # #--------------------------------------------------------------------- ##@package PlayerFamily #¼Ò×åÂß¼­´¦Àí # # @author eggxp # @date 2010-4-23 # @version 1.0 # #--------------------------------------------------------------------- #"""Version = 2017-07-12 21:00""" #--------------------------------------------------------------------- import IPY_GameWorld import GameWorld import EventShell import FBLogic import ChConfig import PlayerControl import ShareDefine import ReadChConfig import PlayerTruck import NetPackCommon import ChPyNetSendPack import DataRecordPack import GameLogic_FamilyWar import ChMapToGamePyPack import PlayerFamilyTech import PlayerFamilyRedPacket import SkillCommon import BuffSkill import ItemCommon import PlayerSuccess import GameFuncComm import PlayerTJG import IpyGameDataPY import time import random #--------------------------------------------------------------------- #¼Ò×åˢР#class IPY_MFamilyRefresh #{ #public: # # int GetFamilyID(); # # char * GetFamilyName(); #}; ## ¼Ò×åˢР# @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def GameServer_FamilyRefresh(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) refreshPack = IPY_GameWorld.IPY_MFamilyRefresh() if curPlayer.GetID() != refreshPack.GetPlayerID(): #²»ÊÇ×Ô¼º return lastFamilyID = curPlayer.GetFamilyID() #************×峤±ä¸üɾ³ý·¢²¼ÈÎÎñ************************************************* if (curPlayer.GetFamilyMemberLV() == IPY_GameWorld.fmlLeader and refreshPack.GetFamilyMemberLV()!= IPY_GameWorld.fmlLeader): EventShell.EventResponse_OnMemberChange(curPlayer) #******************************************************************* #---¸ù¾Ý·â°üÐÞ¸ÄÍæ¼Ò¼Ò×åÊôÐÔ--- if lastFamilyID != refreshPack.GetFamilyID(): curPlayer.SetFamilyID(refreshPack.GetFamilyID()) familyIDChangeTime = int(time.time()) #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyIDChangeTime, familyIDChangeTime) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_LastFamilyID, lastFamilyID) GameWorld.Log("¼Ç¼¼Ò×å±ä¸üʱ¼ä...familyIDChangeTime=%s,lastFamilyID=%s,nextFamilyID=%s" % (familyIDChangeTime, lastFamilyID, refreshPack.GetFamilyID()), curPlayer.GetPlayerID()) #´¥·¢Íæ¼Ò¼ÓÈë¼Ò×åʼþ EventShell.EventResponse_OnFamilyAdd(curPlayer) if curPlayer.GetFamilyName() != refreshPack.GetFamilyName(): curPlayer.SetFamilyName(refreshPack.GetFamilyName()) #֪ͨÖÜÎ§Íæ¼Ò¼Ò×åÃû³ÆË¢Ð curPlayer.Notify_FamilyNameRefresh() refreshFamilyLV = refreshPack.GetFamilyLV() lastFamilyLV = curPlayer.GetFamilyLV() if lastFamilyLV != refreshFamilyLV: #ÈÎÎñÐèÇ󣬼ǼÏÈǰµÄ¼Ò×åµÈ¼¶ curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyLVLeave, lastFamilyLV) isLVUP = False if lastFamilyLV and refreshFamilyLV > 0: #´¥·¢¼Ò×åÉý¼¶Ê¼þ isLVUP = True curPlayer.SetFamilyLV(refreshFamilyLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyLV, refreshFamilyLV) __OnFamilyLVBuffChange(curPlayer, tick) #´¥·¢¼Ò×åÉý¼¶Ê¼þ, ÔÚSetFamilyLVÖ®ºó£¬ÈÎÎñ¿ÉÒÔÈ¡µÈ¼¶Åж¨ if isLVUP: EventShell.EventResponse_OnFamilyLVUp(curPlayer) if curPlayer.GetFamilyMemberLV() != refreshPack.GetFamilyMemberLV(): curPlayer.SetFamilyMemberLV(refreshPack.GetFamilyMemberLV()) #֪ͨÖÜÎ§Íæ¼Ò¼Ò×åְλˢР#curPlayer.Notify_FamilyMemberLVRefresh() GameLogic_FamilyWar.DoCheckChampionFamilyTitle(curPlayer) if curPlayer.GetFamilyMoney() != refreshPack.GetFamilyMoney(): curPlayer.SetFamilyMoney(refreshPack.GetFamilyMoney()) if curPlayer.GetFamilyLastWeekActiveValue() != refreshPack.GetLastWeekFamilyActiveValue(): curPlayer.SetFamilyLastWeekActiveValue(refreshPack.GetLastWeekFamilyActiveValue()) #---´¦ÀíÌØÊâÂß¼­, ½øÈëÍ˳ö¼Ò×å--- if lastFamilyID != 0 and curPlayer.GetFamilyID() == 0: #Íæ¼ÒÀ뿪¼Ò×å __OnLeaveFamily(curPlayer, tick) #¸Ä±äïÚ³µÉíÉϼǼµÄÖ÷ÈËÐÅÏ¢ PlayerTruck.ChangeTruckNoteInfo(curPlayer) elif lastFamilyID == 0 and curPlayer.GetFamilyID() != 0: #¸Õ½ø¼Ò×岢Ϊ×峤,´¥·¢½¨¼Ò×åʼþ if curPlayer.GetFamilyMemberLV() == IPY_GameWorld.fmlLeader: EventShell.EventResponse_OnCreateFamily(curPlayer) #½øÈë¼Ò×å´¥·¢Ê¼þ __OnEnterFamily(curPlayer, tick) #¸Ä±äïÚ³µÉíÉϼǼµÄÖ÷ÈËÐÅÏ¢ PlayerTruck.ChangeTruckNoteInfo(curPlayer) #---֪ͨ¿Í»§¶ËË¢ÐÂÊôÐÔ--- curPlayer.View_FamilyInfoRefresh() return ## ½øÈë¼Ò×å´¥·¢Ê¼þ # @param curPlayer µ±Ç°Íæ¼Ò # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def __OnEnterFamily(curPlayer, tick): EventShell.EventResponse_OnFamily(curPlayer) __OnFamilyLVBuffChange(curPlayer, tick) PlayerFamilyTech.Sync_PlayerFamilyTechLV(curPlayer) DelAddFamilyRecord(curPlayer) GameLogic_FamilyWar.DoCheckChampionFamilyTitle(curPlayer) PlayerFamilyRedPacket.CreatCacheRedPacktet(curPlayer) return ## Í˳ö¼Ò×å´¥·¢Ê¼þ # @param curPlayer µ±Ç°Íæ¼Ò # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def __OnLeaveFamily(curPlayer, tick): #---Çå¿Õ¼Ò×åÏà¹ØÐÅÏ¢--- curPlayer.SetPerExp(0) curPlayer.SetFamilyHornor(0) curPlayer.SetFamilyActiveValue(0) curPlayer.SetLastWeekFamilyActiveValue(0) curPlayer.SetFamilyLV(0) #´¥·¢Íæ¼ÒÀ뿪¼Ò×åµÄÈÎÎñ EventShell.EventResponse_OnLeaveFamily(curPlayer) #ÉèÖÃÁì½±ÏÞÖÆ __SetForbidFamilyAward(curPlayer) FBLogic.OnLeaveFamily(curPlayer, tick) __OnFamilyLVBuffChange(curPlayer, tick) #Çå¿Õ²Ö¿â»ý·Ö PlayerControl.SetPlayerCurrency(curPlayer, ShareDefine.TYPE_Price_FamilyStoreScore, 0) GameLogic_FamilyWar.DoCheckChampionFamilyTitle(curPlayer) return ## ¼Ò×åµÈ¼¶¼Ó³Öbuff±ä¸ü´¦Àí(½ø¡¢Í˼Ò×åʱ ¼° ¼Ò×åµÈ¼¶±ä¸üʱ) def __OnFamilyLVBuffChange(curPlayer, tick): return # ¿ç·þ·þÎñÆ÷²»´¦Àí£¬·ÀÖ¹µÇ¼¿ç·þ·þÎñÆ÷ºóÎÞÕ½Ã˵¼ÖÂÕ½Á¦Ï½µ if GameWorld.IsCrossServer(): return familyLVBuffSkillTypeID = ReadChConfig.GetEvalChConfig("FamilyLVBuff") if not familyLVBuffSkillTypeID: return # ÏÈɾºó¼Ó playerSkillManager = curPlayer.GetSkillManager() BuffSkill.DelBuffBySkillID(curPlayer, familyLVBuffSkillTypeID, tick) playerSkillManager.DeleteSkillBySkillTypeID(familyLVBuffSkillTypeID) familyLV = curPlayer.GetFamilyLV() GameWorld.DebugLog("__OnFamilyLVBuffChange familyLV=%s,familyLVBuffSkillTypeID=%s" % (familyLV, familyLVBuffSkillTypeID)) if familyLV > 0: curSkill = GameWorld.GetGameData().FindSkillByType(familyLVBuffSkillTypeID , familyLV) if not curSkill: return skillID = curSkill.GetSkillID() playerSkillManager.LVUPSkillByID(skillID) SkillCommon.AddBuffBySkillType(curPlayer, familyLVBuffSkillTypeID, tick, familyLV) curControl = PlayerControl.PlayerControl(curPlayer) #curControl.CalcPassiveBuffAttr() curControl.RefreshPlayerAttrByBuff() return def GetPlayerChangeFamilyPastHour(curPlayer): ## »ñÈ¡Íæ¼Ò¼Ò×å±ä¸üÒѾ­¾­¹ýÁ˶೤ʱ¼ä curTime = int(time.time()) changeTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyIDChangeTime) return (curTime - changeTime) / 3600 # #////////////////////////////////////////////////////////////// #//08 04 ÉêÇë¼Ò×åÕ½#tagMRequestFamilyWar #tagMRequestFamilyWar * GettagMRequestFamilyWar(); # #class IPY_MRequestFamilyWar #{ #public: # # int GetFamilyID(); # # char * GetFamilyName(); # # int GetVSFamilyID(); # # char * GetVSFamilyName(); #}; ## 08 04 ÉêÇë¼Ò×åÕ½# # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def GameServer_RequestFamilyWar(index, tick): #=============================================================================== # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # pack = IPY_GameWorld.IPY_MRequestFamilyWar() # familyID = pack.GetFamilyID() # familyName = pack.GetFamilyName() # vsFamilyID = pack.GetVSFamilyID() # vsFamilyName = pack.GetVSFamilyName() # FBLogic.OnRequestFamilyWar(curPlayer, familyID, familyName, vsFamilyID, vsFamilyName, tick) #=============================================================================== GameWorld.ErrLog('GameServer_RequestFamilyWar, ´Ë½Ó¿Ú·ÏÆú') return #--------------------------------------------------------------------- ##Íæ¼Ò½ðǮת»»Îª¼Ò×å½ðÇ® # @param playerMoney Íæ¼Ò½ðÇ® # @return ¼Ò×å½ðÇ® # @remarks Íæ¼Ò½ðǮת»»Îª¼Ò×å½ðÇ® def GetPlayerMoney_Change_FamilyMoney(playerMoney): return int(playerMoney * ShareDefine.Def_PlayerMoney_Change_FamilyMoney_Rate) #--------------------------------------------------------------------- ##Íæ¼Ò»îÔ¾¶Èת»»Îª¼Ò×å»îÔ¾¶È # @param activeValue Íæ¼Ò»îÔ¾¶È # @return ¼Ò×å»îÔ¾¶È # @remarks Íæ¼Ò»îÔ¾¶Èת»»Îª¼Ò×å»îÔ¾¶È def GetPlayerActiveValue_Change_ActiveValue(activeValue): return activeValue #--------------------------------------------------------------------- ##ÀÛ¼ÓÍæ¼ÒµÄ¼Ò×å»îÔ¾¶È # @param curPlayer Íæ¼ÒʵÀý # @param addValue Ìí¼ÓµÄÊýÖµ # @param sendPackGameServer ÊÇ·ñ֪ͨGameServerÀÛ¼Ó¼Ò×å»îÔ¾¶È # @param reason À´Ô´, Ô­Òò # @return None # @remarks ÀÛ¼ÓÍæ¼ÒµÄ¼Ò×å»îÔ¾¶È def AddPlayerFamilyActiveValue(curPlayer, addValue, sendPackGameServer = False, reason = 0, isSysMsg=False): if addValue <= 0: #GameWorld.ErrLog("AddPlayerFamilyActiveValue Err = %s"%(addValue)) return curActiveValue = curPlayer.GetFamilyActiveValue() totalActiveValue = curPlayer.GetLastWeekFamilyActiveValue() #---ÀÛ¼ÓÍæ¼Ò¼Ò×å»îÔ¾¶È--- if curActiveValue < ChConfig.Def_UpperLimit_DWord: #ÀۼƻîÔ¾¶È curPlayer.SetFamilyActiveValue(min(curActiveValue + addValue, ChConfig.Def_UpperLimit_DWord)) curPlayer.SetLastWeekFamilyActiveValue(min(totalActiveValue + addValue, ChConfig.Def_UpperLimit_DWord)) #Ôö¼Ó¹±Ï×¶È PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_Family_Contribution, addValue, isSysHint=isSysMsg) #Á÷Ïò¼Ç¼: DataRecordPack.DR_AddPlayerFamilyActiveValue(curPlayer, addValue, curPlayer.GetFamilyActiveValue(), reason) #---֪ͨÊÀ½ç·þÎñÆ÷ÀÛ¼Ó¼Ò×å»îÔ¾¶È--- #@warning: µ¶½£Ð¦ÏîÄ¿, Íæ¼Ò¼Ò×å»îÔ¾¶ÈÀÛ¼ÓͬʱÀÛ¼Ó¼Ò×å»îÔ¾¶È # Èç¹ûÕâ±ßûÓмÓÉÏÈ¥ÔÚÍâÃæÒª´¦ÀíÒ»´ÎÀÛ¼Ó¼Ò×å»îÔ¾¶È if not sendPackGameServer: return True #µ¶½£Ð¦ÒªÇó, Íæ¼Ò»îÔ¾¶ÈÀÛ¼ÓµÄͬʱÀÛ¼Ó¼Ò×å»îÔ¾¶È 1»îÔ¾=1×ʽð SendPack_GameServer_AddFamilyDetailEx(curPlayer, addValue, addValue, resion=reason) return True #--------------------------------------------------------------------- ##֪ͨÊÀ½ç·þÎñÆ÷ÀÛ¼Ó¼Ò×åÊôÐÔ # @param curPlayer Íæ¼ÒʵÀý # @param addFamilyHornor Ìí¼Ó¼Ò×åÊÞÁ¸ # @param addFamilyMoney Ìí¼Ó¼Ò×å×ʽð # @param addFamilyActiveValue Ôö¼Ó¼Ò×å»îÔ¾¶È # @return ·µ»ØÖµÎÞÒâÒå # @remarks ֪ͨÊÀ½ç·þÎñÆ÷ÀÛ¼Ó¼Ò×åÊôÐÔ def SendPack_GameServer_AddFamilyDetail(curPlayer, addFamilyHornor = 0, addFamilyMoney = 0, addFamilyActiveValue = 0, resion=0): # //Ôö¼Ó¼Ò×åÈÙÓþ # int GetAddFamilyHornor(); # //Ôö¼Ó¼Ò×å×ʽð # int GetAddFamilyMoney(); # //Ôö¼Ó¼Ò×å»îÔ¾¶È # int GetFamilyActiveValue(); # GameWorld.Log('addFamilyHornor = %s, addFamilyMoney = %s, addFamilyActiveValue = %s'% # (addFamilyHornor, addFamilyMoney, addFamilyActiveValue)) #curPlayer.GameServer_AddFamilyDetail(addFamilyHornor, addFamilyMoney, addFamilyActiveValue) #¸ÄΪPY°ü if not curPlayer.GetFamilyID(): return sendPack = ChMapToGamePyPack.tagMGAddFamilyDetail() sendPack.PlayerID = curPlayer.GetPlayerID() sendPack.AddFamilyHornor = addFamilyHornor sendPack.AddFamilyMoney = addFamilyMoney sendPack.FamilyActiveValue = addFamilyActiveValue sendPack.AddResion = resion NetPackCommon.SendPyPackToGameServer(sendPack) GameWorld.DebugLog("AddFamilyDetail addFamilyHornor=%s,addFamilyMoney=%s,addFamilyActiveValue=%s, resion=%s" % (addFamilyHornor, addFamilyMoney, addFamilyActiveValue, resion), curPlayer.GetPlayerID()) return #--------------------------------------------------------------------- ##֪ͨÊÀ½ç·þÎñÆ÷ÀÛ¼Ó¼Ò×åÊôÐÔ # @param curPlayer Íæ¼ÒʵÀý # @param addFamilyActiveValue Ôö¼ÓÍæ¼Ò¼Ò×å»îÔ¾¶È # @param addFamilyHornor Ìí¼Ó¼Ò×åÈÙÓþ # @param addFamilyMoney Ìí¼Ó¼Ò×å×ʽð # @return ·µ»ØÖµÎÞÒâÒå # @remarks ֪ͨÊÀ½ç·þÎñÆ÷ÀÛ¼Ó¼Ò×åÊôÐÔ def SendPack_GameServer_AddFamilyDetailEx(curPlayer, addPlayerActiveValue, addFamilyMoney = 0, addFamilyHornor = 0, resion=0): #µ¶½£Ð¦Ôö¼ÓÍæ¼Ò»îÔ¾¶ÈĬÈÏÐÂÔö¼Ò×å»îÔ¾¶È addFamilyActiveValue = GetPlayerActiveValue_Change_ActiveValue(addPlayerActiveValue) SendPack_GameServer_AddFamilyDetail(curPlayer, addFamilyHornor, addFamilyMoney, addFamilyActiveValue, resion) return #--------------------------------------------------------------------- ##֪ͨGameServer, ¿Í»§¶Ë¿ªÊ¼´´½¨¼Ò×å # @param curPlayer Íæ¼ÒʵÀý # @return ·µ»ØÖµÎÞÒâÒå # @remarks ֪ͨGameServer, ¿Í»§¶Ë¿ªÊ¼´´½¨¼Ò×å def SendPack_GameServer_InputFamilyName(curPlayer): #֪ͨGameServerÉèÖò鿴״̬, ·ÀÍâ¹Ò curPlayer.GameServer_SetPlayerViewFamilyState(ShareDefine.TViewFamilyType_CreateFamily) #֪ͨ¿Í»§¶Ë´ò¿ªÊäÈë¼Ò×åÃû½çÃæ curPlayer.Frm_InputFamilyName() return ##֪ͨGameServer, ¿Í»§¶Ë¿ªÊ¼ä¯ÀÀ¼Ò×åÐÅÏ¢ # @param curPlayer Íæ¼ÒʵÀý # @return ·µ»ØÖµÎÞÒâÒå # @remarks ֪ͨGameServer, ¿Í»§¶Ë¿ªÊ¼ä¯ÀÀ¼Ò×åÐÅÏ¢ def SendPack_GameServer_ViewAllFamily(curPlayer): #֪ͨGameServerÉèÖò鿴״̬, ·ÀÍâ¹Ò curPlayer.GameServer_SetPlayerViewFamilyState(ShareDefine.TViewFamilyType_FamilyWar) #֪ͨGameServer¸ø¿Í»§¶Ë¼Ò×åÐÅÏ¢ curPlayer.GameServer_ViewAllFamily() return ##֪ͨGameServer, Çå³ý¿Í»§¶Ëä¯ÀÀ¼Ò×å״̬ # @param curPlayer Íæ¼ÒʵÀý # @return ·µ»ØÖµÎÞÒâÒå # @remarks ֪ͨGameServer, ֪ͨGameServer, Çå³ý¿Í»§¶Ëä¯ÀÀ¼Ò×å״̬ def SendPack_GameServer_ClearViewFamilyState(curPlayer): #MapServer¸æËßGameServer×Ô¼ºÊÇ·ñÔÚ´´½¨¼Ò×å״̬ #ÒòΪ¼Ò×å·â°üÊÇÔÚGameServer´¦ÀíµÄ, ·ÀÖ¹±»Æ­ if curPlayer.GetViewFamilyState() in [ShareDefine.TViewFamilyType_None, ShareDefine.TViewFamilyType_CreateFamily]: #TViewFamilyType_CreateFamily״̬ÔÚGameServer DoCreateFamily½áÊøºó½â³ý return curPlayer.GameServer_SetPlayerViewFamilyState(ShareDefine.TViewFamilyType_None) return def __SetForbidFamilyAward(curPlayer): ''' ÉèÖüÒ×åÏà¹Ø»î¶¯Áì½±ÏÞÖÆ Èç¹ûÍ˳öʱ½ñÈÕÒÑ¿ªÊ¼¹ý¶ÔÓ¦»î¶¯£¬ÔòÉèÖÃÁì½±ÏÞÖÆ ''' playerID = curPlayer.GetPlayerID() openState = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_FamilyActivityDayState) forbidState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ForbidFamilyAward) GameWorld.DebugLog("Í˳ö¼Ò×å´¦Àí¼Ò×å»î¶¯½±ÀøÁìÈ¡ÏÞÖÆ! openState=%s,forbidState=%s" % (openState, forbidState), playerID) updForbidState = forbidState for activityType in ShareDefine.Def_FamActivityList: if not openState&pow(2, activityType): GameWorld.DebugLog(" ¸Ã¼Ò×å»î¶¯½ñÈÕ먦Æô¹ý£¡ ²»ÉèÖÃÏÞÖÆÁì½±! activityType=%s" % activityType, playerID) continue updForbidState = updForbidState|pow(2, activityType) GameWorld.DebugLog(" ¼Ò×å»î¶¯Áì½±ÏÞÖÆ activityType=%s,updForbidState=%s" % (activityType, updForbidState), playerID) if updForbidState != forbidState: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ForbidFamilyAward, updForbidState) GameWorld.DebugLog(" ¸üмÒ×å»î¶¯Áì½±ÏÞÖÆ: forbidState=%s,updForbidState=%s" % (forbidState, updForbidState), playerID) return ## ÉèÖÃÍæ¼ÒÊÇ·ñ¿ÉÒԲμӼÒ×å»î¶¯ # @param curPlayer Íæ¼ÒʵÀý # @param isForbid ÊÇ·ñÏÞÖÆ # @return ·µ»ØÖµÎÞÒâÒå def SetForbidFamilyAction(curPlayer, isForbid): #=============================================================================================== # if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ForbidFamilyAction) != isForbid: # PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ForbidFamilyAction, isForbid) # # # Í¨ÖªÍæ¼ÒÊÇ·ñ¿ÉÒԲμӼÒ×å»î¶¯ # SendClientForbidFamilyAction(curPlayer) #=============================================================================================== return ## Í¨ÖªÍæ¼ÒÊÇ·ñ¿ÉÒԲμӼÒ×å»î¶¯ # @param curPlayer Íæ¼ÒʵÀý # @return ·µ»ØÖµÎÞÒâÒå def SendClientForbidFamilyAction(curPlayer): # isForbid = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ForbidFamilyAction) # # outCardsCDTime = ChPyNetSendPack.tagPyFamilyActionForbid() # outCardsCDTime.Clear() # # outCardsCDTime.IsForbid = isForbid # NetPackCommon.SendFakePack(curPlayer, outCardsCDTime) return #=============================================================================== # //A6 01 ÏòÍæ¼ÒÉêÇë¼ÓÈë¼Ò×å #tagCGRequestJoinFamilyByPlayer # # struct tagCGRequestJoinFamilyByPlayer # # { # tagHead Head; # DWORD AddPlayerID; //ÉêÇë¼ÓÈëµÄÍæ¼ÒID # }; #=============================================================================== ## ͨ¹ýÉêÇë¼ÓÈë¼Ò×å # @param index: Íæ¼ÒË÷Òý # @param clientData: ·â°ü½á¹¹Ìå # @param tick: ʱ¼ä´Á # @return: None def RequestAddFamilyByID(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) addPlayerID = clientData.AddPlayerID #ÉêÇë½øÈëµÄ¼Ò×åID addPlayer = GameWorld.GetPlayerManager().FindPlayerByID(addPlayerID) #¶Ô·½ÏÂÏß if not addPlayer: return addFamilyID = addPlayer.GetFamilyID() #¶Ô·½Ã»ÓмÒ×å if addFamilyID <= 0: return #ÉêÇë¼ÓÈë AddFamily(curPlayer, addFamilyID) #֪ͨµ±Ç°ÉêÇë¼ÓÈëµÄÄÄЩ¼Ò×å #Sync_RequestAddFamilyInfo(curPlayer) return #=============================================================================== # //A6 02 ÉêÇë¼ÓÈë¼Ò×å#tagCGRequesJoinFamily # # struct tagCGRequesJoinFamily # # { # tagHead Head; # BYTE Type; //ÉêÇëÀàÐÍ # DWORD AddFamilyID; //ÉêÇë¼ÓÈëµÄ¼Ò×å # }; #=============================================================================== ## ÉêÇë¼ÓÈë¼Ò×å # @param index: Íæ¼ÒË÷Òý # @param clientData: ·â°ü½á¹¹Ìå # @param tick: ʱ¼ä´Á # @return: None def RequestAddFamily(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) addFamilyID = clientData.AddFamilyID # ÉêÇë½øÈëµÄ¼Ò×åID requestType = clientData.Type # ÉêÇëÀàÐÍ(ÉêÇë/³·Ïú) if requestType == 0: #ÉêÇë¼ÓÈë AddFamily(curPlayer, addFamilyID) elif requestType == 1: DelAddFamilyRecord() #֪ͨµ±Ç°ÉêÇë¼ÓÈëµÄÄÄЩ¼Ò×å Sync_RequestAddFamilyInfo(curPlayer) return def DelAddFamilyRecord(curPlayer): for index in range(0, ChConfig.Def_Player_RequestAddFamilyMaxCnt): #ÉêÇë¼ÓÈëµÄ¼Ò×åID requestAddFamilyID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyID%index) if not requestAddFamilyID: continue #±¾°æ±¾ÒòΪ¿Í»§¶ËûÓе¥¸öÈ¡ÏûÉêÇëµÄ²Ù×÷£¬´Ë´¦·¢Ò»´Î°üÒ»´ÎÐÔÈ«²¿È¡Ïû # if addFamilyID != requestAddFamilyID: # continue #ÉêÇëÊýÁ¿-1 requestAddFamilyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyCnt) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RequestAddFamilyCnt, requestAddFamilyCnt - 1) #Çå³ý³·ÏúÉêÇëµÄ¼Ò×åID¼Ç¼ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RequestAddFamilyID%index, 0) #ÏòGameServer·¢ËÍÇëÇóɾ³ý¸ÃÍæ¼ÒµÄÉêÇë¼Ò×åÐÅÏ¢Çé¿ö sendMsg = str(requestAddFamilyID) curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_DelFamilyAction, ShareDefine.Def_ActionType_FamilyAdd, '', sendMsg, len(sendMsg)) Sync_RequestAddFamilyInfo(curPlayer) return ## ֪ͨµ±Ç°ÉêÇë¼ÓÈëµÄÄÄЩ¼Ò×å # @param curPlayer:Íæ¼ÒʵÀý # @return: None def Sync_RequestAddFamilyInfo(curPlayer): requestAddFamilyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyCnt) packList = [] for index in range(0, ChConfig.Def_Player_RequestAddFamilyMaxCnt): familyID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyID%index) if familyID == 0: continue requestAddFamilyInfo = ChPyNetSendPack.tagRequestJoinFamily() requestAddFamilyInfo.RequestFamilyID = familyID packList.append(requestAddFamilyInfo) requestAddFamily = ChPyNetSendPack.tagMCNotifyRequestJoinFamilyInfo() requestAddFamily.Clear() requestAddFamily.RequestCount = len(packList) requestAddFamily.RequestAddFamilyInfo = packList NetPackCommon.SendFakePack(curPlayer, requestAddFamily) return ## ÉêÇë¼ÓÈë°ï»á #@param curPlayer ¼Ò×åʵÀý #@param familyID ¼Ò×åID #@return ·µ»ØÖµÎÞÒâÒå def AddFamily(curPlayer, familyID): requestAddFamilyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyCnt) if requestAddFamilyCnt >= ChConfig.Def_Player_RequestAddFamilyMaxCnt: # jiazu_pan_21675 ¸ÄΪ jiazu_lhs_31379 ×î¶àͬʱÏò%s¸ö°ï»á·¢³öÉêÇë PlayerControl.NotifyCode(curPlayer, "jiazu_lhs_31379", [ChConfig.Def_Player_RequestAddFamilyMaxCnt]) return #ÊÇ·ñÒѾ­ÉêÇëÁË for index in range(0, ChConfig.Def_Player_RequestAddFamilyMaxCnt): if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyID%index) == familyID: GameWorld.DebugLog('ÒѾ­ÔÚÉêÇëÁбíÖÐ') #ÒѾ­ÔÚÉêÇëÁбíÖÐ return #ÇëÇó¼Ç¼ÉêÇë½øÈë¼Ò×åÐÅÏ¢ sendMsg = str([familyID, curPlayer.GetFightPower()]) curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_AddFamilyAction, ShareDefine.Def_ActionType_FamilyAdd, '', sendMsg, len(sendMsg)) #µÈGameServer·´À¡½á¹ûÔÙ´¦Àí return #¼Ç¼¸öÈËÉêÇë¼ÓÈëµÄ¼Ò×åID for index in range(0, ChConfig.Def_Player_RequestAddFamilyMaxCnt): if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyID%index) == 0: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RequestAddFamilyID%index, familyID) break #¼Ç¼¸öÈËÉêÇë¼ÓÈë¼Ò×åµÄ¸öÊý PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RequestAddFamilyCnt, requestAddFamilyCnt + 1) return ## Õ½ÃËÍæ¼ÒOnDay # @param curPlayer # @return None def FamilyPlayerOnDay(curPlayer): if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Family): return #ÿÈÕ¸£Àû½±Àø PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyDayAward, 0) Sync_FamilyDayRewardState(curPlayer) return ## Õ½ÃËÍæ¼ÒOnLogin # @param curPlayer # @return None def FamilyPlayerOnLogin(curPlayer, tick): if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Family): return PlayerFamilyTech.Sync_PlayerFamilyTechLV(curPlayer) SyncFamilyActivityInfo(curPlayer) Sync_FamilyDayRewardState(curPlayer) return ## ֪ͨGameServerÔö¼Ó¼Ò×åÏà¹ØÐÅÏ¢Öµ # @param curPlayer Íæ¼ÒʵÀý # @param infoDict ÐÅÏ¢×Öµä # @return def Send_GameServer_PyAddFamilyInfoValue(curPlayer, infoDict={}): if not isinstance(infoDict, dict) or not infoDict: GameWorld.DebugLog("Send_GameServer_PyAddFamilyInfoValue infoDict=%s err!" % str(infoDict)) return sendMsg = '%s'%(infoDict) #GameWorld.DebugLog("Send_GameServer_PyAddFamilyInfoValue sendMsg=%s" % sendMsg) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'PyAddFamilyInfoValue', sendMsg, len(sendMsg)) return #// A6 05 ¼Ò×å¾èÏ×ÊÞÁ¸ #tagCMFamilyDonate # #struct tagCMFamilyDonate #{ # tagHead Head; #}; def OnFamilyDonateItem(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if not curPlayer: return playerFamilyID = curPlayer.GetFamilyID() if playerFamilyID <= 0: return totalAddActiveValue = 0 delItemList = [] totalCnt = 0 curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) for i in range(curPack.GetCount()): item = curPack.GetAt(i) if item == None or item.IsEmpty(): continue if item.GetType() != ChConfig.Def_ItemType_FamilyBossFood: continue addActiveValue = item.GetEffectByIndex(0).GetEffectValue(0) # if not addActiveValue: # continue itemCnt = item.GetCount() totalAddActiveValue += addActiveValue * itemCnt delItemList.append([item, itemCnt]) totalCnt += itemCnt if not totalCnt: GameWorld.DebugLog('±³°üÀïûÓпɾèÏ×µÄÎïÆ·') return for eatItem, delCnt in delItemList: ItemCommon.DelItem(curPlayer, eatItem, delCnt, False) #ÀÛ¼Ó¸öÈË»îÔ¾¶È/¹±Ï×¶È if totalAddActiveValue: AddPlayerFamilyActiveValue(curPlayer, totalAddActiveValue, True, ShareDefine.Def_AddFAVReason_FamilyDonateItem) AddFamilyBossFood(curPlayer, totalCnt, ShareDefine.Def_AddFAVReason_FamilyDonateItem) GameWorld.DebugLog(' ¾èÏ×ÏÉÃËÊÞÁ¸ totalCnt=%s,totalAddActiveValue=%s'%(totalCnt,totalAddActiveValue)) return def DoAddFamilyBossFoodEx(curPlayer, itemID, itemCnt, reason=0): itemData = GameWorld.GetGameData().GetItemByTypeID(itemID) if not itemData: return if itemData.GetType() != ChConfig.Def_ItemType_FamilyBossFood: return addActiveValue = itemData.GetEffectByIndex(0).GetEffectValue(0) if not addActiveValue: return totalAddActiveValue = addActiveValue * itemCnt GameWorld.DebugLog('×Ô¶¯¾èÏ×ÏÉÃËÊÞÁ¸ totalCnt=%s,totalAddActiveValue=%s,reason=%s' % (itemCnt, totalAddActiveValue, reason)) #ÀÛ¼Ó¸öÈË»îÔ¾¶È/¹±Ï×¶È AddPlayerFamilyActiveValue(curPlayer, totalAddActiveValue, True, reason) AddFamilyBossFood(curPlayer, itemCnt, reason) return True ##Ôö¼ÓÊÞÁ¸ # @param curPlayer Íæ¼ÒʵÀý # @param addExp Ôö¼ÓµÄ¾­Ñéµã # @return ·µ»ØÖµÎÞÒâÒå def AddFamilyBossFood(curPlayer, addExp, reason): #ûÓмÒ×å²»´¦Àí familyID = curPlayer.GetFamilyID() if familyID == 0: return if addExp <= 0: return SendPack_GameServer_AddFamilyDetailEx(curPlayer, 0, 0, addExp, reason) return #--------------------------------------------------------------------- ## Ìí¼Ó¼Ò×åʼþ¼Ç¼ def AddFamilyEventNote(curPlayer, eventType, valueList): ##ͬ²½¼Ç¼µ½GameServer, eventTypeĬÈÏΪvalue1 sendMsg = str([eventType] + valueList) curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_AddFamilyAction, ShareDefine.Def_ActionType_FamilyEvent, '', sendMsg, len(sendMsg)) GameWorld.DebugLog("AddFamilyEventNote sendMsg=%s" % sendMsg) return ## --------------------------------- ÏÉÃË»îÔ¾ ----------------------------------- def OnWeekEx(curPlayer): #ÖØÖà PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyActivityAwardRecord, 0) for actionid in ShareDefine.FamilyActiveIDList: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyActivityFinishCnt%actionid, 0) SyncFamilyActivityInfo(curPlayer) return ## ÁìÈ¡ÏÉÃË»îÔ¾¶È½±Àø # @param curPlayer # @param awardIndex # @return None def GetFamilyActivityAward(curPlayer, awardIndex): return familyActiveList = IpyGameDataPY.GetFuncEvalCfg('FamilyActive') familyActiveAwardList = IpyGameDataPY.GetFuncEvalCfg('FamilyActive', 2) if awardIndex < 0 or awardIndex >= len(familyActiveList): GameWorld.ErrLog("»îÔ¾¶È½±ÀøË÷Òý²»ºÏ·¨,index=%s,Len=%s" % (awardIndex, len(familyActiveList))) return # ÅжÏÊÇ·ñÒÑÁìÈ¡ getAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyActivityAwardRecord, 0) if getAwardRecord & pow(2, awardIndex): GameWorld.Log("ÒѾ­ÁìÈ¡¹ý¸Ã»îÔ¾¶È½±Àø,index=%s" % (awardIndex)) return needActivity = familyActiveList[awardIndex] totalActivity = __GetTotalFamilyActivity(curPlayer)#×Ü»îÔ¾¶È # ÅжϻîÔ¾¶È if totalActivity < needActivity: GameWorld.Log("Áì½±»îÔ¾¶È²»×ã,index=%s,needActivity=%s,totalActivity=%s" % (awardIndex, needActivity, totalActivity)) return activityValue = familyActiveAwardList[awardIndex] PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_FamilyActivity, activityValue) # ¸üÐÂÒÑÁìÈ¡³É¹¦±ê¼Ç updAwardRecord = getAwardRecord | (1 << awardIndex) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyActivityAwardRecord, updAwardRecord) SyncFamilyActivityInfo(curPlayer) GameWorld.DebugLog("ÁìÈ¡ÏÉÃË»îÔ¾¶È½±ÀøOK£¡ index=%s,needActivity=%s,totalActivity=%s,awardRecord=%s" % (awardIndex, needActivity, totalActivity, updAwardRecord)) return def AddFamilyActivity(curPlayer, actionid, addCnt=1): return ipyData = IpyGameDataPY.GetIpyGameData('FamilyActivity', actionid) if not ipyData: return if not GameFuncComm.GetFuncCanUse(curPlayer, ipyData.GetUnLockFuncID()): return finishCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyActivityFinishCnt%actionid, 0) maxCnt = ipyData.GetTotalActivityTime() if finishCnt >= maxCnt: return newCnt = min(maxCnt, finishCnt+addCnt) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyActivityFinishCnt%actionid, newCnt) SyncFamilyActivityInfo(curPlayer, actionid) GameWorld.DebugLog(' ÏÉÃË»îÔ¾Íê³É´ÎÊý actionid=%s,newCnt=%s'%(actionid, newCnt)) return def __GetTotalFamilyActivity(curPlayer): ##»ñÈ¡×ÜÏÉÃË»îÔ¾¶È totalPoint = 0 ipyDataMgr = IpyGameDataPY.IPY_Data() for i in xrange(ipyDataMgr.GetFamilyActivityCount()): ipyData = ipyDataMgr.GetFamilyActivityByIndex(i) actionid = ipyData.GetID() curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyActivityFinishCnt%actionid, 0) totalPoint += curTimes/ipyData.GetSingleTimes()*ipyData.GetSingleActiveValue() return totalPoint def SyncFamilyActivityInfo(curPlayer, syncActionid=-1): return #֪ͨ»îÔ¾ÁìÈ¡Çé¿ö syncActionIDList = ShareDefine.FamilyActiveIDList if syncActionid==-1 else [syncActionid] sendPack = ChPyNetSendPack.tagMCFamilyActivityInfo() sendPack.Clear() sendPack.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyActivityAwardRecord, 0) sendPack.InfoList = [] for actionid in syncActionIDList: activityInfo = ChPyNetSendPack.tagMCFamilyActionCnt() activityInfo.ActionID = actionid activityInfo.FinishCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyActivityFinishCnt%actionid, 0) sendPack.InfoList.append(activityInfo) sendPack.Count = len(sendPack.InfoList) NetPackCommon.SendFakePack(curPlayer, sendPack) return #=================ÏÉÃ˸ÄÃû====================== #// A6 11 ¼Ò×å¸ÄÃû #tagCMRenameFamily # #struct tagCMRenameFamily #{ # tagHead Head; # BYTE NewNameLen; # char NewName[NewNameLen]; # BYTE ItemIndex; //¸ÄÃûÎïÆ·ÔÚ±³°üÖеÄλÖà #}; def UpdateFamilyName(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if GameWorld.IsCrossServer(): #itemuse_lzxkoy_0:²»¿ÉÔÚ¿ç·þ»·¾³ÏÂʹÓøÄÃû¹¦ÄÜ¡£ PlayerControl.NotifyCode(curPlayer, "itemuse_lzxkoy_0") return if not curPlayer.GetFamilyID(): return if curPlayer.GetDictByKey(ChConfig.Def_Player_Dict_UpdateFamilyName): #ÕýÔÚ¸ÄÃûÖÐ GameWorld.Log("ÏÉÃËÒѾ­ÔÚ¸ÄÃûÖÐ...", curPlayer.GetID()) return #ÐÂÃû×Ö newName = clientData.NewName itemIndex = clientData.ItemIndex itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) curItem = itemPack.GetAt(itemIndex) if not ItemCommon.CheckItemCanUse(curItem): return if curItem.GetType() != ChConfig.Def_ItemType_ChangeFamilyName: return #¸ÄÃûÎïÆ·ÔÚ±³°üµÄλÖà PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_UpdateFamilyNameItemIndex, itemIndex) #ÉèÖÃÕýÔÚ¸ÄÃûÖÐ... curPlayer.SetDict(ChConfig.Def_Player_Dict_UpdateFamilyName, 1) #֪ͨGameServerÕýʽ¸ÄÃû newNameMsg = str(newName) GameWorld.Log("UpdateFamilyName ֪ͨGameServerÕýʽ¸ÄÃûΪ:%s"%newNameMsg, curPlayer.GetID()) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'UpdateFamilyName', newNameMsg, len(newNameMsg)) return ## ¿Û³ý¸ÄÃûÏûºÄ # @param curPlayer: Íæ¼ÒʵÀý # @return: None def PayUpdateFamilyNameCost(curPlayer): itemIndex = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_UpdateFamilyNameItemIndex) #¿Û³ýÎïÆ· itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) curItem = itemPack.GetAt(itemIndex) if curItem: ItemCommon.DelItem(curPlayer, curItem, 1, True, 'UpdateFamilyName') PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_UpdateFamilyNameItemIndex, 0) return def GetFamilyDayAward(curPlayer): ##ÁìÈ¡ÏÉÃËÿÈÕ½±Àø 2СʱÍÑ»ú¹Òʱ¼ä if not curPlayer.GetFamilyID(): return hasGot = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyDayAward) if hasGot: GameWorld.DebugLog('ÁìÈ¡ÏÉÃËÿÈÕ½±Àø µ±ÈÕÒÑÁìÈ¡£¡') return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyDayAward, 1) addTime = IpyGameDataPY.GetFuncCfg('FamilyDayAward') PlayerTJG.AddTJGTime(curPlayer, addTime) #֪ͨ Sync_FamilyDayRewardState(curPlayer) PlayerControl.NotifyCode(curPlayer, 'OfflinePlugSuccess', [addTime/60/60]) return def Sync_FamilyDayRewardState(curPlayer): clientPack = ChPyNetSendPack.tagMCFamilyDayAward() clientPack.GetState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyDayAward) NetPackCommon.SendFakePack(curPlayer, clientPack) return