626 lines
22 KiB
C#
626 lines
22 KiB
C#
|
/********************************************************************************
|
|||
|
* 文件名: Team.cs
|
|||
|
* 全路径: \Script\Player\Team\Team.cs
|
|||
|
* 创建人: 李嘉
|
|||
|
* 创建时间:2014-01-09
|
|||
|
*
|
|||
|
* 功能说明:全部的组队数据
|
|||
|
* 修改记录:
|
|||
|
*********************************************************************************/
|
|||
|
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using Games.ChatHistory;
|
|||
|
using Games.Events;
|
|||
|
using Games.GlobeDefine;
|
|||
|
using Games.LogicObj;
|
|||
|
using GCGame;
|
|||
|
using GCGame.Table;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
public class Team
|
|||
|
{
|
|||
|
// 有效成员列表 - 现在已经不敢动teamMember那个玩意了,实际有效成员列表可以从这个拿
|
|||
|
private readonly List<TeamMember> _memberList;
|
|||
|
public int AutoTeamTargetDest = -1;
|
|||
|
|
|||
|
public List<TeamInvater> InvaterList = new List<TeamInvater>();
|
|||
|
public bool IsAutoTeam = false;
|
|||
|
|
|||
|
public int LastTeamDest = -1;
|
|||
|
public int LastTeamLevelMax = -1;
|
|||
|
public int LastTeamLevelMin = -1;
|
|||
|
public bool IsCrossServerTeam = false; //是否是跨服队伍
|
|||
|
|
|||
|
public bool NewRequest = false;
|
|||
|
|
|||
|
public delegate void OnCreateTeamFinish();
|
|||
|
private OnCreateTeamFinish CreateCB;
|
|||
|
|
|||
|
public List<TeamMember> RequestList = new List<TeamMember>();
|
|||
|
|
|||
|
public Team()
|
|||
|
{
|
|||
|
TeamID = GlobeVar.INVALID_ID;
|
|||
|
teamMember = new TeamMember[GlobeVar.MAX_TEAM_MEMBER];
|
|||
|
for (var i = 0; i < GlobeVar.MAX_TEAM_MEMBER; ++i)
|
|||
|
teamMember[i] = new TeamMember();
|
|||
|
_memberList = new List<TeamMember>(GlobeVar.MAX_TEAM_MEMBER);
|
|||
|
}
|
|||
|
|
|||
|
public int _LastTeamID;
|
|||
|
public int TeamID { get; set; }
|
|||
|
|
|||
|
public TeamMember[] teamMember { get; set; }
|
|||
|
|
|||
|
public void CleanUp()
|
|||
|
{
|
|||
|
TeamID = GlobeVar.INVALID_ID;
|
|||
|
for (var i = 0; i < GlobeVar.MAX_TEAM_MEMBER; ++i)
|
|||
|
{
|
|||
|
//清理一遍名字面板
|
|||
|
var objTeam = Singleton<ObjManager>.GetInstance().FindOtherPlayerInScene(teamMember[i].Guid);
|
|||
|
if (objTeam != null)
|
|||
|
objTeam.UpdateTeamInfo(false);
|
|||
|
teamMember[i].CleanUp();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void UpdateTeamHeadUI(bool state,int index)
|
|||
|
{
|
|||
|
if (index < 0 || index >= GlobeVar.MAX_TEAM_MEMBER)
|
|||
|
return;
|
|||
|
var objTeam = Singleton<ObjManager>.GetInstance().FindOtherPlayerInScene(teamMember[index].Guid);
|
|||
|
if (objTeam != null)
|
|||
|
objTeam.UpdateTeamInfo(state);
|
|||
|
}
|
|||
|
|
|||
|
public void UpdateAllTeamHeadUI(bool state)
|
|||
|
{
|
|||
|
for (var i = 0; i < GlobeVar.MAX_TEAM_MEMBER; ++i)
|
|||
|
{
|
|||
|
UpdateTeamHeadUI(state, i);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void CreaetTeam(int destId, int minLevel, int maxLevel, OnCreateTeamFinish createCallBack = null)
|
|||
|
{
|
|||
|
if (destId > 0)
|
|||
|
{
|
|||
|
LastTeamDest = destId;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LastTeamDest = -1;
|
|||
|
}
|
|||
|
|
|||
|
if (minLevel > 0)
|
|||
|
{
|
|||
|
LastTeamLevelMin = Mathf.Min(minLevel, maxLevel);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LastTeamLevelMin = -1;
|
|||
|
}
|
|||
|
|
|||
|
if (maxLevel > 0)
|
|||
|
{
|
|||
|
LastTeamLevelMax = Mathf.Max(minLevel, maxLevel);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LastTeamLevelMax = -1;
|
|||
|
}
|
|||
|
|
|||
|
if (GameManager.gameManager.PlayerDataPool.IsHaveTeam())
|
|||
|
{
|
|||
|
MessageBoxLogic.OpenOKCancelBox(StrDictionary.GetClientDictionaryString("#{4605}"), "",
|
|||
|
Singleton<ObjManager>.GetInstance().MainPlayer.ReqJoinLeaveOldOK,
|
|||
|
Singleton<ObjManager>.GetInstance().MainPlayer.ReqJoinLeaveOldCancel);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
if (createCallBack != null)
|
|||
|
CreateCB = createCallBack;
|
|||
|
var packet = (CG_REQ_CREATE_TEAM)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_CREATE_TEAM);
|
|||
|
packet.Desid = LastTeamDest;
|
|||
|
packet.Minlvl = LastTeamLevelMin;
|
|||
|
packet.Maxlvl = LastTeamLevelMax;
|
|||
|
|
|||
|
packet.SendPacket();
|
|||
|
|
|||
|
//IsAutoTeam = true;
|
|||
|
//if (LastTeamDest > 0)
|
|||
|
//{
|
|||
|
// SetAutoTeam(true);
|
|||
|
//}
|
|||
|
}
|
|||
|
|
|||
|
public void ChangeTeamDest(int destId, int minLevel, int maxLevel)
|
|||
|
{
|
|||
|
if (destId > 0) LastTeamDest = destId;
|
|||
|
if (minLevel > 0) LastTeamLevelMin = Mathf.Min(minLevel, maxLevel);
|
|||
|
if (maxLevel > 0) LastTeamLevelMax = Mathf.Max(minLevel, maxLevel);
|
|||
|
if (!Singleton<ObjManager>.GetInstance().MainPlayer.IsTeamLeader()) return;
|
|||
|
|
|||
|
var packet = (CG_REQ_FIX_TEAM_DES)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_FIX_TEAM_DES);
|
|||
|
packet.Desid = LastTeamDest;
|
|||
|
packet.Minlvl = LastTeamLevelMin;
|
|||
|
packet.Maxlvl = LastTeamLevelMax;
|
|||
|
packet.SendPacket();
|
|||
|
//IsAutoTeam = true;
|
|||
|
}
|
|||
|
|
|||
|
public void SetAutoTeam(bool isAuto)
|
|||
|
{
|
|||
|
if (isAuto)
|
|||
|
{
|
|||
|
if (LastTeamDest > 0)
|
|||
|
{
|
|||
|
var packet = (CG_ASK_AUTOTEAM)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ASK_AUTOTEAM);
|
|||
|
packet.Desid = LastTeamDest;
|
|||
|
packet.SendPacket();
|
|||
|
}
|
|||
|
//IsAutoTeam = true;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (LastTeamDest > 0)
|
|||
|
{
|
|||
|
var packet = (CG_ASK_UN_AUTOTEAM)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ASK_UN_AUTOTEAM);
|
|||
|
packet.None = 0;
|
|||
|
packet.SendPacket();
|
|||
|
}
|
|||
|
|
|||
|
//IsAutoTeam = false;
|
|||
|
}
|
|||
|
|
|||
|
MissionDialogAndLeftTabsLogic.Instance().UpdateTeamInfo();
|
|||
|
}
|
|||
|
|
|||
|
//更新全部队伍信息
|
|||
|
public void UpdateTeamInfo(GC_TEAM_SYNC_TEAMINFO packet)
|
|||
|
{
|
|||
|
if (null == packet)
|
|||
|
return;
|
|||
|
IsCrossServerTeam = packet.IsCross == 1;
|
|||
|
var bNeedUpdateNameBoardColor = false; //是否更新名字版颜色,加入队伍的时候调用
|
|||
|
//如果收到最新的队伍信息,而玩家之前没有队伍的话,则进行提示“你进入了一个队伍,可获得更多收益”
|
|||
|
if (GlobeVar.INVALID_ID == TeamID && GlobeVar.INVALID_ID != packet.TeamID)
|
|||
|
{
|
|||
|
if (null != Singleton<ObjManager>.GetInstance().MainPlayer)
|
|||
|
Singleton<ObjManager>.GetInstance().MainPlayer.SendNoticMsg(false, "#{2229}");
|
|||
|
|
|||
|
if (MissionDialogAndLeftTabsLogic.Instance() != null)
|
|||
|
{
|
|||
|
MissionDialogAndLeftTabsLogic.Instance()._TagPanel.ShowPage(1);
|
|||
|
MissionDialogAndLeftTabsLogic.Instance().OnTagPage(1);
|
|||
|
}
|
|||
|
|
|||
|
bNeedUpdateNameBoardColor = true;
|
|||
|
}
|
|||
|
|
|||
|
//更新数据
|
|||
|
var newTeam = packet.TeamID != TeamID && TeamID == GlobeVar.INVALID_ID;
|
|||
|
TeamID = packet.TeamID;
|
|||
|
var mainPlayer = ObjManager.Instance.MainPlayer;
|
|||
|
|
|||
|
UpdateAllTeamHeadUI(false);
|
|||
|
|
|||
|
//如果队伍ID为-1,则说明解散队伍,清除信息即可
|
|||
|
if (TeamID == GlobeVar.INVALID_ID)
|
|||
|
{
|
|||
|
//退出组队跟随状态
|
|||
|
//if (null != Singleton<ObjManager>.GetInstance().MainPlayer)
|
|||
|
// Singleton<ObjManager>.GetInstance().MainPlayer.LeaveTeamFollow();
|
|||
|
if(MissionDialogAndLeftTabsLogic.Instance()!=null)
|
|||
|
MissionDialogAndLeftTabsLogic.Instance().UpdateTeamInfo();
|
|||
|
CleanUp();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var mainPlayerFollow = 0;
|
|||
|
if (mainPlayer != null && mainPlayer.GUID != GlobeVar.INVALID_GUID)
|
|||
|
{
|
|||
|
var member = teamMember.Find(a => a.Guid == mainPlayer.GUID);
|
|||
|
if (member != null)
|
|||
|
mainPlayerFollow = member.FollowState;
|
|||
|
}
|
|||
|
_memberList.Clear();
|
|||
|
for (var i = 0; i < packet.memberGuidList.Count; i++)
|
|||
|
{
|
|||
|
var guid = packet.memberGuidList[i];
|
|||
|
var member = teamMember.Find(a => a.Guid == guid);
|
|||
|
if (member == null)
|
|||
|
member = new TeamMember { Guid = guid };
|
|||
|
_memberList.Add(member);
|
|||
|
|
|||
|
if (i < packet.memberNameList.Count)
|
|||
|
member.MemberName = packet.memberNameList[i];
|
|||
|
|
|||
|
if (i < packet.memberLevelList.Count)
|
|||
|
member.Level = packet.memberLevelList[i];
|
|||
|
|
|||
|
if (i < packet.memberProfList.Count)
|
|||
|
member.Profession = packet.memberProfList[i];
|
|||
|
|
|||
|
if (i < packet.memberHPList.Count)
|
|||
|
member.HP = packet.memberHPList[i];
|
|||
|
|
|||
|
if (i < packet.memberMaxHPList.Count)
|
|||
|
member.MaxHP = packet.memberMaxHPList[i];
|
|||
|
|
|||
|
if (i < packet.memberCombatList.Count)
|
|||
|
member.CombatNum = packet.memberCombatList[i];
|
|||
|
|
|||
|
if (i < packet.sceneclassList.Count)
|
|||
|
member.SceneClassID = packet.sceneclassList[i];
|
|||
|
|
|||
|
if (i < packet.sceneinstList.Count)
|
|||
|
member.SceneInstID = packet.sceneinstList[i];
|
|||
|
|
|||
|
if (i < packet.modelvisualidList.Count)
|
|||
|
member.ModelVisual = packet.modelvisualidList[i];
|
|||
|
|
|||
|
if (i < packet.weapondataidList.Count)
|
|||
|
member.WeaponData = packet.weapondataidList[i];
|
|||
|
|
|||
|
if (i < packet.weaponeffectgemList.Count)
|
|||
|
member.WeaponGemEffect = packet.weaponeffectgemList[i];
|
|||
|
|
|||
|
if (i < packet.weaponeffectgem2List.Count)
|
|||
|
member.WeaponGemEffect2 = packet.weaponeffectgem2List[i];
|
|||
|
|
|||
|
if (i < packet.weaponeffectgem3List.Count)
|
|||
|
member.WeaponGemEffect3 = packet.weaponeffectgem3List[i];
|
|||
|
|
|||
|
if (i < packet.AuraEffectList.Count)
|
|||
|
{
|
|||
|
member.WingAurId = packet.GetAuraEffect(0);
|
|||
|
member.EffectAuraId = packet.GetAuraEffect(1);
|
|||
|
}
|
|||
|
|
|||
|
if (i < packet.memberstateCount)
|
|||
|
member.IsOnline = packet.memberstateList[i] == 0;
|
|||
|
|
|||
|
float fEnterPosX = 0;
|
|||
|
if (i < packet.posXList.Count)
|
|||
|
fEnterPosX = packet.posXList[i] * 0.01f;
|
|||
|
float fEnterPosZ = 0;
|
|||
|
if (i < packet.posZList.Count)
|
|||
|
fEnterPosZ = packet.posZList[i] * 0.01f;
|
|||
|
member.ScenePos = new Vector2(fEnterPosX, fEnterPosZ);
|
|||
|
if (i < packet.movespeedCount)
|
|||
|
member.MoveSpeed = packet.movespeedList[i] * 0.01f;
|
|||
|
//更新队长队员,索引为0即队长
|
|||
|
member.TeamJob = i == 0 ? 0 : 1;
|
|||
|
if (i < packet.followstateCount)
|
|||
|
member.FollowState = packet.followstateList[i];
|
|||
|
}
|
|||
|
|
|||
|
// 更新teamMember数组
|
|||
|
for (var i = 0; i < teamMember.Length; i++)
|
|||
|
if (i < _memberList.Count)
|
|||
|
teamMember[i] = _memberList[i];
|
|||
|
// 如果不是空记录,则直接抛弃当前记录
|
|||
|
else if (teamMember[i].IsValid())
|
|||
|
teamMember[i] = new TeamMember();
|
|||
|
// 释放外部事件 - 注:外部可能访问正在修改的数据,不应该允许在数据体中执行外部方法
|
|||
|
if (bNeedUpdateNameBoardColor)
|
|||
|
for (var i = 0; i < teamMember.Length; i++)
|
|||
|
{
|
|||
|
var member = teamMember[i];
|
|||
|
if (member.IsValid())
|
|||
|
{
|
|||
|
var objTeam = Singleton<ObjManager>.GetInstance().FindOtherPlayerInScene(member.Guid);
|
|||
|
if (objTeam != null)
|
|||
|
objTeam.SetSpricelName();
|
|||
|
}
|
|||
|
}
|
|||
|
if (mainPlayer != null && TeamID != GlobeVar.INVALID_ID)
|
|||
|
{
|
|||
|
var mainPlayerMember = teamMember.Find(a => a.Guid == mainPlayer.GUID);
|
|||
|
if (mainPlayerMember != null)
|
|||
|
{
|
|||
|
if (newTeam)
|
|||
|
{
|
|||
|
if (teamMember[0].IsValid() &&
|
|||
|
mainPlayer.GUID != teamMember[0].Guid &&
|
|||
|
mainPlayerMember.FollowState == TeamFollowState.notFollow)
|
|||
|
{
|
|||
|
if (PlayerPreferenceData.SystemAutoTeamFollow)
|
|||
|
mainPlayer.EnterTeamFollow();
|
|||
|
else
|
|||
|
{
|
|||
|
var cache = GameManager.gameManager.PlayerDataPool.EnterSceneCache;
|
|||
|
var fubenId = cache == null ? mainPlayerMember.SceneClassID : cache.EnterCopySceneID;
|
|||
|
var fuben = TableManager.GetFubenByID(fubenId, 0);
|
|||
|
// 不处于副本中时
|
|||
|
if (fuben == null || fuben.Type < 2)
|
|||
|
{
|
|||
|
MessageBoxLogic.OpenOKCancelBox(8022, funcOKClicked: () =>
|
|||
|
{
|
|||
|
var current = ObjManager.Instance.MainPlayer;
|
|||
|
if (current != null)
|
|||
|
current.EnterTeamFollow();
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (mainPlayerMember.FollowState != mainPlayerFollow)
|
|||
|
MainPlayerFollowStateUpdate(mainPlayer, mainPlayerMember, mainPlayerFollow);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
UpdateAllTeamHeadUI(true);
|
|||
|
if (CreateCB != null)
|
|||
|
{
|
|||
|
CreateCB();
|
|||
|
CreateCB = null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//根据索引更新某一个队员的信息
|
|||
|
public void UpdateMember(int nIndex, GC_TEAM_SYNC_MEMBERINFO packet)
|
|||
|
{
|
|||
|
UpdateTeamHeadUI(false, nIndex);
|
|||
|
if (nIndex < 0 || nIndex >= teamMember.Length) return;
|
|||
|
|
|||
|
if (packet.HasMemberGuid)
|
|||
|
teamMember[nIndex].Guid = packet.MemberGuid;
|
|||
|
|
|||
|
if (packet.HasMemberName)
|
|||
|
teamMember[nIndex].MemberName = packet.MemberName;
|
|||
|
|
|||
|
if (packet.HasMemberLevel)
|
|||
|
teamMember[nIndex].Level = packet.MemberLevel;
|
|||
|
|
|||
|
if (packet.HasMemberProf)
|
|||
|
teamMember[nIndex].Profession = packet.MemberProf;
|
|||
|
|
|||
|
if (packet.HasMemberHP)
|
|||
|
teamMember[nIndex].HP = packet.MemberHP;
|
|||
|
|
|||
|
if (packet.HasMemberMaxHP)
|
|||
|
teamMember[nIndex].MaxHP = packet.MemberMaxHP;
|
|||
|
|
|||
|
if (packet.HasMemberCombat)
|
|||
|
teamMember[nIndex].CombatNum = packet.MemberCombat;
|
|||
|
|
|||
|
if (packet.HasSceneclass)
|
|||
|
teamMember[nIndex].SceneClassID = packet.Sceneclass;
|
|||
|
|
|||
|
if (packet.HasSceneinst)
|
|||
|
teamMember[nIndex].SceneInstID = packet.Sceneinst;
|
|||
|
|
|||
|
if (packet.HasPosX)
|
|||
|
{
|
|||
|
var posX = packet.PosX * 0.01f;
|
|||
|
var posZ = packet.PosZ * 0.01f;
|
|||
|
teamMember[nIndex].ScenePos = new Vector2(posX, posZ);
|
|||
|
}
|
|||
|
|
|||
|
if (packet.HasModelvisualid)
|
|||
|
teamMember[nIndex].ModelVisual = packet.Modelvisualid;
|
|||
|
|
|||
|
if (packet.HasWeapondataid)
|
|||
|
teamMember[nIndex].WeaponData = packet.Weapondataid;
|
|||
|
|
|||
|
if (packet.HasWeaponeffectgem)
|
|||
|
teamMember[nIndex].WeaponGemEffect = packet.Weaponeffectgem;
|
|||
|
|
|||
|
if (packet.HasWeaponeffectgem2)
|
|||
|
teamMember[nIndex].WeaponGemEffect2 = packet.Weaponeffectgem2;
|
|||
|
|
|||
|
if (packet.HasWeaponeffectgem3)
|
|||
|
teamMember[nIndex].WeaponGemEffect3 = packet.Weaponeffectgem3;
|
|||
|
|
|||
|
if (packet.HasMemberstate)
|
|||
|
teamMember[nIndex].IsOnline = packet.Memberstate == 0;
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
teamMember[nIndex].WingAurId = packet.GetAuraEffect(0);
|
|||
|
teamMember[nIndex].EffectAuraId = packet.GetAuraEffect(1);
|
|||
|
}
|
|||
|
catch
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
if (packet.HasMovespeed) teamMember[nIndex].MoveSpeed = packet.Movespeed * 0.01f;
|
|||
|
var mainPlayer = Singleton<ObjManager>.GetInstance().MainPlayer;
|
|||
|
var isMainPlayer = mainPlayer.GUID == teamMember[nIndex].Guid;
|
|||
|
if (packet.HasFollowstate)
|
|||
|
{
|
|||
|
var oldValue = teamMember[nIndex].FollowState;
|
|||
|
teamMember[nIndex].FollowState = packet.Followstate;
|
|||
|
if (isMainPlayer &&
|
|||
|
teamMember[nIndex].FollowState != oldValue)
|
|||
|
MainPlayerFollowStateUpdate(mainPlayer, teamMember[nIndex], oldValue);
|
|||
|
}
|
|||
|
|
|||
|
if (isMainPlayer && MissionDialogAndLeftTabsLogic.Instance() != null)
|
|||
|
MissionDialogAndLeftTabsLogic.Instance().HandleSyncTeamInfo();
|
|||
|
UpdateAllTeamHeadUI(true);
|
|||
|
var tab = new Hashtable();
|
|||
|
tab["index"] = nIndex;
|
|||
|
tab["type"] = Obj_Fellow.FellowDialogType.EnemyInTeam;
|
|||
|
EventDispatcher.Instance.SendMessage(Games.Events.EventId.FellowDialogEvent, tab);
|
|||
|
}
|
|||
|
|
|||
|
private void MainPlayerFollowStateUpdate(Obj_MainPlayer mainPlayer, TeamMember mainPlayerMember, int oldState)
|
|||
|
{
|
|||
|
if (oldState == TeamFollowState.notFollow)
|
|||
|
if (MissionDialogAndLeftTabsLogic.Instance() != null)
|
|||
|
MissionDialogAndLeftTabsLogic.Instance().UpdateTeamInfo();
|
|||
|
|
|||
|
if (mainPlayerMember.Guid != teamMember[0].Guid)
|
|||
|
{
|
|||
|
switch (mainPlayerMember.FollowState)
|
|||
|
{
|
|||
|
case TeamFollowState.followMove:
|
|||
|
{
|
|||
|
mainPlayer.StopMove();
|
|||
|
mainPlayer.LeveAutoCombat();
|
|||
|
//// 如果距离队长太远,就试图进入骑乘状态
|
|||
|
//if (mainPlayerMember.SceneClassID == teamMember[0].SceneClassID &&
|
|||
|
// mainPlayerMember.SceneInstID == teamMember[0].SceneInstID &&
|
|||
|
// (teamMember[0].ScenePos - mainPlayer.Position.RemoveY()).sqrMagnitude >
|
|||
|
// _mountDistance.ToSquare())
|
|||
|
//{
|
|||
|
// mainPlayer.AskRideMount(false);
|
|||
|
//}
|
|||
|
}
|
|||
|
break;
|
|||
|
case TeamFollowState.followCombat:
|
|||
|
{
|
|||
|
if (mainPlayer.sceneAutoType != FubenAutoType.noFollow)
|
|||
|
mainPlayer.EnterAutoCombat();
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public TeamMember GetTeamMemberByguiId(ulong guid)
|
|||
|
{
|
|||
|
for (var i = 0; i < GlobeVar.MAX_TEAM_MEMBER; i++)
|
|||
|
if (guid == teamMember[i].Guid)
|
|||
|
return teamMember[i];
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
//获得某个队员信息
|
|||
|
public TeamMember GetTeamMember(int nIndex)
|
|||
|
{
|
|||
|
if (nIndex < 0 || nIndex >= GlobeVar.MAX_TEAM_MEMBER) return null;
|
|||
|
|
|||
|
return teamMember[nIndex];
|
|||
|
}
|
|||
|
|
|||
|
//队伍是否已满
|
|||
|
public bool IsFull()
|
|||
|
{
|
|||
|
return teamMember[GlobeVar.MAX_TEAM_MEMBER - 1].IsValid();
|
|||
|
}
|
|||
|
|
|||
|
public bool IsCaptain(ulong guid = GlobeVar.INVALID_GUID)
|
|||
|
{
|
|||
|
if (guid == GlobeVar.INVALID_GUID)
|
|||
|
{
|
|||
|
var mainPlayer = ObjManager.Instance.MainPlayer;
|
|||
|
return mainPlayer != null && teamMember[0].Guid == mainPlayer.GUID;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return teamMember[0].Guid == guid;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public int GetTeamMemberCount()
|
|||
|
{
|
|||
|
var count = 0;
|
|||
|
for (var i = 0; i < GlobeVar.MAX_TEAM_MEMBER; i++)
|
|||
|
if (teamMember[i].IsValid())
|
|||
|
count += 1;
|
|||
|
else
|
|||
|
break;
|
|||
|
return count;
|
|||
|
}
|
|||
|
|
|||
|
public void SendTeamChat(GC_CHAT.CHATTYPE chatType) //聊天频道发布招募信息
|
|||
|
{
|
|||
|
var destIdx = LastTeamDest;
|
|||
|
var targetTab = TableManager.GetTeamTargetByID(destIdx, 0);
|
|||
|
if (targetTab != null)
|
|||
|
{
|
|||
|
switch(chatType)
|
|||
|
{
|
|||
|
case GC_CHAT.CHATTYPE.CHAT_TYPE_WORLD:
|
|||
|
if (targetTab.TalkType == 2) //只能在帮派招募
|
|||
|
{
|
|||
|
GUIData.AddNotifyData("#{52002}");
|
|||
|
return;
|
|||
|
}
|
|||
|
break;
|
|||
|
case GC_CHAT.CHATTYPE.CHAT_TYPE_GUILD:
|
|||
|
if (targetTab.TalkType == 1) //只能在世界招募
|
|||
|
{
|
|||
|
GUIData.AddNotifyData("#{52003}");
|
|||
|
return;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
var teamTarget = targetTab.Name;
|
|||
|
var teamLevel = LastTeamLevelMin + "-" + LastTeamLevelMax;
|
|||
|
if (ChatInputLogic.IsCanChat((int)chatType,true,false))
|
|||
|
{
|
|||
|
var item = new ChatHistoryItem();
|
|||
|
item.CleanUp();
|
|||
|
item.EChannel = chatType;
|
|||
|
var modifyText = StrDictionary.GetClientDictionaryString("#{5137}", teamTarget, teamLevel,
|
|||
|
GameManager.gameManager.PlayerDataPool.TeamInfo.TeamID, Singleton<ObjManager>.GetInstance().MainPlayer.BaseAttr.RoleName);
|
|||
|
modifyText = Utils.StrFilter_Chat(modifyText);
|
|||
|
item.ChatInfo = modifyText;
|
|||
|
Utils.SendCGChatPak(item.ChatInfo, item, chatType == GC_CHAT.CHATTYPE.CHAT_TYPE_GUILD);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public bool IsFollowTeam()
|
|||
|
{
|
|||
|
return GetFollowState() != TeamFollowState.notFollow;
|
|||
|
// if (TeamID == GlobeVar.INVALID_ID)
|
|||
|
// return false;
|
|||
|
// else
|
|||
|
// {
|
|||
|
// var mainPlayer = GetMainPlayTeamData();
|
|||
|
// return TeamID != GlobeVar.INVALID_ID && mainPlayer != null && mainPlayer.FollowLeader();
|
|||
|
// }
|
|||
|
}
|
|||
|
|
|||
|
public int GetFollowState()
|
|||
|
{
|
|||
|
if (TeamID == GlobeVar.INVALID_ID)
|
|||
|
return TeamFollowState.notFollow;
|
|||
|
// 额外屏蔽队长的情况,当前队长状态被服务器玩坏了
|
|||
|
else
|
|||
|
{
|
|||
|
var mainPlayer = ObjManager.Instance.MainPlayer;
|
|||
|
if (mainPlayer == null)
|
|||
|
return TeamFollowState.notFollow;
|
|||
|
else if (teamMember[0].Guid == mainPlayer.GUID)
|
|||
|
return TeamFollowState.notFollow;
|
|||
|
else
|
|||
|
{
|
|||
|
var member = GetTeamMemberByguiId(mainPlayer.GUID);
|
|||
|
return member == null ? TeamFollowState.notFollow : member.FollowState;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public TeamMember GetMainPlayTeamData()
|
|||
|
{
|
|||
|
ulong? guid = null;
|
|||
|
if (GameManager.gameManager.PlayerDataPool != null &&
|
|||
|
GameManager.gameManager.PlayerDataPool.EnterSceneCache != null)
|
|||
|
guid = GameManager.gameManager.PlayerDataPool.EnterSceneCache.Guid;
|
|||
|
else if (ObjManager.Instance.MainPlayer != null)
|
|||
|
guid = ObjManager.Instance.MainPlayer.GUID;
|
|||
|
return guid == null ? null : GetTeamMemberByguiId(guid.Value);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public class TeamInvater
|
|||
|
{
|
|||
|
public ulong InvaterGuid;
|
|||
|
public string InvaterName;
|
|||
|
public int TeamID;
|
|||
|
public string TeamLeaderName;
|
|||
|
}
|