using System.Collections.Generic; using CommonLang; using XmdsCommonServer.Plugin; using CommonAI.Zone.Instance; using XmdsCommonServer.Plugin.Scene; using System; using CommonAI.Zone.Helper; namespace XmdsCommonSkill.Plugin.FunctionEvent { /// /// 玩家触发aoi /// public class XmdsBattleFunctionEventAOI_99993 : XmdsBattleFunctionEventBase { public static int EventID = 99993; public class ParamsData { public struct UnitCreateInfo { public int id; public int force; public bool relativePos; public float x; public float y; } public bool bindTeam; public bool canSeeMe; public bool canSeeOther; public bool deadExit; //退出aoi需要消灭的阵营 public int killForce; public List units; } //private ParamsData mParams; // 队伍拉人半径 public static int TeamRadius = 5; public override int GetEventID() { return EventID; } protected override bool OnInit() { return true; } public override object CreateParams() { return new ParamsData(); } private T ObjectDict2ValueByKey(IDictionary dict, string key, T defaultVal) { if (dict == null) { return defaultVal; } object ret; if (dict.TryGetValue(key, out ret)) { return (T)System.Convert.ChangeType(ret, typeof(T)); } else { return defaultVal; } } protected override void OnTriggerEvent(XmdsVirtual target, XmdsVirtual sender) { //InstancePlayer player = target.mUnit as InstancePlayer; //if(player == null) //{ // return; //} //mParams = (ParamsData)data; //XmdsPlayerAOI aoi = new XmdsPlayerAOI(player, mParams.canSeeMe, mParams.canSeeOther); //player.setAoiStatus(aoi); //int killForce = mParams.killForce; //aoi.DeadExit = mParams.deadExit; //var handle = new ObjectAoiStatus.OnObjectLeaveHandler((a, o)=> //{ // if (aoi.GetUnitCountByForce(killForce) == 0) // { // aoi.Cleanup(); // player.setAoiStatus(null); // } //}); //aoi.OnObjectLeave += handle; //var zone = player.Parent; //// 以TeamRadius为半径将队友拉入位面 //if (mParams.bindTeam && target.TeamListCount > 0) //{ // var teamList = target.TeamList; // foreach (var uuid in teamList) // { // var p = zone.getPlayerByUUID(uuid); // if (p != null && CMath.intersectRound(player.X, player.Y, TeamRadius, p.X, p.Y, p.Info.BodySize)) // { // p.setAoiStatus(aoi); // } // } //} //if(mParams.units != null) //{ // foreach (var item in mParams.units) // { // var unitInfo = zone.Templates.getUnit(item.id); // if(unitInfo != null) // { // float x = item.x, y = item.y; // if (item.relativePos) // { // x = player.X + item.x; // y = player.Y + item.y; // } // float d = (float)(Math.Atan2(player.Y - y, player.X - x)); // var unit = zone.AddUnit(unitInfo, "打华仔", (byte)item.force, player.Level, x, y, d); // if (unit != null) // { // unit.setAoiStatus(player.AoiStatus); // } // } // } //} } } }