Example #1
0
 protected virtual void AsyncRelease(StarverPlayer player)
 {
     Task.Run(() =>
     {
         try
         {
             player.SetBuff(BuffID.ShadowDodge, 60 * 3);
             player.SetBuff(BuffID.Webbed, 60 * 3);
             unsafe
             {
                 Vector *Source         = stackalloc Vector[Max];
                 Vector *ReversedSource = stackalloc Vector[Max];
                 Vector velocity        = new Vector(15, 0);
                 int damage             = 1080 * 2;
                 damage += (int)(Math.Sqrt(player.Level) * 3);
                 for (int i = 0; i < Max; i++)
                 {
                     Source[i]                = Vector.FromPolar(Math.PI * 2 * i / Max, RadiumMax);
                     ReversedSource[i]        = Source[i];
                     ReversedSource[i].Angle += Math.PI / 2;
                 }
                 #region First stage
                 var rotation = 0.0;
                 while (rotation < 2 * Math.PI)
                 {
                     for (int i = 0; i < Max; i++)
                     {
                         #region NoReverse
                         velocity.Angle = Source[i].Angle - Math.PI / 2 - Math.PI / 12;
                         player.NewProj(player.Center + Source[i], velocity, FromIn[0], damage, 20f);
                         // Source[i].Length -= 16 * 2 / 3;
                         Source[i].Angle += Math.PI / 2 / 30;
                         #endregion
                         #region Reverse
                         velocity.Angle = ReversedSource[i].Angle + Math.PI / 2 + Math.PI / 12;
                         player.NewProj(player.Center + ReversedSource[i], velocity, FromIn[1], damage, 20f);
                         // ReversedSource[i].Length += 16 * 2 / 3;
                         ReversedSource[i].Angle -= Math.PI / 2 / 30;
                         #endregion
                     }
                     rotation += Math.PI / 2 / 30;
                     Thread.Sleep(2000 / 30);
                 }
                 #endregion
                 #region Second stage(Beams)
                 damage /= 2;
                 damage *= 3;
                 for (int i = 0; i < Beams.Length; i++)
                 {
                     player.ProjCircle(player.Center, 16 * 4 + 16 * 8 * i, -13 - 2 * i, Beams[i], 10 + 5 * i, (int)(damage * (1 + 0.1f * i)));
                     Thread.Sleep(175 + 25 * i);
                 }
                 #endregion
             }
         }
         catch
         {
         }
     });
 }
Example #2
0
 public PreNPCStrikeEventArgs(NpcStrikeEventArgs rawArgs, StarverPlayer player, double dIndexLevel, double dIndexMP)
 {
     RawArgs     = rawArgs;
     Player      = player;
     DIndexLevel = dIndexLevel;
     DIndexMP    = dIndexMP;
 }
Example #3
0
 public PostNPCStrikeEventArgs(NpcStrikeEventArgs rawArgs, StarverPlayer player, int realDamage, int expGet)
 {
     RawArgs    = rawArgs;
     RealDamage = realDamage;
     ExpGet     = expGet;
     Player     = player;
 }
Example #4
0
        public override void Release(StarverPlayer player, Vector vel)
        {
            int damage = 100 + (int)(100 * Math.Log(player.Level * player.Level / 2));

            player.NewProj(vel * 10, ProjectileID.DD2ApprenticeStorm, damage, 1);
            player.NewProj(Vector2.Zero, ProjectileID.SolarWhipSwordExplosion, damage, 1);
        }
Example #5
0
 public override void Release(StarverPlayer player, Vector vel)
 {
     for (int i = 0; i < 5; i++)
     {
         player.NewProj(player.Center, player.FromPolar(vel.Angle + Rand.NextDouble(0, Math.PI / 4), 19f), ProjectileID.MolotovFire, (int)(10 + Math.Log(player.Level)), 2f);
     }
 }
Example #6
0
        protected Vector ItemOffset(StarverPlayer player)
        {
            float  length = player.HeldItem.height;
            Vector offset = Vector.FromPolar(player.ItemUseAngle, length);

            return(offset);
        }
Example #7
0
        /// <summary>
        /// 30%可能性,发射各种宝石法杖弹幕
        /// </summary>
        /// <param name="player"></param>
        /// <param name="vel"></param>
        private unsafe void TreasureShots(StarverPlayer player, Vector2 vel)
        {
            int *Bolts = stackalloc int[TreasureBolts.Length];

            #region RandSelect
            {
                bool *Selected = stackalloc bool[TreasureBolts.Length];
                for (int i = 0; i < TreasureBolts.Length; i++)
                {
                    int t;
                    do
                    {
                        t = Rand.Next(TreasureBolts.Length);
                    }while (Selected[t]);
                    Selected[t] = true;
                    Bolts[i]    = TreasureBolts[t];
                }
            }
            #endregion
            vel.Length(19);
            Vector relativePos = new Vector(16 * 3.75f, 0);
            int    damage      = 60;
            damage += (int)(2 * Math.Sqrt(player.Level));
            damage  = Math.Min(300, damage);
            for (int i = 0; i < TreasureBolts.Length; i++)
            {
                relativePos.Angle = Math.PI * 2 * i / TreasureBolts.Length;
                player.NewProj(player.Center + relativePos, vel, Bolts[i], damage, 5f);
            }
        }
Example #8
0
 public override void Release(StarverPlayer player, Vector vel)
 {
     if (!player.IgnoreCD)
     {
         AsyncRelease(player);
     }
 }
Example #9
0
 public PostReleaseSkillEventArgs(StarverPlayer player, StarverSkill skill, int mpCost, int cd)
 {
     Player = player;
     Skill  = skill;
     MPCost = mpCost;
     CD     = cd;
 }
Example #10
0
 private async void AsyncRelease(StarverPlayer player)
 {
     await Task.Run(() =>
     {
         try
         {
             int[] arr  = new int[Rand.Next(4) + 1];
             int damage = (int)(50 * Math.Log(player.Level));
             for (int i = 0; i < arr.Length; i++)
             {
                 arr[i] = player.NewProj(player.Center, Rand.NextVector2(9), ProjectileID.SporeGas, damage, 20f);
             }
             int timer = 0;
             while (Main.projectile[arr[0]].active && Main.projectile[arr[0]].owner == player.Index && timer < 3000)
             {
                 foreach (var idx in arr)
                 {
                     player.NewProj(Main.projectile[idx].Center, Rand.NextVector2(15), ProjectileID.TerrarianBeam, damage * 3 / 2, 20f);
                 }
                 timer += 25; Thread.Sleep(25);
             }
         }
         catch
         {
         }
     });
 }
Example #11
0
 protected override void InternalRelease(StarverPlayer player, Vector vel)
 {
     Task.Run(() =>
     {
         try
         {
             var damage = Math.Min(2000, player.Level / 80 + 900);
             player.ProjCircle(player.Center, 32, 16, ProjectileID.DD2SquireSonicBoom, 10, 1080);
             player.ProjSector(player.Center, 16, 16, vel.Angle, Math.PI / 4, 1310, ProjectileID.NebulaBlaze2, 3);
             var vertical = vel.ToVertical(84);
             player.ProjLine(player.Center + vertical, player.Center - vertical, vel.ToLenOf(18f), 10, 2300, ProjectileID.TerraBeam);
             vertical.Length = 16 * 10;
             var center      = player.Center;
             var go          = vel.ToLenOf(16 * 3f);
             var v2          = go.ToLenOf(0.1f);
             for (int i = 0; i < 20; i++)
             {
                 player.ProjLine(center - vertical, center + vertical, v2, 10, damage, ProjectileID.SolarWhipSwordExplosion);
                 center += go;
                 Thread.Sleep(4000 / 39);
             }
         }
         catch
         {
         }
     });
 }
Example #12
0
 public override void Release(StarverPlayer player, Vector vel)
 {
     foreach (NPC npc in Main.npc)
     {
         if (npc.active && (npc.Center - player.TPlayer.Center).Length() <= rec + Math.Min(player.Level / 5, 16 * 30))
         {
             npc.velocity = new Vector2(0);
             NetMessage.SendData((int)PacketTypes.NpcUpdate, -1, -1, null, npc.whoAmI);
             player.NewProj(npc.Center, Vector2.Zero, ProjectileID.StardustGuardianExplosion, player.Level * 10 + 1400, 0);
         }
     }
     if (player.TPlayer.hostile)
     {
         foreach (Player ply in Main.player)
         {
             if ((!ply.hostile) || (ply.Center - player.TPlayer.Center).Length() > rec + player.Level || ply.whoAmI == player.Index || (ply.team == player.TSPlayer.Team && ply.team != 0 && ply.team != 1))
             {
                 continue;
             }
             ply.velocity = Vector2.Zero;
             NetMessage.SendData((int)PacketTypes.PlayerUpdate, -1, -1, null, ply.whoAmI);
             player.NewProj(ply.Center, Vector2.Zero, ProjectileID.StardustGuardianExplosion, player.Level * 10 + 1400, 0);
         }
     }
     player.SetBuff(BuffID.ShadowDodge);
 }
Example #13
0
 private async void AsyncRelease(StarverPlayer player)
 {
     await Task.Run(() =>
     {
         try
         {
             int damage = (int)Math.Log(player.Level);
             damage    *= damage;
             damage    *= 5;
             Vector2 RandPos()
             {
                 return(player.Center + new Vector2(0, 16 * 2) + Rand.NextVector2(16 * 3.5f, 0));
             }
             Vector2 RandVel()
             {
                 return(Rand.NextVector2(0.5f, 0.1f) + new Vector2(0, 0.1f));
             }
             int Tag = 10 * 8;
             while (Tag > 0 && player.Alive)
             {
                 player.NewProj(RandPos(), RandVel(), Projs.Next(), damage, 20f);
                 Thread.Sleep(125);
                 Tag--;
             }
         }
         catch
         {
         }
     });
 }
Example #14
0
        internal static async void AsyncUpingGreen(StarverPlayer player, Vector2 Center, int Height, int Width)
        {
            await Task.Run(() =>
            {
                int Timer       = 0;
                int speed       = 18;
                Vector velocity = new Vector(0, -speed);
                Vector StartPos = (Vector)Center;
                StartPos.Y     += Height / 4 + Height / 2;
                Vector Line     = new Vector(2 * Width, 0);
                Line.X          = Math.Min(16 * 6, Line.X);

                int Num = (int)(Line.Length / 8);

                int damage = (int)Math.Sqrt(player.Level);
                damage    *= 5;
                damage    += 900;


                while (Timer++ < 5)
                {
                    player.ProjLine(StartPos + Line, StartPos - Line, velocity, Num, damage, UpingGreenID);
                    Thread.Sleep(20);
                }
            });
        }
Example #15
0
        internal static void AsyncUpingGreen(StarverPlayer player, Entity target)
        {
            #region Wasted

            /*
             * await Task.Run(() =>
             * {
             *      int Timer = 0;
             *      int speed = 16;
             *      Vector velocity = new Vector(0, -speed);
             *      Vector StartPos = (Vector)target.Center;
             *      StartPos.Y += target.height / 4 + target.height / 2;
             *      Vector Line = new Vector(2 * target.width, 0);
             *      Line.X = Math.Min(16 * 6, Line.X);
             *
             *      int Num = (int)(Line.Length / 4);
             *
             *      int damage = (int)Math.Sqrt(player.Level);
             *      damage *= 5;
             *      damage += 900;
             *
             *
             *      while (Timer++ < 6)
             *      {
             *              player.ProjLine(StartPos + Line, StartPos - Line, velocity, Num, damage, UpingGreenID);
             *              Thread.Sleep(3 * speed);
             *      }
             * });
             */
            #endregion
            AsyncUpingGreen(player, target.Center, target.height, target.width);
        }
Example #16
0
        public override void Release(StarverPlayer player, Vector vel)
        {
            var Start = player.Center + new Vector2(-Math.Min(player.Level, 348 * 10) - 48 * 10, -16 * 40);
            var End   = player.Center + new Vector2(Math.Min(player.Level, 48 * 10) + 48 * 10, -16 * 40);
            var down  = new Vector2(0, 16);

            player.ProjLine(Start, End, down, Math.Max(Math.Min(player.Level / 48, 10), 10) * 2 + 20, 400, ProjectileID.RocketSnowmanIII);
        }
Example #17
0
        public override bool CheckSpawn(StarverPlayer player)
        {
            return(false);

            timer++;
            bool success = timer % sChecker.SpawnRate == 0 && rand.NextDouble() < sChecker.SpawnChance;

            return(success && sChecker.Match(player.GetNPCSpawnChecker()));
        }
Example #18
0
 public override bool CanSet(StarverPlayer player)
 {
     if (!NPC.downedBoss3)
     {
         player.SendText("该技能已被地牢的诅咒封印", 238, 232, 170);
         return(false);
     }
     return(base.CanSet(player));
 }
Example #19
0
 public override bool CanSet(StarverPlayer player)
 {
     if (!NPC.downedPlantBoss)
     {
         player.SendText("该技能已被一株强大的植物封印", 173, 255, 47);
         return(false);
     }
     return(base.CanSet(player));
 }
Example #20
0
 public override bool CanSet(StarverPlayer player)
 {
     if (!NPC.downedGolemBoss)
     {
         player.SendText("该技能已被一尊蜥蜴石像封印", 210, 105, 30);
         return(false);
     }
     return(base.CanSet(player));
 }
Example #21
0
 public override bool CanSet(StarverPlayer player)
 {
     if (!Main.hardMode)
     {
         player.SendText("该技能已被血肉之墙封印", 220, 20, 60);
         return(false);
     }
     return(base.CanSet(player));
 }
Example #22
0
 public override bool CanSet(StarverPlayer player)
 {
     if (!(NPC.downedMechBoss1 && NPC.downedMechBoss2 && NPC.downedMechBoss3))
     {
         player.SendText("该技能已被三位机械头目共同封印", 192, 192, 192);
         return(false);
     }
     return(base.CanSet(player));
 }
Example #23
0
 public override bool CanSet(StarverPlayer player)
 {
     if (!NPC.downedBoss1)
     {
         player.SendText("该技能被某种邪恶的目光注视着,暂时无法使用", 255, 192, 203);
         return(false);
     }
     return(base.CanSet(player));
 }
Example #24
0
 public override bool CanSet(StarverPlayer player)
 {
     if (!NPC.downedBoss2)
     {
         player.SendText("该技能已被血腐的力量封印", 199, 21, 133);
         return(false);
     }
     return(base.CanSet(player));
 }
Example #25
0
 public override bool CanSet(StarverPlayer player)
 {
     if (!NPC.downedMechBossAny)
     {
         player.SendText("该技能已被一位机械头目封印", 220, 220, 220);
         return(false);
     }
     return(base.CanSet(player));
 }
Example #26
0
        public override void Release(StarverPlayer player, Vector vel)
        {
            int damage = 142 + player.Level > 10000 ? (int)(122 * Math.Log(player.Level)) : 0;

            player.NewProj(vel * 10, ProjectileID.Daybreak, 130, 1);
            player.NewProj(player.Center + vel.ToLenOf(8), vel * 10, ProjectileID.Daybreak, damage, 1);
            player.NewProj(player.Center + vel.ToLenOf(16), vel * 10, ProjectileID.Daybreak, damage / 10, 1);
            player.NewProj(Vector2.Zero, ProjectileID.DD2ExplosiveTrapT3Explosion, damage / 2, 1);
            player.NewProj(Vector2.Zero, ProjectileID.SolarWhipSwordExplosion, damage / 2, 1);
        }
Example #27
0
        public override void Release(StarverPlayer player, Vector vel)
        {
            int     damage   = 5 + (int)(20 * Math.Log(player.Level));
            Vector2 velocity = vel * 3.5f;

            for (int i = 0; i < 10; i++)
            {
                player.NewProj(player.Center + Rand.NextVector2(16 * 3, 16 * 3), velocity, Projs.Next(), damage, 10f);
            }
        }
Example #28
0
 public override void Release(StarverPlayer player, Vector vel)
 {
     //var realm = new ReflectingRealm(player)
     //{
     //	DefaultTimeLeft = 60 * 60,
     //	Radium = 16 * 30,
     //	Center = player.Center
     //};
     //Starver.Instance.Aura.AddRealm(realm);
 }
Example #29
0
 public override void Release(StarverPlayer player, Vector vel)
 {
     //int damage = (int)(10 * Math.Log10(player.Level) + Math.Min(32567, player.MP / 10)) + 200;
     //int n = (int)(10 * Math.Log(player.MP) + 10);
     //player.MPCost = 0;
     //for (int i = 0; i < n; i++)
     //{
     //	player.NewProj(player.Center,  player.FromPolar(vel.Angle + Rand.NextDouble(-Math.PI / 6, Math.PI / 6), 29), ProjectileID.CursedFlameFriendly, damage, 20f);
     //}
 }
Example #30
0
        public override void Release(StarverPlayer player, Vector vel)
        {
            double dirold = vel.Angle;

            for (double d = dirold - Math.PI / 12; d < dirold + Math.PI / 12; d += Math.PI / 24)
            {
                player.ProjLine(player.Center, player.Center + player.FromPolar(d, 16 * 50), Vector2.Zero, 45, 80, ProjectileID.Flames);
                Thread.Sleep(20);
            }
        }