示例#1
0
        internal void SetUp(TargetFlag flag, List <PrefabComponent> components, bool isNestedPrefab)
        {
            _components = components;
            switch (flag)
            {
            case TargetFlag.Add:
                SubIcon = Styles.AddTexture;
                break;

            case TargetFlag.Sub:
                SubIcon = Styles.SubTexture;
                break;

            case TargetFlag.None:
                // 追加削除が無い場合差分を見る
                var isModify =
                    components.Any(c => c.Flag == TargetFlag.Add) |
                    components.Any(c => c.Flag == TargetFlag.Sub) |
                    components.Any(c => c.Diffs.Count > 0);

                if (isModify)
                {
                    SubIcon = Styles.ModifyTexture;
                }
                break;
            }

            icon = isNestedPrefab ? Styles.NestedPrefabTexture : Styles.PrefabTexture;
        }
示例#2
0
 public void Add(TargetFlag code)
 {
     Bytes.Add(new byte[]
     {
         (byte)code
     });
 }
示例#3
0
        public static void ReadSpellTargetData(Packet packet, ref TargetFlag targetFlags, WowGuid targetGUID, params object[] idx)
        {
            targetFlags = packet.ReadInt32E <TargetFlag>("Flags", idx);

            if (targetFlags.HasAnyFlag(TargetFlag.Unit | TargetFlag.CorpseEnemy | TargetFlag.GameObject | TargetFlag.CorpseAlly | TargetFlag.UnitMinipet))
            {
                targetGUID = packet.ReadPackedGuid("Unit", idx);
            }

            if (targetFlags.HasAnyFlag(TargetFlag.Item | TargetFlag.TradeItem))
            {
                packet.ReadPackedGuid("Item", idx);
            }

            if (targetFlags.HasAnyFlag(TargetFlag.SourceLocation))
            {
                ReadLocation(packet, "SrcLocation");
            }

            if (targetFlags.HasAnyFlag(TargetFlag.DestinationLocation))
            {
                ReadLocation(packet, "DstLocation");
            }

            if (targetFlags.HasAnyFlag(TargetFlag.NameString))
            {
                packet.ReadCString("Name", idx);
            }
        }
示例#4
0
    static int IntToEnum(IntPtr L)
    {
        int        arg0 = (int)LuaDLL.lua_tonumber(L, 1);
        TargetFlag o    = (TargetFlag)arg0;

        ToLua.Push(L, o);
        return(1);
    }
示例#5
0
 public SpellCast(DateTime _time, int _number, int _spellId, TargetFlag _targetFlag, List<Misc.Guid> _hitTargets, List<Misc.Guid> _missTargets)
 {
     time = _time;
     number = _number;
     spellId = _spellId;
     targetFlag = _targetFlag;
     hitTargets = _hitTargets;
     missTargets = _missTargets;
 }
示例#6
0
    static int get_TargetFlag(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            Buff       obj = (Buff)o;
            TargetFlag ret = obj.TargetFlag;
            ToLua.Push(L, ret);
            return(1);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index TargetFlag on a nil value" : e.Message));
        }
    }
示例#7
0
    static int set_TargetFlag(IntPtr L)
    {
        object o = null;

        try
        {
            o = ToLua.ToObject(L, 1);
            Buff       obj  = (Buff)o;
            TargetFlag arg0 = (TargetFlag)ToLua.CheckObject(L, 2, typeof(TargetFlag));
            obj.TargetFlag = arg0;
            return(0);
        }
        catch (Exception e)
        {
            return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index TargetFlag on a nil value" : e.Message));
        }
    }
示例#8
0
        private void GetDiffItem(
            TreeViewItem root,
            string label,
            TargetFlag flag,
            Texture2D texture,
            Action <PrefabComponent, TreeViewItem> action = null
            )
        {
            var finds = _components.Where(c => c.Flag == flag);

            if (!finds.Any())
            {
                return;
            }

            var item = new TreeViewItem
            {
                id          = GetId(),
                displayName = label,
                icon        = texture,
            };

            foreach (var find in finds)
            {
                var content = EditorGUIUtility.ObjectContent(null, find.Type);
                var child   = new TreeViewItem
                {
                    id          = GetId(),
                    displayName = find.Name,
                    icon        = (Texture2D)content.image,
                };

                if (child.icon == null)
                {
                    child.icon = Styles.ScriptTexture;
                }

                action?.Invoke(find, child);
                item.AddChild(child);
            }

            root.AddChild(item);
        }
示例#9
0
 static int FindTargets(IntPtr L)
 {
     try
     {
         ToLua.CheckArgsCount(L, 6);
         BattleController    obj  = (BattleController)ToLua.CheckObject(L, 1, typeof(BattleController));
         long                arg0 = (long)LuaDLL.luaL_checknumber(L, 2);
         UnityEngine.Vector3 arg1 = ToLua.ToVector3(L, 3);
         float               arg2 = (float)LuaDLL.luaL_checknumber(L, 4);
         TeamFlag            arg3 = (TeamFlag)ToLua.CheckObject(L, 5, typeof(TeamFlag));
         TargetFlag          arg4 = (TargetFlag)ToLua.CheckObject(L, 6, typeof(TargetFlag));
         Actor[]             o    = obj.FindTargets(arg0, arg1, arg2, arg3, arg4);
         ToLua.Push(L, o);
         return(1);
     }
     catch (Exception e)
     {
         return(LuaDLL.toluaL_exception(L, e));
     }
 }
        /// <summary>
        /// Create Prefab Data
        /// </summary>
        private static PrefabObject Recursive(Transform transform, TargetFlag flag)
        {
            var info = new PrefabObject(transform.name, flag);
            {
                if (AssetDatabase.TryGetGUIDAndLocalFileIdentifier(transform.gameObject, out string guid, out long id))
                {
                    info.ID = id;
                }
            }

            var nestedRoot = PrefabUtility.GetNearestPrefabInstanceRoot(transform);

            info.IsNestedPrefab = nestedRoot != null;

            var components = transform.GetComponents <Component>();

            foreach (var component in components)
            {
                if (!AssetDatabase.TryGetGUIDAndLocalFileIdentifier(component, out string guid, out long id))
                {
                    continue;
                }

                var c = new PrefabComponent(component.GetType(), id, flag);
                info.Components.Add(c);
            }

            var count = transform.childCount;

            for (var i = 0; i < count; i++)
            {
                var child = transform.GetChild(i);
                info.Child.Add(Recursive(child, flag));
            }

            return(info);
        }
示例#11
0
    // 寻找范围内的单位
    public Actor FindTarget(long ownerID, Vector3 pos, float radius, TeamFlag teamFlag, TargetFlag targetFlag, FindType findType)
    {
        List <Actor> allActors = GetActorList();
        List <Actor> list      = new List <Actor>();

        foreach (var item in allActors)
        {
            // TODO 这里应该有错误
            if (item == this)
            {
                continue;
            }

            if (Vector3.Distance(pos, item.Position) > radius)
            {
                // 超出范围
                continue;
            }

            if (teamFlag == TeamFlag.ENEMY && item.UserID == ownerID)
            {
                // 要求目标是敌人 但是跟目标是同一队伍
                continue;
            }
            else if (teamFlag == TeamFlag.FRIENDLY && item.UserID != ownerID)
            {
                // 要求目标是友方 但是跟目标不是同一队伍
                continue;
            }

            // 炸弹等不能被作为攻击目标
            if (item.CanBeTarget)
            {
                list.Add(item);
            }
        }

        if (list.Count <= 0)
        {
            return(null);
        }

        if (findType == FindType.FIND_CLOSEST)
        {
            // 最近的
            list.Sort((a, b) =>
            {
                var lenA = Vector3.Distance(pos, a.Position);
                var lenB = Vector3.Distance(pos, b.Position);
                return(lenA.CompareTo(lenB));
            });
        }
        else if (findType == FindType.FIND_FARTHEST)
        {
            // 最远的
            list.Sort((a, b) =>
            {
                var lenA = Vector3.Distance(pos, a.Position);
                var lenB = Vector3.Distance(pos, b.Position);
                return(lenB.CompareTo(lenA));
            });
        }
        return(list[0]);
    }
示例#12
0
 public PrefabObject(string name, TargetFlag flag)
 {
     Name = name;
     Flag = flag;
 }
示例#13
0
 public PrefabComponent(Type type, long id, TargetFlag flag)
 {
     Type = type;
     ID   = id;
     Flag = flag;
 }
示例#14
0
 protected Variable(TypeFlag flag, TargetFlag target)
 {
     Type   = flag;
     Target = target;
 }
示例#15
0
        public static void ReadSpellCastData(Packet packet, params object[] idx)
        {
            bool    isSpellGo  = packet.Opcode == Opcodes.GetOpcode(Opcode.SMSG_SPELL_GO, Direction.ServerToClient);
            WowGuid targetGUID = new WowGuid64();

            var casterGUID = packet.ReadPackedGuid("CasterGUID", idx);

            packet.ReadPackedGuid("CasterUnit", idx);
            packet.ReadByte("CastID", idx);
            var      spellId = packet.ReadInt32 <SpellId>("SpellID", idx);
            CastFlag flags   = packet.ReadInt32E <CastFlag>("CastFlags", idx);

            packet.ReadUInt32("CastFlagsEx", idx);
            packet.ReadUInt32("CastTime", idx);

            if (isSpellGo)
            {
                var hitTargetsCount = packet.ReadByte("HitTargetsCount", idx);
                for (var i = 0; i < hitTargetsCount; ++i)
                {
                    packet.ReadGuid("HitTarget", idx, i);
                }

                var missCount = packet.ReadByte("MissStatusCount", idx);
                for (var i = 0; i < missCount; ++i)
                {
                    ReadSpellMissStatus(packet, idx, "MissStatus", i);
                }
            }

            TargetFlag targetFlags = TargetFlag.Self;

            ReadSpellTargetData(packet, ref targetFlags, targetGUID, idx, "Target");

            if (flags.HasAnyFlag(CastFlag.PredictedPower))
            {
                packet.ReadUInt32("RemainingPower");
            }

            if (flags.HasAnyFlag(CastFlag.RuneInfo))
            {
                ReadRuneData(packet, idx, "RemainingRunes");
            }

            if (isSpellGo)
            {
                if (flags.HasAnyFlag(CastFlag.AdjustMissile))
                {
                    ReadMissileTrajectoryResult(packet, idx, "MissileTrajectory");
                }
            }

            if (flags.HasAnyFlag(CastFlag.Projectile))
            {
                ReadSpellAmmo(packet, idx, "Ammo");
            }

            if (isSpellGo)
            {
                if (flags.HasAnyFlag(CastFlag.VisualChain))
                {
                    ReadProjectileVisual(packet, idx, "ProjectileVisual");
                }

                if (targetFlags.HasAnyFlag(TargetFlag.DestinationLocation))
                {
                    packet.ReadByte("DestLocSpellCastIndex", idx);
                }

                if (targetFlags.HasAnyFlag(TargetFlag.ExtraTargets))
                {
                    var targetPointsCount = packet.ReadInt32("TargetPointsCount", idx);
                    for (var i = 0; i < targetPointsCount; ++i)
                    {
                        ReadTargetLocation(packet, idx, "TargetPoints", i);
                    }
                }
            }
            else
            {
                if (flags.HasAnyFlag(CastFlag.Immunity))
                {
                    ReadCreatureImmunities(packet, idx, "Immunities");
                }

                if (flags.HasAnyFlag(CastFlag.HealPrediction))
                {
                    ReadSpellHealPrediction(packet, idx, "Predict");
                }
            }

            if (flags.HasAnyFlag(CastFlag.Unknown21) && !isSpellGo)
            {
                NpcSpellClick spellClick = new NpcSpellClick
                {
                    SpellID    = (uint)spellId,
                    CasterGUID = casterGUID,
                    TargetGUID = targetGUID
                };

                Storage.SpellClicks.Add(spellClick, packet.TimeSpan);
            }

            if (isSpellGo)
            {
                packet.AddSniffData(StoreNameType.Spell, spellId, "SPELL_GO");
            }
        }
示例#16
0
 public static TargetFlag ConvertTargetFlag(int i)
 {
     return(TargetFlag.GetTargetFlag(i));
 }
示例#17
0
文件: Actor.cs 项目: fqkw6/AStartTest
 public Actor[] FindTargets(float radius, TeamFlag teamFlag, TargetFlag targetFlag)
 {
     return(BattleController.Instance.FindTargets(UserID, Position, radius, teamFlag, targetFlag));
 }
示例#18
0
文件: Actor.cs 项目: fqkw6/AStartTest
 // 目标查找
 public Actor FindTarget(float radius, TeamFlag teamFlag, TargetFlag targetFlag)
 {
     return(BattleController.Instance.FindTarget(UserID, Position, radius, teamFlag, targetFlag, FindType.FIND_CLOSEST));
 }
示例#19
0
    public Actor[] FindTargets(long ownerID, Vector3 pos, float radius, TeamFlag teamFlag, TargetFlag targetFlag)
    {
        List <Actor> allActors = GetActorList();
        List <Actor> list      = new List <Actor>();

        foreach (var item in allActors)
        {
            if (item == this)
            {
                continue;
            }

            if (Vector3.Distance(pos, item.Position) > radius)
            {
                // 超出范围
                continue;
            }

            if (teamFlag == TeamFlag.ENEMY && item.UserID == ownerID)
            {
                // 要求目标是敌人
                continue;
            }
            else if (teamFlag == TeamFlag.FRIENDLY && item.UserID != ownerID)
            {
                // 要求目标是友方
                continue;
            }

            list.Add(item);
        }

        return(list.ToArray());
    }