using CommonAI.Data; using CommonAI.ZoneClient; using System.Collections.Generic; using XmdsCommon.Message; using XmdsCommon.Plugin; namespace XmdsCommon.ZoneClient.XmdsClientVirtual { public class XmdsClientVirtual_Actor : XmdsClientVirtual_Player { private List mTeamList = null; protected override void MOwner_OnDoEvent(ZoneObject obj, CommonAI.Zone.ObjectEvent e) { if (e is XmdsUnitPropEventB2C) { XmdsUnitPropEventB2C evt = e as XmdsUnitPropEventB2C; XmdsUnitProperties props = (XmdsUnitProperties)mOwner.Info.Properties; props.ServerData.Prop = evt.Props; } else if (e is PlayerTeamIntoEventB2C) { PlayerTeamIntoEventB2C evt = e as PlayerTeamIntoEventB2C; mTeamList = evt.Members; } //else if (e is PlayerPKModeChangeEventB2C) //{ // PlayerPKModeChangeEventB2C evt = e as PlayerPKModeChangeEventB2C; // mData.UnitPKInfo.CurPKMode = evt.CurMode; //} /* else if (e is SetAutoBattleB2C) { SetAutoBattleB2C evt = e as SetAutoBattleB2C; ZoneActor actor = obj as ZoneActor; actor.SendUnitGuard(evt.isAutoBattle != 0); }*/ base.MOwner_OnDoEvent(obj, e); } public override bool IsEnemy(ZoneUnit unit) { bool ret = false; XmdsClientVirtual v = unit.Virtual as XmdsClientVirtual; if ((v is XmdsClientVirtual_Monster) || (v is XmdsClientVirtual_SummonUnit)) //怪物、召唤物或NPC按照默认方式处理. { ret = this.mOwner.Force == unit.Force ? false : true; return ret; } else if(v is XmdsClientVirtual_Pet) { return false;//自动选取目标时选中宠物的bug(宠物不对作为敌人) } else if (v is XmdsClientVirtual_Player) { XmdsClientVirtual_Player playerVirtual = v as XmdsClientVirtual_Player; PKMode m = GetPKInfo().CurPKMode; switch (m) { case PKMode.Peace: ret = this.mOwner.Force == unit.Force ? false : true; //if (ret == true) { ret = !IsTeamMember(playerVirtual); } break; case PKMode.Team: ret = !IsTeamMember(playerVirtual); break; case PKMode.All: ret = (playerVirtual.GetPlayerUUID() != this.GetPlayerUUID()); break; case PKMode.Server: ret = GetServerID() == playerVirtual.GetServerID() ? false : true; if (ret == true) { ret = !IsTeamMember(playerVirtual); } break; case PKMode.Justice: ret = (playerVirtual.GetPKLv() == PKLevel.White ? false : true); if (ret == true) { ret = !IsTeamMember(playerVirtual); } break; case PKMode.Guild: ret = !IsGuildMember(playerVirtual); if (ret == true) { ret = !IsTeamMember(playerVirtual); } break; case PKMode.force: ret = GetForceID() != playerVirtual.GetForceID(); if (ret == true) { ret = !IsTeamMember(playerVirtual); } break; default: break; } } return ret; } public bool IsTeamMember(XmdsClientVirtual_Player pl) { bool ret = false; if (pl.GetPlayerUUID() == this.GetPlayerUUID()) { ret = true; } else { ret = _IsTeamMember(pl.GetPlayerUUID()); } return ret; } private bool _IsTeamMember(string uuid) { if (mTeamList != null && mTeamList.Contains(uuid)) { return true; } return false; } public void GetAllTeamMember(List ret) { if (mTeamList != null) { foreach(var a in mTeamList) { } } } public bool IsGuildMember(XmdsClientVirtual_Player pl) { bool ret = false; string gID = GetGuildID(); if (string.IsNullOrEmpty(gID)) { ret = false; } else { ret = gID == pl.GetGuildID() ? true : false; } return ret; } public override bool IsAllies(ZoneUnit unit) { return _IsTeamMember((unit.Virtual as XmdsClientVirtual).GetPlayerUUID()); } public override void OnDispose(ZoneUnit owner) { if (mTeamList != null) { mTeamList.Clear(); mTeamList = null; } base.OnDispose(owner); } } }