//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); }
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; } }