Пример #1
0
        //angle from 0f to 1f
        public ProceduralSpellProj CreateProjectile(Player player, Vector2 velocity, float angle = 0f, Vector2?position = null, Entity caster = null)
        {
            if (caster == null)
            {
                caster = player;
            }
            Projectile projectile =
                Main.projectile[
                    Projectile.NewProjectile(position ?? caster.Center, velocity.RotatedBy(Constants.Tau * angle), ModContent.ProjectileType <ProceduralSpellProj>(),
                                             ProjectileDamage(player.GetModPlayer <PlayerCharacter>()), 3f, player.whoAmI)];
            ProceduralSpellProj ps = (ProceduralSpellProj)projectile.modProjectile;

            ps.Origin = projectile.position;
            foreach (Item item in Glyphs)
            {
                Glyph glyph = (Glyph)item.modItem;
                if (glyph.GetAiAction() != null)
                {
                    ps.Ai.Add(glyph.GetAiAction());
                }
                if (glyph.GetInitAction() != null)
                {
                    ps.Inits.Add(glyph.GetInitAction());
                }
                if (glyph.GetImpactAction() != null)
                {
                    ps.Impacts.Add(glyph.GetImpactAction());
                }
                if (glyph.GetKillAction() != null)
                {
                    ps.Kills.Add(glyph.GetKillAction());
                }
            }

            foreach (GlyphModifier modifier in Modifiers)
            {
                if (modifier.Impact != null)
                {
                    ps.Impacts.Add(modifier.Impact);
                }
                if (modifier.Draw != null)
                {
                    ps.SpellDraw.Add(modifier.Draw);
                }
                if (modifier.Init != null)
                {
                    ps.Inits.Add(modifier.Init);
                }
            }

            ps.Caster            = caster;
            ps.projectile.minion = Minion;

            /*if (minion)
             * {
             *  ps.projectile.melee = false;
             *  ps.projectile.ranged = false;
             *  ps.projectile.magic = false;
             * }*/
            ps.Source = this;
            ps.Initialize();
            CreateProjectilePacket.Write(player.whoAmI, ps.projectile.whoAmI, Glyphs[(byte)GlyphType.Star].type, Glyphs[(byte)GlyphType.Cross].type, Glyphs[(byte)GlyphType.Moon].type, ps.projectile.damage, Minion, caster.whoAmI, Modifiers);
            return(ps);
        }
Пример #2
0
        public override void HandlePacket(BinaryReader reader, int whoAmI)
        {
            Message msg = (Message)reader.ReadByte();

#if DEBUG
            LogMessage($"Handling {msg}");
#endif
            switch (msg)
            {
            //case Message.InitProjEleDmg:
            //    if (!Main.projectile.IndexInRange((int)tags[DataTag.projId])) break;
            //    Projectile p = Main.projectile[(int)tags[DataTag.projId]];
            //    try
            //    {
            //        kProjectile proj = p.GetGlobalProjectile<kProjectile>();
            //        proj.elementalDamage = new Dictionary<ELEMENT, int>()
            //        {
            //            { ELEMENT.FIRE, (int)tags[DataTag.fire] },
            //            { ELEMENT.COLD, (int)tags[DataTag.cold] },
            //            { ELEMENT.LIGHTNING, (int)tags[DataTag.lightning] },
            //            { ELEMENT.SHADOW, (int)tags[DataTag.shadow] }
            //        };
            //    }
            //    catch (SystemException e)
            //    {
            //        Main.NewText(e.ToString());
            //    }
            //    break;
            case Message.NpcEleDmg:
                NPCEleDmgPacket.Read(reader);
                break;

            case Message.PrefixNpc:
                PrefixNPCPacket.Read(reader);
                break;

            case Message.SyncStats:
                SyncStatsPacket.Read(reader);
                break;

            case Message.SyncLevel:
                SyncLevelPacket.Read(reader);
                kRPG.PlayerEnteredWorld = true;
                break;

            case Message.CreateProjectile:
                CreateProjectilePacket.Read(reader);
                break;

            case Message.AddXp:
                AddXPPacket.Read(reader);
                break;

            //case Message.SyncSpear:
            //    SyncSpearPacket.Read(reader);
            //    break;
            case Message.SwordInit:
                SwordInitPacket.Read(reader);
                break;

            case Message.StaffInit:
                StaffInitPacket.Read(reader);
                break;

            case Message.BowInit:
                BowInitPacket.Read(reader);
                break;

            case Message.SyncHit:
                SyncHitPacket.Read(reader);
                break;

            case Message.SyncCritHit:
                SyncCritHitPacket.Read(reader);
                break;
            }
        }