Ejemplo n.º 1
0
        private void lstProjectiles_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (mChangingName)
            {
                return;
            }

            if (lstProjectiles.SelectedNode == null || lstProjectiles.SelectedNode.Tag == null)
            {
                return;
            }

            mEditorItem = ProjectileBase.Get((Guid)lstProjectiles.SelectedNode.Tag);
            UpdateEditor();
        }
Ejemplo n.º 2
0
        public override void Load(EntityPacket packet)
        {
            if (mLoaded)
            {
                return;
            }

            base.Load(packet);
            var pkt = (ProjectileEntityPacket)packet;

            ProjectileId = pkt.ProjectileId;
            Dir          = pkt.ProjectileDirection;
            TargetId     = pkt.TargetId;
            mOwner       = pkt.OwnerId;
            mMyBase      = ProjectileBase.Get(ProjectileId);
            if (mMyBase != null)
            {
                for (var x = 0; x < ProjectileBase.SPAWN_LOCATIONS_WIDTH; x++)
                {
                    for (var y = 0; y < ProjectileBase.SPAWN_LOCATIONS_WIDTH; y++)
                    {
                        for (var d = 0; d < ProjectileBase.MAX_PROJECTILE_DIRECTIONS; d++)
                        {
                            if (mMyBase.SpawnLocations[x, y].Directions[d] == true)
                            {
                                mTotalSpawns++;
                            }
                        }
                    }
                }

                mTotalSpawns *= mMyBase.Quantity;
            }

            Spawns  = new ProjectileSpawns[mTotalSpawns];
            mLoaded = true;
        }
Ejemplo n.º 3
0
        //GameObjectPacket
        private static void HandlePacket(GameObjectPacket packet)
        {
            var id      = packet.Id;
            var deleted = packet.Deleted;
            var json    = "";

            if (!packet.Deleted)
            {
                json = packet.Data;
            }

            switch (packet.Type)
            {
            case GameObjectType.Animation:
                if (deleted)
                {
                    var anim = AnimationBase.Get(id);
                    anim.Delete();
                }
                else
                {
                    var anim = new AnimationBase(id);
                    anim.Load(json);
                    try
                    {
                        AnimationBase.Lookup.Set(id, anim);
                    }
                    catch (Exception exception)
                    {
                        Log.Error($"Another mystery NPE. [Lookup={AnimationBase.Lookup}]");
                        if (exception.InnerException != null)
                        {
                            Log.Error(exception.InnerException);
                        }

                        Log.Error(exception);
                        Log.Error($"{nameof(id)}={id},{nameof(anim)}={anim}");

                        throw;
                    }
                }

                break;

            case GameObjectType.Class:
                if (deleted)
                {
                    var cls = ClassBase.Get(id);
                    cls.Delete();
                }
                else
                {
                    var cls = new ClassBase(id);
                    cls.Load(json);
                    ClassBase.Lookup.Set(id, cls);
                }

                break;

            case GameObjectType.Item:
                if (deleted)
                {
                    var itm = ItemBase.Get(id);
                    itm.Delete();
                }
                else
                {
                    var itm = new ItemBase(id);
                    itm.Load(json);
                    ItemBase.Lookup.Set(id, itm);
                }

                break;

            case GameObjectType.Npc:
                if (deleted)
                {
                    var npc = NpcBase.Get(id);
                    npc.Delete();
                }
                else
                {
                    var npc = new NpcBase(id);
                    npc.Load(json);
                    NpcBase.Lookup.Set(id, npc);
                }

                break;

            case GameObjectType.Projectile:
                if (deleted)
                {
                    var proj = ProjectileBase.Get(id);
                    proj.Delete();
                }
                else
                {
                    var proj = new ProjectileBase(id);
                    proj.Load(json);
                    ProjectileBase.Lookup.Set(id, proj);
                }

                break;

            case GameObjectType.Quest:
                if (deleted)
                {
                    var qst = QuestBase.Get(id);
                    qst.Delete();
                }
                else
                {
                    var qst = new QuestBase(id);
                    qst.Load(json);
                    foreach (var tsk in qst.Tasks)
                    {
                        qst.OriginalTaskEventIds.Add(tsk.Id, tsk.CompletionEventId);
                    }

                    QuestBase.Lookup.Set(id, qst);
                }

                break;

            case GameObjectType.Resource:
                if (deleted)
                {
                    var res = ResourceBase.Get(id);
                    res.Delete();
                }
                else
                {
                    var res = new ResourceBase(id);
                    res.Load(json);
                    ResourceBase.Lookup.Set(id, res);
                }

                break;

            case GameObjectType.Shop:
                if (deleted)
                {
                    var shp = ShopBase.Get(id);
                    shp.Delete();
                }
                else
                {
                    var shp = new ShopBase(id);
                    shp.Load(json);
                    ShopBase.Lookup.Set(id, shp);
                }

                break;

            case GameObjectType.Spell:
                if (deleted)
                {
                    var spl = SpellBase.Get(id);
                    spl.Delete();
                }
                else
                {
                    var spl = new SpellBase(id);
                    spl.Load(json);
                    SpellBase.Lookup.Set(id, spl);
                }

                break;

            case GameObjectType.CraftTables:
                if (deleted)
                {
                    var cft = CraftingTableBase.Get(id);
                    cft.Delete();
                }
                else
                {
                    var cft = new CraftingTableBase(id);
                    cft.Load(json);
                    CraftingTableBase.Lookup.Set(id, cft);
                }

                break;

            case GameObjectType.Crafts:
                if (deleted)
                {
                    var cft = CraftBase.Get(id);
                    cft.Delete();
                }
                else
                {
                    var cft = new CraftBase(id);
                    cft.Load(json);
                    CraftBase.Lookup.Set(id, cft);
                }

                break;

            case GameObjectType.Map:
                //Handled in a different packet
                break;

            case GameObjectType.Event:
                var wasCommon = false;
                if (deleted)
                {
                    var evt = EventBase.Get(id);
                    wasCommon = evt.CommonEvent;
                    evt.Delete();
                }
                else
                {
                    var evt = new EventBase(id);
                    evt.Load(json);
                    wasCommon = evt.CommonEvent;
                    EventBase.Lookup.Set(id, evt);
                }

                if (!wasCommon)
                {
                    return;
                }

                break;

            case GameObjectType.PlayerVariable:
                if (deleted)
                {
                    var pvar = PlayerVariableBase.Get(id);
                    pvar.Delete();
                }
                else
                {
                    var pvar = new PlayerVariableBase(id);
                    pvar.Load(json);
                    PlayerVariableBase.Lookup.Set(id, pvar);
                }

                break;

            case GameObjectType.ServerVariable:
                if (deleted)
                {
                    var svar = ServerVariableBase.Get(id);
                    svar.Delete();
                }
                else
                {
                    var svar = new ServerVariableBase(id);
                    svar.Load(json);
                    ServerVariableBase.Lookup.Set(id, svar);
                }

                break;

            case GameObjectType.Tileset:
                var obj = new TilesetBase(id);
                obj.Load(json);
                TilesetBase.Lookup.Set(id, obj);
                if (Globals.HasGameData && !packet.AnotherFollowing)
                {
                    GameContentManager.LoadTilesets();
                }

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            GameObjectUpdatedDelegate?.Invoke(packet.Type);
        }
Ejemplo n.º 4
0
 private void cmbProjectile_SelectedIndexChanged(object sender, EventArgs e)
 {
     mEditorItem.Projectile = ProjectileBase.Get(ProjectileBase.IdFromList(cmbProjectile.SelectedIndex - 1));
 }
Ejemplo n.º 5
0
        public static void RegisterProjectiles()
        {
            ProjectileBase.AddType(new ProjectileType()
            {
                Id = ProjectileId.DigSmall, UseTierParticleColor = true, IsSlowBloom = true, InitialParticleBurst = 10, DigBrush = Brush.Size4, MaxAge = 600, Speed = 500, FireSound = Sound.MiningToolFire, TechName = "Mining Tool", UseTierTextures = true
            });
            ProjectileBase.AddType(new ProjectileType()
            {
                Id = ProjectileId.DigMedium, UseTierParticleColor = true, IsSlowBloom = true, InitialParticleBurst = 10, DigBrush = Brush.Size6, MaxAge = 600, Speed = 520, FireSound = Sound.MiningToolFire, TechName = "Mining Tool", UseTierTextures = true
            });
            ProjectileBase.AddType(new ProjectileType()
            {
                Id = ProjectileId.DigLarge, UseTierParticleColor = true, IsSlowBloom = true, InitialParticleBurst = 10, DigBrush = Brush.Size7, MaxAge = 600, Speed = 540, FireSound = Sound.MiningToolFire, TechName = "Mining Tool", UseTierTextures = true,
            });
            ProjectileBase.AddType(new ProjectileType()
            {
                Id = ProjectileId.DigExtraLarge, UseTierParticleColor = true, IsSlowBloom = true, InitialParticleBurst = 10, DigBrush = Brush.Size9, MaxAge = 600, Speed = 560, FireSound = Sound.MiningToolFire, TechName = "Mining Tool", UseTierTextures = true,
            });

            ProjectileBase.AddType(new ProjectileType()
            {
                Id                   = ProjectileId.Blaster,
                BaseDamage           = 5,
                MaxAge               = 600,
                Speed                = 750,
                InitialParticleBurst = 10,
                UseTierParticleColor = true,
                UseTierTextures      = true,
                ParticleStream       = true,
                FireSound            = Sound.BlasterFire,
                HitSound             = Sound.BlasterHit,
                Knockback            = 1000,
            });

            var blasterCharged = ProjectileBase.Get(ProjectileId.Blaster).Clone();

            blasterCharged.Name            = null;
            blasterCharged.Id              = ProjectileId.BlasterCharged;
            blasterCharged.BaseDamage      = 20;
            blasterCharged.Speed           = 1000;
            blasterCharged.Knockback       = 10;
            blasterCharged.UseTierTextures = true;
            blasterCharged.FireSound       = Sound.BlasterChargedFire;
            ProjectileBase.AddType(blasterCharged);

            var slowBlaster = ProjectileBase.Get(ProjectileId.Blaster).Clone();

            slowBlaster.TechName        = slowBlaster.Name;
            slowBlaster.Name            = null;
            slowBlaster.Id              = ProjectileId.SlowBlaster;
            slowBlaster.UseTierTextures = false;
            slowBlaster.BaseDamage      = 8;
            slowBlaster.Speed           = 300;
            slowBlaster.MaxAge          = 6000;
            ProjectileBase.AddType(slowBlaster);

            ProjectileBase.AddType(new ProjectileType()
            {
                Id                   = ProjectileId.LongRangeBlaster,
                BaseDamage           = 4,
                MaxAge               = 4000,
                Speed                = 650,
                Penetrate            = true,
                InitialParticleBurst = 10,
                UseTierParticleColor = true,
                //UseTierTextures = true,
                FireSound = Sound.BlasterFire,
                HitSound  = Sound.BlasterHit,
            });

            ProjectileBase.AddType(new ProjectileType()
            {
                Id                   = ProjectileId.BallLightning,
                BaseDamage           = 20,
                MaxAge               = 6000,
                Speed                = 500,
                Penetrate            = true,
                InitialParticleBurst = 10,
                ParticleColor        = Color.LightBlue,
                HitSound             = Sound.ElectricityHit,
            });

            ProjectileBase.AddType(new ProjectileType()
            {
                Id                   = ProjectileId.Disruptor,
                BaseDamage           = 6,
                MaxAge               = 200,
                Speed                = 750,
                InitialParticleBurst = 5,
                UseTierTextures      = true,
                UseTierParticleColor = true,
                FireSound            = Sound.DisruptorFire,
                HitSound             = Sound.DisruptorHit,
            });

            ProjectileBase.AddType(new ProjectileType()
            {
                Id         = ProjectileId.LaserRifle,
                BaseDamage = 13,
                MaxAge     = 1000,
                Speed      = 1000,
                //CoolDown = 500,
                InitialParticleBurst = 15,
                UseTierTextures      = true,
                UseTierParticleColor = true,
                FireSound            = Sound.LaserRifleFire,
                HitSound             = Sound.LaserRifleHit,
            });

            ProjectileBase.AddType(new ProjectileType()
            {
                Id                   = ProjectileId.PoisonDart,
                BaseDamage           = 5,
                MaxAge               = 2000,
                Speed                = 700,
                InitialParticleBurst = 10,
                ParticleColor        = Color.Green,
                FireSound            = Sound.Spike,
                HitSound             = Sound.BlasterHit,
            });

            ProjectileBase.AddType(new ProjectileType()
            {
                Id                   = ProjectileId.HomingMissile,
                BaseDamage           = 11,
                MaxAge               = 3000,
                Speed                = 500,
                IsHoming             = true,
                UseTierTextures      = true,
                InitialParticleBurst = 30,
                ParticleColor        = Color.LightGray,
                ParticleStream       = true,
                FireSound            = Sound.HomingMissileFire,
                HitSound             = Sound.HomingMissileHit,
                OnHitParticleBurst   = 75,
            });

            var acidSpit = ProjectileBase.Get(ProjectileId.HomingMissile).Clone();

            acidSpit.Id              = ProjectileId.AcidSpit;
            acidSpit.Name            = "AcidSpit";
            acidSpit.UseTierTextures = false;
            acidSpit.ParticleColor   = Color.FromNonPremultiplied(194, 245, 65, 200);
            acidSpit.FireSound       = Sound.FireBreath;
            acidSpit.HitSound        = Sound.AcidSplat;
            ProjectileBase.AddType(acidSpit);

            //var explosiveAcidSpit = ProjectileBase.Get(ProjectileId.HomingMissile).Clone();
            //explosiveAcidSpit.Id = ProjectileId.ExplosiveAcidSpit;
            //explosiveAcidSpit.Name = "Explosive AcidSpit";
            //explosiveAcidSpit.Penetrate = true;
            //explosiveAcidSpit.IsHoming = false;
            //explosiveAcidSpit.UseTierTextures = false;
            //explosiveAcidSpit.MaxAge = 6000;
            //explosiveAcidSpit.Speed = 400;
            //explosiveAcidSpit.ParticleColor = Color.FromNonPremultiplied(194, 245, 65, 200);
            //explosiveAcidSpit.FireSound = Sound.FireBreath;
            //explosiveAcidSpit.HitSound = Sound.AcidSplat;
            //explosiveAcidSpit.OnProjectileHitTerrain = (projectile, material) => {
            //        projectile.Map.RenderBrush(projectile.Position, Brush.Size4, Material.Acid, 0);
            //    };
            //explosiveAcidSpit.OnProjectileHit = (projectile, target, amount) => {
            //    projectile.Map.RenderBrush(projectile.Position, Brush.Size4, Material.Acid, 0);
            //};
            //ProjectileBase.AddType(explosiveAcidSpit);

            ProjectileBase.AddType(new ProjectileType()
            {
                Id               = ProjectileId.FlameThrower,
                Speed            = 1000,
                ParticleColor    = Color.Red,
                OnProjectileMove = (projectile, material) => {
                    if (material != Material.Fire && MaterialInfo.IsLiquid(material))
                    {
                        projectile.Remove();
                    }
                    else
                    {
                        if (projectile.Age > 150)
                        {
                            projectile.Map.RenderBrush(projectile.Position, Brush.Size4, Material.Fire, 0);
                        }
                    }
                },
                OnProjectileHitTerrain = (projectile, material) => {
                    projectile.Map.RenderBrush(projectile.Position, Brush.Size4, Material.Fire, 0);
                },
                OnProjectileHit = (projectile, target, amount) => {
                    projectile.Map.RenderBrush(projectile.Position, Brush.Size4, Material.Fire, 0);
                }
            });


            ProjectileBase.AddType(new ProjectileType()
            {
                Id                     = ProjectileId.Fireball,
                BaseDamage             = 25,
                Speed                  = 1000,
                MaxAge                 = 2000,
                DigBrush               = Brush.Size10,
                DigStrength            = 7,
                FireSound              = Sound.FireBreath,
                ParticleColor          = Color.FromNonPremultiplied(255, 113, 95, 200),
                ParticleStream         = true,
                InitialParticleBurst   = 20,
                OnProjectileHitTerrain = (projectile, material) => {
                    projectile.Map.RenderBrush(projectile.Position, Brush.Size5, Material.Fire, 0);
                },
                OnProjectileHit = (projectile, target, amount) => {
                    projectile.Map.RenderBrush(projectile.Position, Brush.Size5, Material.Fire, 0);
                }
            });

            ProjectileBase.AddType(new ProjectileType()
            {
                Id                   = ProjectileId.Fireball_2,
                BaseDamage           = 8,
                Speed                = 800,
                MaxAge               = 3000,
                Penetrate            = true,
                FireSound            = Sound.FireBreath,
                ParticleColor        = Color.FromNonPremultiplied(255, 113, 95, 200),
                ParticleStream       = true,
                InitialParticleBurst = 20,
                OnProjectileHit      = (projectile, target, amount) => {
                    projectile.Map.RenderBrush(projectile.Position, Brush.Size10, Material.Fire, 0);
                }
            });

            ProjectileBase.AddType(new ProjectileType()
            {
                Id                     = ProjectileId.Comet,
                BaseDamage             = 10,
                Speed                  = 500,
                ParticleColor          = Color.FromNonPremultiplied(255, 43, 61, 175),
                ParticleStream         = true,
                InitialParticleBurst   = 20,
                MaxAge                 = 2000,
                DigBrush               = Brush.Size10,
                DigStrength            = 7,
                HasGravity             = true,
                FireSound              = Sound.FireBreath,
                OnProjectileHitTerrain = (projectile, material) => {
                    projectile.Map.RenderBrush(projectile.Position, Brush.Size4, Material.Fire, 0);
                },
                OnProjectileHit = (projectile, target, amount) => {
                }
            });

            ProjectileBase.AddType(new ProjectileType()
            {
                Id                   = ProjectileId.Spike,
                BaseDamage           = 10,
                MaxAge               = 2000,
                Speed                = 750,
                InitialParticleBurst = 15,
                ParticleColor        = Color.FromNonPremultiplied(114, 118, 20, 255),
                ParticleStream       = true,
                FireSound            = Sound.Spike,
            });

            var project = ProjectileBase.Get(ProjectileId.Spike).Clone();

            project.TechName   = project.Name;
            project.Name       = null;
            project.Id         = ProjectileId.SproutSpike;
            project.BaseDamage = 7;
            ProjectileBase.AddType(project);

            ProjectileBase.AddType(new ProjectileType()
            {
                Id                   = ProjectileId.BoseEinsteinCondenser,
                BaseDamage           = 5,
                MaxAge               = 1000,
                Speed                = 500,
                FireSound            = Sound.BoseEinsteinCondenserFire,
                InitialParticleBurst = 5,
                ParticleColor        = Color.LightBlue,
                ParticleStream       = true,
                OnProjectileMove     = (projectile, material) => {
                    if (MaterialInfo.IsLiquid(material))
                    {
                        projectile.Map.RenderBrush(projectile.Position, Brush.Size9, Material.Ice, 0);
                        projectile.Remove();
                    }
                },
                OnProjectileHitTerrain = (projectile, material) => {
                    //if (projectile.Age > 150)
                    projectile.Map.RenderBrush(projectile.Position, Brush.Size9, Material.Ice, 0);
                },
                OnProjectileHit = (projectile, target, amount) => {
                    projectile.Map.RenderBrush(projectile.Position, Brush.Size9, Material.Ice, 0);
                }
            });

            ProjectileBase.AddType(new ProjectileType()
            {
                Id                     = ProjectileId.DiggingAndDamaging,
                BaseDamage             = 10,
                DigBrush               = Brush.Size7,
                DigStrength            = 7,
                ParticleColor          = Color.FromNonPremultiplied(248, 113, 241, 100),
                ParticleStream         = true,
                MaxAge                 = 3000,
                Speed                  = 600,
                FireSound              = Sound.SpaceShipBlaster,
                OnProjectileHitTerrain = (projectile, material) => {
                    projectile.Map.RenderBrush(projectile.Position, Brush.Size8, Material.Fire, 1);
                },
            });

            //Final Boss Grenades
            ProjectileBase.AddType(new ProjectileType()
            {
                Id                     = ProjectileId.Grenade,
                BaseDamage             = 5,
                ParticleColor          = Color.FromNonPremultiplied(109, 247, 27, 255),
                ParticleStream         = true,
                Speed                  = 500,
                MaxAge                 = 3000,
                FireSound              = Sound.HomingMissileFire,
                HitSound               = Sound.HomingMissileHit,
                OnProjectileHitTerrain = (projectile, material) => {
                    projectile.Map.Explode(projectile.Position, 250, 9);
                },
                OnProjectileHit = (projectile, target, amount) => {
                    projectile.Map.Explode(projectile.Position, 250, 9);
                }
            });

            ProjectileBase.AddType(new ProjectileType()
            {
                Id             = ProjectileId.Grenade_2,
                BaseDamage     = 1,
                Speed          = 1000,
                MaxAge         = 6000,
                HasGravity     = true,
                FireSound      = Sound.GrenadeFire,
                ParticleColor  = Color.FromNonPremultiplied(109, 247, 27, 255),
                ParticleStream = true,
                //OnProjectileMove = (projectile, material) =>
                //{
                //    if (projectile.Age > 2800)
                //        projectile.Map.Explode(projectile.Position, 5, 1);
                //},
                OnProjectileHitTerrain = (projectile, material) => {
                    projectile.Map.Explode(projectile.Position, 5, 1);
                },
                OnProjectileHit = (projectile, target, amount) => {
                    projectile.Map.Explode(projectile.Position, 5, 1);
                }
            });

            ProjectileBase.AddType(new ProjectileType()
            {
                Id                   = ProjectileId.MiniFlame,
                BaseDamage           = 5,
                DigBrush             = Brush.Size7,
                DigStrength          = 8,
                ParticleColor        = Color.FromNonPremultiplied(255, 80, 98, 255),
                ParticleStream       = true,
                InitialParticleBurst = 30,
                MaxAge               = 5000,
                Speed                = 300,
                Penetrate            = true
            });

            ProjectileBase.AddType(new ProjectileType()
            {
                Id                     = ProjectileId.MiniFlame_2,
                BaseDamage             = 5,
                ParticleColor          = Color.FromNonPremultiplied(255, 80, 98, 255),
                ParticleStream         = true,
                MaxAge                 = 5000,
                Speed                  = 650,
                FireSound              = Sound.MiniFlame,
                OnProjectileHitTerrain = (projectile, material) => {
                    projectile.Map.RenderBrush(projectile.Position, Brush.Size3, Material.Fire, 0);
                },
                OnProjectileHit = (projectile, target, amount) => {
                    projectile.Map.RenderBrush(projectile.Position, Brush.Size3, Material.Fire, 0);
                }
            });
        }
Ejemplo n.º 6
0
        public SpellDescWindow(Guid spellId, int x, int y, bool centerHorizontally = false)
        {
            var spell = SpellBase.Get(spellId);

            if (spell == null)
            {
                return;
            }

            mDescWindow = new ImagePanel(Interface.GameUi.GameCanvas, "SpellDescWindowExpanded");

            var icon = new ImagePanel(mDescWindow, "SpellIcon");

            var spellName = new Label(mDescWindow, "SpellName");

            spellName.Text = spell.Name;

            var spellType = new Label(mDescWindow, "SpellType");

            spellType.Text = Strings.SpellDesc.spelltypes[(int)spell.SpellType];

            var spellDesc     = new RichLabel(mDescWindow, "SpellDesc");
            var spellStats    = new RichLabel(mDescWindow, "SpellStats");
            var spellDescText = new Label(mDescWindow, "SpellDescText");

            spellDescText.Font = spellDescText.Parent.Skin.DefaultFont;
            var spellStatsText = new Label(mDescWindow, "SpellStatsText");

            spellStatsText.Font     = spellStatsText.Parent.Skin.DefaultFont;
            spellDescText.IsHidden  = true;
            spellStatsText.IsHidden = true;

            //Load this up now so we know what color to make the text when filling out the desc
            mDescWindow.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
            if (spell.Description.Length > 0)
            {
                spellDesc.AddText(
                    Strings.SpellDesc.desc.ToString(spell.Description), spellDesc.RenderColor,
                    spellDescText.CurAlignments.Count > 0 ? spellDescText.CurAlignments[0] : Alignments.Left,
                    spellDescText.Font
                    );

                spellDesc.AddLineBreak();
                spellDesc.AddLineBreak();
            }

            if (spell.SpellType == (int)SpellTypes.CombatSpell)
            {
                if (spell.Combat.TargetType == SpellTargetTypes.Projectile)
                {
                    var proj = ProjectileBase.Get(spell.Combat.ProjectileId);
                    spellType.Text = Strings.SpellDesc.targettypes[(int)spell.Combat.TargetType]
                                     .ToString(proj?.Range ?? 0, spell.Combat.HitRadius);
                }
                else
                {
                    spellType.Text = Strings.SpellDesc.targettypes[(int)spell.Combat.TargetType]
                                     .ToString(spell.Combat.CastRange, spell.Combat.HitRadius);
                }
            }

            if (spell.SpellType == (int)SpellTypes.CombatSpell &&
                (spell.Combat.TargetType == SpellTargetTypes.AoE ||
                 spell.Combat.TargetType == SpellTargetTypes.Single) &&
                spell.Combat.HitRadius > 0)
            {
                spellStats.AddText(
                    Strings.SpellDesc.radius.ToString(spell.Combat.HitRadius), spellStats.RenderColor,
                    spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left,
                    spellStatsText.Font
                    );

                spellStats.AddLineBreak();
                spellStats.AddLineBreak();
            }

            if (spell.CastDuration > 0)
            {
                var castDuration = (float)spell.CastDuration / 1000f;
                spellStats.AddText(
                    Strings.SpellDesc.casttime.ToString(castDuration), spellStats.RenderColor,
                    spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left,
                    spellStatsText.Font
                    );

                spellStats.AddLineBreak();
                if (spell.CooldownDuration <= 0)
                {
                    spellStats.AddLineBreak();
                }
            }

            if (spell.CooldownDuration > 0)
            {
                var cdr = 1 - Globals.Me.GetCooldownReduction() / 100;
                var cd  = (float)(spell.CooldownDuration * cdr) / 1000f;
                spellStats.AddText(
                    Strings.SpellDesc.cooldowntime.ToString(cd), spellStats.RenderColor,
                    spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left,
                    spellStatsText.Font
                    );

                spellStats.AddLineBreak();
                spellStats.AddLineBreak();
            }

            var requirements = spell.VitalCost[(int)Vitals.Health] > 0 || spell.VitalCost[(int)Vitals.Mana] > 0;

            if (requirements == true)
            {
                spellStats.AddText(
                    Strings.SpellDesc.prereqs, spellStats.RenderColor,
                    spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left,
                    spellStatsText.Font
                    );

                spellStats.AddLineBreak();
                if (spell.VitalCost[(int)Vitals.Health] > 0)
                {
                    spellStats.AddText(
                        Strings.SpellDesc.vitalcosts[(int)Vitals.Health]
                        .ToString(spell.VitalCost[(int)Vitals.Health]), spellStats.RenderColor,
                        spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left,
                        spellStatsText.Font
                        );

                    spellStats.AddLineBreak();
                }

                if (spell.VitalCost[(int)Vitals.Mana] > 0)
                {
                    spellStats.AddText(
                        Strings.SpellDesc.vitalcosts[(int)Vitals.Mana].ToString(spell.VitalCost[(int)Vitals.Mana]),
                        spellStats.RenderColor,
                        spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left,
                        spellStatsText.Font
                        );

                    spellStats.AddLineBreak();
                }

                spellStats.AddLineBreak();
            }

            var stats = "";

            if (spell.SpellType == (int)SpellTypes.CombatSpell)
            {
                stats = Strings.SpellDesc.effects;
                spellStats.AddText(
                    stats, spellStats.RenderColor,
                    spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left,
                    spellStatsText.Font
                    );

                spellStats.AddLineBreak();

                if (spell.Combat.Effect > 0)
                {
                    spellStats.AddText(
                        Strings.SpellDesc.effectlist[(int)spell.Combat.Effect], spellStats.RenderColor,
                        spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left,
                        spellStatsText.Font
                        );

                    spellStats.AddLineBreak();
                }

                for (var i = 0; i < (int)Vitals.VitalCount; i++)
                {
                    var vitalDiff = spell.Combat.VitalDiff?[i] ?? 0;
                    if (vitalDiff == 0)
                    {
                        continue;
                    }

                    var vitalSymbol = vitalDiff < 0 ? Strings.SpellDesc.addsymbol : Strings.SpellDesc.removesymbol;
                    if (spell.Combat.Effect == StatusTypes.Shield)
                    {
                        stats = Strings.SpellDesc.shield.ToString(Math.Abs(vitalDiff));
                    }
                    else
                    {
                        stats = Strings.SpellDesc.vitals[i].ToString(vitalSymbol, Math.Abs(vitalDiff));
                    }

                    spellStats.AddText(
                        stats, spellStats.RenderColor,
                        spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left,
                        spellStatsText.Font
                        );

                    spellStats.AddLineBreak();
                }

                if (spell.Combat.Duration > 0)
                {
                    for (var i = 0; i < (int)Stats.StatCount; i++)
                    {
                        if (spell.Combat.StatDiff[i] != 0)
                        {
                            spellStats.AddText(
                                Strings.SpellDesc.stats[i]
                                .ToString(
                                    (spell.Combat.StatDiff[i] > 0
                                            ? Strings.SpellDesc.addsymbol.ToString()
                                            : Strings.SpellDesc.removesymbol.ToString()) +
                                    Math.Abs(spell.Combat.StatDiff[i])
                                    ), spellStats.RenderColor,
                                spellStatsText.CurAlignments.Count > 0
                                    ? spellStatsText.CurAlignments[0]
                                    : Alignments.Left, spellStatsText.Font
                                );

                            spellStats.AddLineBreak();
                        }
                    }

                    var duration = (float)spell.Combat.Duration / 1000f;
                    spellStats.AddText(
                        Strings.SpellDesc.duration.ToString(duration), spellStats.RenderColor,
                        spellStatsText.CurAlignments.Count > 0 ? spellStatsText.CurAlignments[0] : Alignments.Left,
                        spellStatsText.Font
                        );

                    spellStats.AddLineBreak();
                }
            }

            spellStats.SizeToChildren(false, true);
            if (spellStats.Children.Count == 0)
            {
                mDescWindow.Name    = "SpellDescWindow";
                spellStats.Name     = "";
                spellStatsText.Name = "";
            }

            //Load Again for positioning purposes.
            mDescWindow.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
            spellDescText.IsHidden  = true;
            spellStatsText.IsHidden = true;
            icon.Texture            = Globals.ContentManager.GetTexture(GameContentManager.TextureType.Spell, spell.Icon);
            spellStats.SizeToChildren(false, true);
            if (centerHorizontally)
            {
                mDescWindow.MoveTo(x - mDescWindow.Width / 2, y + mDescWindow.Padding.Top);
            }
            else
            {
                mDescWindow.MoveTo(x - mDescWindow.Width - mDescWindow.Padding.Right, y + mDescWindow.Padding.Top);
            }
        }
Ejemplo n.º 7
0
 private void AssignEditorItem(Guid id)
 {
     mEditorItem = ProjectileBase.Get(id);
     UpdateEditor();
 }
Ejemplo n.º 8
0
        public void InitEditor()
        {
            var selectedId  = Guid.Empty;
            var folderNodes = new Dictionary <string, TreeNode>();

            if (lstProjectiles.SelectedNode != null && lstProjectiles.SelectedNode.Tag != null)
            {
                selectedId = (Guid)lstProjectiles.SelectedNode.Tag;
            }

            lstProjectiles.Nodes.Clear();

            //Collect folders
            var mFolders = new List <string>();

            foreach (var itm in ProjectileBase.Lookup)
            {
                if (!string.IsNullOrEmpty(((ProjectileBase)itm.Value).Folder) &&
                    !mFolders.Contains(((ProjectileBase)itm.Value).Folder))
                {
                    mFolders.Add(((ProjectileBase)itm.Value).Folder);
                    if (!mKnownFolders.Contains(((ProjectileBase)itm.Value).Folder))
                    {
                        mKnownFolders.Add(((ProjectileBase)itm.Value).Folder);
                    }
                }
            }

            mFolders.Sort();
            mKnownFolders.Sort();
            cmbFolder.Items.Clear();
            cmbFolder.Items.Add("");
            cmbFolder.Items.AddRange(mKnownFolders.ToArray());

            lstProjectiles.Sorted = !btnChronological.Checked;

            if (!btnChronological.Checked && !CustomSearch())
            {
                foreach (var folder in mFolders)
                {
                    var node = lstProjectiles.Nodes.Add(folder);
                    node.ImageIndex         = 0;
                    node.SelectedImageIndex = 0;
                    folderNodes.Add(folder, node);
                }
            }

            foreach (var itm in ProjectileBase.ItemPairs)
            {
                var node = new TreeNode(itm.Value);
                node.Tag                = itm.Key;
                node.ImageIndex         = 1;
                node.SelectedImageIndex = 1;

                var folder = ProjectileBase.Get(itm.Key).Folder;
                if (!string.IsNullOrEmpty(folder) && !btnChronological.Checked && !CustomSearch())
                {
                    var folderNode = folderNodes[folder];
                    folderNode.Nodes.Add(node);
                    if (itm.Key == selectedId)
                    {
                        folderNode.Expand();
                    }
                }
                else
                {
                    lstProjectiles.Nodes.Add(node);
                }

                if (CustomSearch())
                {
                    if (!node.Text.ToLower().Contains(txtSearch.Text.ToLower()))
                    {
                        node.Remove();
                    }
                }

                if (itm.Key == selectedId)
                {
                    lstProjectiles.SelectedNode = node;
                }
            }

            var selectedNode = lstProjectiles.SelectedNode;

            if (!btnChronological.Checked)
            {
                lstProjectiles.Sort();
            }

            lstProjectiles.SelectedNode = selectedNode;
            foreach (var node in mExpandedFolders)
            {
                if (folderNodes.ContainsKey(node))
                {
                    folderNodes[node].Expand();
                }
            }
        }