Example #1
0
        protected override bool TickCore(realm.RealmTime time)
        {
            object obj;
            SpawnState state = null;
            if (!Host.StateStorage.TryGetValue(Key, out obj) ||
                (state = (SpawnState)obj).remainingTick <= 0)
            {
                Entity[] originalChildren = null;
                if (state != null)
                    originalChildren = state.children;
                state = new SpawnState()
                {
                    remainingTick = 10000,
                    children = new Entity[5]
                };

                double angleInc = (2 * Math.PI) / 5;
                for (int i = 0; i < 5; i++)
                {
                    Entity entity = Entity.Resolve(0x0951);
                    entity.Move(
                        Host.Self.X + (float)Math.Cos(angleInc * i) * 4,
                        Host.Self.Y + (float)Math.Sin(angleInc * i) * 4);
                    state.children[i] = entity;
                    Host.Self.Owner.BroadcastPacket(new ShowEffectPacket()
                    {
                        EffectType = EffectType.Throw,
                        Color = new ARGB(0xffffbf00),
                        TargetId = Host.Self.Id,
                        PosA = new Position()
                        {
                            X = entity.X,
                            Y = entity.Y
                        }
                    }, null);
                }
                Host.StateStorage[Key] = state;
                Host.Self.Owner.Timers.Add(new WorldTimer(1500, (world, t) =>
                {
                    if (originalChildren != null)
                        foreach (var i in originalChildren)
                        {
                            if (i.Owner != null)
                                i.Owner.LeaveWorld(i);
                        }
                    foreach (var i in state.children)
                        world.EnterWorld(i);
                }));
                return false;
            }
            else
            {
                state.remainingTick -= time.thisTickTimes;
                if (state.remainingTick <= 0 ||
                    (state.remainingTick < 8000 && state.children.Sum(_ => _.Owner == null ? 0 : 1) < 3))
                    state.remainingTick = 0;
            }
            return false;
        }
Example #2
0
 protected override void OnStateEntry(realm.Entity host, realm.RealmTime time, ref object state)
 {
     state = new SwirlState()
     {
         Center = targeted ? Vector2.Zero : new Vector2(host.X, host.Y),
         Acquired = !targeted,
     };
 }
Example #3
0
 protected override void OnStateEntry(realm.Entity host, realm.RealmTime time, ref object state)
 {
     state = new OrbitState()
     {
         Speed = speed + speedVariance * (float)(Random.NextDouble() * 2 - 1),
         Radius = radius + radiusVariance * (float)(Random.NextDouble() * 2 - 1)
     };
 }
 protected override void BehaveCore(BehaviorCondition cond, realm.RealmTime? time, object state)
 {
     Enemy entity = Entity.Resolve(objType) as Enemy;
     Enemy parent = Host as Enemy;
     entity.Move(parent.X, parent.Y);
     entity.Terrain = (Host as Enemy).Terrain;
     parent.DamageCounter.Corpse = entity.DamageCounter;
     parent.Owner.EnterWorld(entity);
 }
 protected override void BehaveCore(BehaviorCondition cond, realm.RealmTime? time, object state)
 {
     int c = rand.Next(minCount, maxCount + 1);
     for (int i = 0; i < c; i++)
     {
         Entity entity = Entity.Resolve(objType);
         Entity parent = Host as Entity;
         entity.Move(parent.X, parent.Y);
         (entity as Enemy).Terrain = (Host as Enemy).Terrain;
         parent.Owner.EnterWorld(entity);
     }
 }
 protected override void BehaveCore(BehaviorCondition cond, realm.RealmTime? time, object state)
 {
     if (new Random().Next(1, 100) <= percent)
     {
         Portal entity = Entity.Resolve(objType) as Portal;
         Entity parent = Host as Entity;
         entity.Move(parent.X, parent.Y);
         parent.Owner.EnterWorld(entity);
         World w = RealmManager.GetWorld(Host.Self.Owner.Id);
         w.Timers.Add(new WorldTimer(30 * 1000, (world, t) => //default portal close time * 1000
         {
             try
             {
                 w.LeaveWorld(entity);
             }
             catch //couldn't remove portal, Owner became null. Should be fixed with RealmManager implementation
             {
                 Console.Out.WriteLine("Couldn't despawn portal.");
             }
         }));
     }
 }
Example #7
0
        protected override void BehaveCore(BehaviorCondition cond, realm.RealmTime? time, object state)
        {
            float dist = 2;
            var entity = GetNearestEntity(ref dist, null);
            if (entity != null)
            {
                var chr = Host as Character;
                var angleInc = (2 * Math.PI) / 12;
                var desc = chr.ObjectDesc.Projectiles[0];

                byte prjId = 0;
                Position prjPos = new Position() { X = chr.X, Y = chr.Y };
                var dmg = chr.Random.Next(desc.MinDamage, desc.MaxDamage);
                for (int i = 0; i < 12; i++)
                {
                    var prj = chr.CreateProjectile(
                        desc, chr.ObjectType, dmg, time.Value.tickTimes,
                        prjPos, (float)(angleInc * i));
                    chr.Owner.EnterWorld(prj);
                    if (i == 0)
                        prjId = prj.ProjectileId;
                }
                chr.Owner.BroadcastPacket(new MultiShootPacket()
                {
                    BulletId = prjId,
                    OwnerId = Host.Self.Id,
                    BulletType = (byte)desc.BulletType,
                    Position = prjPos,
                    Angle = 0,
                    Damage = (short)dmg,
                    NumShots = 12,
                    AngleIncrement = (float)angleInc,
                }, null);
                chr.Owner.LeaveWorld(chr);
            }
        }