| | |
| | | return
|
| | | curMember.SetOffTime(int(time.time()))
|
| | | #XW_JZ_LeaguerLeaveline <n color="0,190,255">{%S1%}</n><n color="255,255,0">下线了!</n> 25 - -
|
| | | NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaguerLeaveline", [curPlayer.GetPlayerName()])
|
| | | #NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaguerLeaveline", [curPlayer.GetPlayerName()])
|
| | | Broadcast_FamilyChange(familyID, FamilyChangeType_MemLogout, excludeIDList=[playerID])
|
| | | return
|
| | |
|
| | |
| | | NetPackCommon.SendFakePack(curPlayer, GetPack_FamilyReqJoinInfo(familyID))
|
| | |
|
| | | #XW_JZ_LeaguerOnline <n color="0,190,255">{%S1%}</n><n color="255,255,0">上线了!</n> 25 - -
|
| | | NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaguerOnline", [curPlayer.GetName()], [playerID])
|
| | | #NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaguerOnline", [curPlayer.GetName()], [playerID])
|
| | | Broadcast_FamilyChange(familyID, FamilyChangeType_MemLogin, excludeIDList=[playerID])
|
| | |
|
| | | # 盟主上线处理
|
| | |
| | |
|
| | | if DirtyList.IsWordForbidden(familyName):
|
| | | #XW_JZ_Family_NameNoLegality 对不起,家族名称中含有非法字符
|
| | | PlayerControl.NotifyCode(curPlayer, "XW_JZ_Family_NameNoLegality")
|
| | | PlayerControl.NotifyCode(curPlayer, "NameSensitive")
|
| | | return
|
| | |
|
| | | if len(familyName) <= 0 or len(familyName) > Def_CreatFamily_MaxStr:
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_980181", [Def_CreatFamily_MaxStr / 2, Def_CreatFamily_MaxStr])
|
| | | PlayerControl.NotifyCode(curPlayer, "NameLenLimit", [Def_CreatFamily_MaxStr / 3, Def_CreatFamily_MaxStr])
|
| | | return
|
| | |
|
| | | familyMgr = DBDataMgr.GetFamilyMgr()
|
| | | if familyMgr.FindFamilyByName(fullFamilyName):
|
| | | #XW_JZ_EstablishErr_Name <n color="255,255,0">对不起,您输入的家族名已存在,建立家族失败!</n> 25 - -
|
| | | PlayerControl.NotifyCode(curPlayer, "XW_JZ_EstablishErr_Name")
|
| | | PlayerControl.NotifyCode(curPlayer, "NameExists")
|
| | | return
|
| | |
|
| | | return fullFamilyName
|
| | |
| | | maxLen = IpyGameDataPY.GetFuncCfg("FamilyNameFormat", 2)
|
| | | if len(fullName) > maxLen:
|
| | | GameWorld.ErrLog("仙盟全名 familyName=%s,全名=%s len=%s > %s, check FamilyNameFormat.txt" % (familyName, fullName, len(fullName), maxLen))
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_980181", [maxLen / 2, maxLen])
|
| | | PlayerControl.NotifyCode(curPlayer, "NameLenLimit", [maxLen / 3, maxLen])
|
| | | return ""
|
| | |
|
| | | return fullName
|
| | |
| | | if broadcastFamilyChange:
|
| | | Broadcast_FamilyChange(familyID, FamilyChangeType_MemJoin, excludeIDList=[playerID])
|
| | | #通知所有家族成员, 这个人加入了家族
|
| | | NotifyAllFamilyMemberMsg(familyID, "XW_JZ_EnterFamily", [member.GetPlayerName()], excludeIDList=[playerID])
|
| | | #NotifyAllFamilyMemberMsg(familyID, "XW_JZ_EnterFamily", [member.GetPlayerName()], excludeIDList=[playerID])
|
| | | if jionPlayer:
|
| | | PlayerControl.NotifyCode(jionPlayer, 'XW_JZ_EnterFamilyInfo', [family.GetName()])
|
| | |
|
| | |
| | | setFunc(value)
|
| | | return True
|
| | |
|
| | | def MapServer_FamilyRefresh(curPlayer, refreshFamilyID):
|
| | | def MapServer_FamilyRefresh(curPlayer, refreshFamilyID, isVoluntarily=0):
|
| | | ''' 相当于GameServer调用 curPlayer.MapServer_FamilyRefresh()
|
| | | @param familyID: 玩家更新的familyID
|
| | | @param isVoluntarily: 是否自愿离开的,仅离开刷新时有效
|
| | | '''
|
| | |
|
| | | tick = GameWorld.GetGameWorld().GetTick()
|
| | |
| | |
|
| | | if lastFamilyID != 0 and curPlayer.GetFamilyID() == 0:
|
| | | #玩家离开家族
|
| | | __OnLeaveFamily(curPlayer, tick)
|
| | | __OnLeaveFamily(curPlayer, isVoluntarily, tick)
|
| | |
|
| | | elif lastFamilyID == 0 and curPlayer.GetFamilyID() != 0:
|
| | | #刚进家族并为族长,触发建家族事件
|
| | |
| | | Sync_RequestAddFamilyInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def __OnLeaveFamily(curPlayer, tick):
|
| | | def __OnLeaveFamily(curPlayer, isVoluntarily, tick):
|
| | | ## 退出家族触发事件
|
| | | #---清空家族相关信息---
|
| | | curPlayer.SetPerExp(0)
|
| | |
| | | curPlayer.SetLastWeekFamilyActiveValue(0)
|
| | | curPlayer.SetFamilyLV(0)
|
| | | PlayerControl.SetLeaveFamilyTimeEx(curPlayer, int(time.time()))
|
| | | |
| | | leaveCnt, kickedCnt, _ = PlayerControl.GetLeaveFamilyInfo(curPlayer)
|
| | | GameWorld.DebugLog("__OnLeaveFamily: isVoluntarily=%s,leaveCnt=%s,kickedCnt=%s" % (isVoluntarily, leaveCnt, kickedCnt))
|
| | | delMoneyType, delMoneyPer = IpyGameDataPY.GetFuncCfg("FamilyLeave", 3), 0
|
| | | if isVoluntarily:
|
| | | delMoneyPerList = IpyGameDataPY.GetFuncEvalCfg("FamilyLeave", 4)
|
| | | if delMoneyPerList:
|
| | | delMoneyPer = delMoneyPerList[leaveCnt] if len(delMoneyPerList) > leaveCnt else delMoneyPerList[-1]
|
| | | |
| | | leaveCnt += 1
|
| | | GameWorld.DebugLog(" 增加主动离开次数: leaveCnt=%s" % (leaveCnt))
|
| | | else:
|
| | | delMoneyPerList = IpyGameDataPY.GetFuncEvalCfg("FamilyLeave", 5)
|
| | | if delMoneyPerList:
|
| | | delMoneyPer = delMoneyPerList[kickedCnt] if len(delMoneyPerList) > kickedCnt else delMoneyPerList[-1]
|
| | | |
| | | kickedCnt += 1
|
| | | GameWorld.DebugLog(" 增加被踢离开次数: kickedCnt=%s" % (kickedCnt))
|
| | | PlayerControl.SetLeaveFamilyInfo(curPlayer, leaveCnt, kickedCnt, isVoluntarily)
|
| | | if delMoneyType and delMoneyPer:
|
| | | nowMoney = PlayerControl.GetMoney(curPlayer, delMoneyType)
|
| | | delMoney = int(nowMoney * delMoneyPer / 100.0)
|
| | | GameWorld.DebugLog(" 扣除货币: delMoneyType=%s,delMoneyPer=%s,nowMoney=%s,delMoney=%s" % (delMoneyType, delMoneyPer, nowMoney, delMoney)) |
| | | PlayerControl.PayMoney(curPlayer, delMoneyType, delMoney, "LeaveFamily")
|
| | | FBLogic.OnLeaveFamily(curPlayer, tick)
|
| | | return
|
| | |
|
| | |
| | |
|
| | | return
|
| | |
|
| | | def CheckInJoinCD(curPlayer):
|
| | | ## 检查是否加入仙盟CD中
|
| | | leaveFamilyTime = PlayerControl.GetLeaveFamilyTimeEx(curPlayer)
|
| | | if not leaveFamilyTime:
|
| | | return False
|
| | | |
| | | leaveCnt, kickedCnt, lastVoluntarily = PlayerControl.GetLeaveFamilyInfo(curPlayer)
|
| | | joinCDMinute = 0
|
| | | if lastVoluntarily:
|
| | | if leaveCnt <= 0:
|
| | | return False
|
| | | joinCDMinuteList = IpyGameDataPY.GetFuncEvalCfg("FamilyLeave", 1)
|
| | | if joinCDMinuteList:
|
| | | joinCDMinute = joinCDMinuteList[leaveCnt - 1] if len(joinCDMinuteList) >= leaveCnt else joinCDMinuteList[-1]
|
| | | else:
|
| | | if kickedCnt <= 0:
|
| | | return False
|
| | | joinCDMinuteList = IpyGameDataPY.GetFuncEvalCfg("FamilyLeave", 2)
|
| | | if joinCDMinuteList:
|
| | | joinCDMinute = joinCDMinuteList[kickedCnt - 1] if len(joinCDMinuteList) >= kickedCnt else joinCDMinuteList[-1]
|
| | | if joinCDMinute:
|
| | | cdTimes = joinCDMinute * 60
|
| | | passTimes = int(time.time()) - leaveFamilyTime
|
| | | if passTimes < cdTimes:
|
| | | GameWorld.DebugLog("加入仙盟CD中: leaveCnt=%s,kickedCnt=%s,lastVoluntarily=%s,leaveFamilyTime=%s(%s),passTimes=%s < %s" |
| | | % (leaveCnt, kickedCnt, lastVoluntarily, leaveFamilyTime, GameWorld.ChangeTimeNumToStr(leaveFamilyTime), passTimes, cdTimes))
|
| | | return True
|
| | | return False
|
| | |
|
| | | def AutoJoinFamily(curPlayer):
|
| | | if curPlayer.GetFamilyID():
|
| | | return
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | playerLV = curPlayer.GetLV()
|
| | | GameWorld.DebugLog("玩家一键自动加入家族! playerLV=%s" % playerLV, playerID)
|
| | | realmLV = curPlayer.GetOfficialRank()
|
| | | GameWorld.DebugLog("玩家一键自动加入家族! realmLV=%s" % realmLV, playerID)
|
| | | if CheckInJoinCD(curPlayer):
|
| | | return
|
| | |
|
| | | familyMgr = DBDataMgr.GetFamilyMgr()
|
| | | indexList = range(familyMgr.GetCount())
|
| | |
| | | continue
|
| | | familyID = family.GetID()
|
| | | lvMin = family.GetJoinLVMin()
|
| | | if lvMin and playerLV < lvMin:
|
| | | GameWorld.DebugLog(" 等级不足的不处理! familyID=%s,lvMin=%s" % (familyID, lvMin), playerID)
|
| | | if lvMin and realmLV < lvMin:
|
| | | GameWorld.DebugLog(" 官职不足的不处理! familyID=%s,lvMin=%s" % (familyID, lvMin), playerID)
|
| | | continue
|
| | | if family.GetJoinReview():
|
| | | GameWorld.DebugLog(" 需要审核的不处理! familyID=%s" % familyID, playerID)
|
| | |
| | |
|
| | | # 可再扩展自动请求,暂时不处理
|
| | | GameWorld.DebugLog("没有可自动进入的仙盟!")
|
| | | PlayerControl.NotifyCode(curPlayer, "QuickEnterFamilyFail")
|
| | | return
|
| | |
|
| | | def GetFamilySetting(familyLV, fieldName):
|
| | |
| | |
|
| | | def RequestJoinTagFamily(curPlayer, familyID):
|
| | | ## 申请加入
|
| | | if CheckInJoinCD(curPlayer):
|
| | | return
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | if curPlayer.GetFamilyID():
|
| | | GameWorld.DebugLog('已经有仙盟不能再申请加入! familyID=%s' % curPlayer.GetFamilyID(), playerID)
|
| | |
| | | return
|
| | |
|
| | | lvMin = tagFamily.GetJoinLVMin()
|
| | | if curPlayer.GetLV() < lvMin:
|
| | | GameWorld.DebugLog('等级未达到该仙盟加入最低等级限制! lv=%s < %s' % (curPlayer.GetLV(), lvMin), playerID)
|
| | | if curPlayer.GetOfficialRank() < lvMin:
|
| | | GameWorld.DebugLog('官职未达到该仙盟加入最低限制! realmLV=%s < %s' % (curPlayer.GetOfficialRank(), lvMin), playerID)
|
| | | return
|
| | |
|
| | | # 需要审核,满员后端不限制申请,由前端自行决定是否可申请
|
| | |
| | | def OnChangeFamilyJoin(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | joinReview = clientData.JoinReview
|
| | | joinLVMin = clientData.JoinLVMin
|
| | | joinLVMin = clientData.JoinLVMin # 官职
|
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | familyID = curPlayer.GetFamilyID()
|
| | |
| | | #XW_JZ_LeaveFamily <n color="0,190,255">{%S1%}</n><n color="255,255,0">退出了家族!</n> 25 - -
|
| | | NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaveFamily", [curPlayer.GetName()])
|
| | |
|
| | | MapServer_FamilyRefresh(curPlayer, 0)
|
| | | MapServer_FamilyRefresh(curPlayer, 0, 1)
|
| | |
|
| | | if family.GetCount() == 0:
|
| | | #玩家离开后, 家族没有人了 , 删除这个家族
|