예제 #1
0
 public WeaponInfo()
 {
     foreach (StatusEffectData data in StatusEffectData)
     {
         StatusEffects.Add(BattleManager.Instance.GenerateStatusEffect(data));
     }
 }
예제 #2
0
 public override void AssignStatusEffectsOnCombatStart()
 {
     StatusEffects.Add(new BlackBishopStatusEffect()
     {
         Stacks = 2
     });
 }
예제 #3
0
        public MonsterStatusEffect UpdateAndGetStatusEffect(ulong address, int index, float maxBuildup, float currentBuildup, float maxDuration, float currentDuration, int timesActivatedCount)
        {
            MonsterStatusEffect statusEffect = StatusEffects.SingleOrDefault(collectionStatusEffect => collectionStatusEffect.Index == index); // TODO: check address???

            if (statusEffect != null)
            {
                //statusEffect.Address = Address;
                statusEffect.Duration.Max        = maxDuration;
                statusEffect.Duration.Current    = currentDuration;
                statusEffect.Buildup.Max         = maxBuildup;
                statusEffect.Buildup.Current     = currentBuildup;
                statusEffect.TimesActivatedCount = timesActivatedCount;
            }
            else
            {
                statusEffect          = new MonsterStatusEffect(this, address, index, maxBuildup, currentBuildup, maxDuration, currentDuration, timesActivatedCount);
                statusEffect.Changed += PartOrStatusEffect_Changed;

                StatusEffects.Add(statusEffect);
            }

            statusEffect.NotifyPropertyChanged(nameof(MonsterStatusEffect.IsVisible));

            return(statusEffect);
        }
 public override void AssignStatusEffectsOnCombatStart()
 {
     StatusEffects.Add(new AppalledStatusEffect
     {
         Stacks = 1
     });
 }
예제 #5
0
    public void ServerAdd(StatusEffect effect, Health inflicter)
    {
        effect.Inflicter = inflicter;

        if (effect.IsInstant)
        {
            effect.OnList = this;
            effect.OnPickup();
            effect.OnDrop();
            RpcInstantStatusEffect(effect);
            return;
        }

        // Iterate over each effect to see if an effect of the same type is already in the list.
        for (int i = 0; i < StatusEffects.Count; i++)
        {
            if (StatusEffects[i].GetType() == effect.GetType())
            {
                StatusEffects[i].OnEffectAlreadyInList(effect);
                RpcOnEffectAlreadyInList(i, effect);
                return;
            }
        }

        StatusEffects.Add(effect);
        coroutineForEffect.Add(effect, new ExtendedCoroutine(this, DoTick(effect), null, true));
    }
예제 #6
0
 public void LoadStatusEffects()
 {
     foreach (StatusEffectData data in StatusEffectData)
     {
         StatusEffects.Add(BattleManager.Instance.GenerateStatusEffect(data));
     }
 }
예제 #7
0
 public void ApplyStatusEffect(DD4EStatusEffect newStatusEffect)
 {
     // Extend the duration of Status Effect with similar effect
     if (StatusEffects.Exists(s => s.IsSameEffect(newStatusEffect)))
     {
         var newDamageEffect = (newStatusEffect as DD4EDamageModifier);
         if (newDamageEffect != null)
         {
             var index = StatusEffects.IndexOf(StatusEffects.Find(s => s.IsSameEffect(newStatusEffect)));
             if (newDamageEffect.DamageAmount > (StatusEffects[index] as DD4EDamageModifier).DamageAmount)
             {
                 StatusEffects[index] = newStatusEffect;
             }
         }
         else
         {
             var index = StatusEffects.IndexOf(StatusEffects.Find(s => s.IsSameEffect(newStatusEffect)));
             StatusEffects[index].Duration = newStatusEffect.Duration;
         }
     }
     else
     {
         StatusEffects.Add(newStatusEffect);
     }
     OnPropertyChanged("StatusEffects");
 }
예제 #8
0
        public virtual bool UseItem(string itemName)
        {
            var foundItem = Items.FirstOrDefault(i => i.Name.ToLower() == itemName.ToLower());

            if (foundItem != null)
            {
                if (foundItem is Consumable)
                {
                    var foundConsumable = (Consumable)foundItem;
                    Console.WriteLine($"{Name} used the {foundConsumable.Name}.");
                    foreach (var statusEffect in foundConsumable.StatusEffects)
                    {
                        StatusEffects.Add(statusEffect);
                        ApplyStatusEffect(statusEffect);
                    }
                    Items.Remove(foundItem);
                    return(true);
                }
                else
                {
                    Console.WriteLine($"{foundItem.Name} is not consumable.");
                }
            }
            else
            {
                Console.WriteLine($"{Name} does not have currently have {itemName.IndefiniteArticle().ToLower()} {itemName}.");
            }
            return(false);
        }
 public override void AssignStatusEffectsOnCombatStart()
 {
     StatusEffects.Add(new EruditionStatusEffect
     {
         Stacks = 10
     });
 }
예제 #10
0
 internal void AddStatusEffect(ElementalBuff elementalBuff)
 {
     if (StatusEffects.FindAll(delegate(StatusEffect se) { return(se is ElementalBuff); }).Count == 0)
     {
         StatusEffects.Add(elementalBuff);
     }
     //elementalBuff.Draw(this);
 }
예제 #11
0
 public void LoadStatusEffects()
 {
     foreach (StatusEffectData data in StatusEffectData)
     {
         StatusEffects.Add(BattleManager.Instance.GenerateStatusEffect(data));
         Console.WriteLine("Adding status effect:" + data.Name + " to monster:" + Name);
     }
 }
예제 #12
0
 public override void AssignStatusEffectsOnCombatStart()
 {
     StatusEffects.Add(new CowardiceStatusEffect {
         Stacks = 4
     });
     StatusEffects.Add(new FlyingStatusEffect {
         Stacks = 3
     });
 }
    public void AfflictWithStatusEffect(StatusEffectScriptableObject effectSO, int duration)
    {
        if (IsDead)
        {
            return;
        }

        if (IsImmuneToDebuffs())
        {
            if (effectSO.type == StatusEffectScriptableObject.Type.Disable || effectSO.type == StatusEffectScriptableObject.Type.Poison)
            {
                Animator.SetTrigger("Block");
                DamageNumberCanvas canva = GameObject.Instantiate(FindObjectOfType <CombatManager>().damageNumberCanvasPrefab).GetComponent <DamageNumberCanvas>();
                canva.Display("Immune", Color.magenta);
                canva.transform.position = transform.position;
                return;
            }
        }

        StatusEffect.TickTime tickTime = StatusEffect.TickTime.TurnStart;

        if (FindObjectOfType <CombatManager>().turn == CombatManager.TurnSelection.Enemies)
        {
            if (this is PlayerCombatObject)
            {
                tickTime = StatusEffect.TickTime.TurnEnd;
            }
        }

        StatusEffect effect = new StatusEffect(effectSO, tickTime, duration);

        StatusEffects.Add(effect);

        DamageNumberCanvas canv = GameObject.Instantiate(FindObjectOfType <CombatManager>().damageNumberCanvasPrefab).GetComponent <DamageNumberCanvas>();

        canv.Display("Applying: " + effect.data.name, Color.green);
        canv.transform.position = transform.position;

        foreach (var behaviour in effect.data.behaviour)
        {
            if (effect.tickTime == StatusEffect.TickTime.TurnStart)
            {
                OnStartTurn += behaviour.TickPerTurn;
            }
            else
            {
                OnEndTurn += behaviour.TickPerTurn;
            }
            OnAttackedBehaviour += behaviour.OnAttacked;
            behaviour.OnAfflicted(this);
        }

        RefreshUI();
    }
예제 #14
0
 private void ParseFieldEffects(List <byte> fileData)
 {
     for (int i = 0; i < StatusEffect.FIELD_EFFECTS_PER_ROW; i++)
     {
         RegStatusEffect fieldEffect;
         List <byte>     scopedFileData  = fileData.Skip(Size).ToList();
         List <byte>     reducedFileData = scopedFileData.Take(StatusEffect.SIZE).ToList();
         fieldEffect = new RegStatusEffect(reducedFileData);
         StatusEffects.Add(fieldEffect);
     }
 }
예제 #15
0
        public override void AssignStatusEffectsOnCombatStart()
        {
            // todo
            StatusEffects.Add(new ArmoredStatusEffect()
            {
                Stacks = 2
            });

            StatusEffects.Add(new AbominationStatusEffect()
            {
                Stacks = 2
            });
        }
예제 #16
0
 public void AddStatusEffect(StatusEffect statusEffect)
 {
     if (!HasStatusEffect(statusEffect))
     {
         StatusEffects.Add(statusEffect);
         if (BattleEntity != null)
         {
             ParticleEffect particleEffect = new ParticleEffect(BattleEntity.GetCenter(), Color.White, 10, statusEffect.TextureData, 200.0f, 0.0f, 0.5f, 1.0f, false);
             particleEffect.DepthOverride = BattleEntity.Position.Y + 5.0f;
             Scene.AddEntity(particleEffect);
         }
     }
 }
예제 #17
0
 public override void AssignStatusEffectsOnCombatStart()
 {
     StatusEffects.Add(new FairyGoldStatusEffect
     {
         Stacks = 10
     });
     StatusEffects.Add(new RustMonsterStatusEffect
     {
         Stacks = 3
     });
     StatusEffects.Add(new SoulSuckerStatusEffect
     {
         Stacks = 3
     });
 }
예제 #18
0
        public void OnDestruction(string destroyerID)
        {
            var characterID = this.ID;

            if (IsRespawnable)
            {
                MovementForce = 0;
                VelocityX     = 0;
                VelocityY     = 0;
                CurrentCharge = 0;
                IsCharging    = false;
                StatusEffects.Add(new StatusEffect()
                {
                    Type       = Enums.StatusEffectTypes.Dead,
                    Timing     = Enums.StatusEffectTiming.Constant,
                    Expiration = DateTime.Now.AddSeconds(5)
                });
            }
            GameEngine.Current.InputQueue.Enqueue((dbContext) =>
            {
                var destroyer = dbContext.Characters.Find(destroyerID);
                var character = dbContext.Characters.Find(characterID);
                if (!character.IsRespawnable)
                {
                    dbContext.Characters.Remove(character);
                    dbContext.SaveChanges();
                }
                var gainedEnergy            = Math.Round(character.CoreEnergy / destroyer.CoreEnergy) + (Math.Max(0, character.CoreEnergy - destroyer.CoreEnergy));
                destroyer.CoreEnergy       += gainedEnergy;
                destroyer.CurrentEnergy    += gainedEnergy;
                destroyer.CurrentWillpower += gainedEnergy;
            });
            GameEngine.Current.GameEvents.Add(new GameEvent()
            {
                EventName = "SoulDestroyed",
                EventData = new Dictionary <string, dynamic>()
                {
                    { "Color", this.Color },
                    { "CharacterID", this.ID }
                },
                XCoord = this.XCoord + this.Width / 2,
                YCoord = this.YCoord + this.Height / 2,
                ZCoord = this.ZCoord
            });
        }
예제 #19
0
 public Character AddStatusEffect(StatusEffect effect)
 {
     return(WithStatusEffects(StatusEffects.Add(effect)));
 }
 public override void AssignStatusEffectsOnCombatStart()
 {
     StatusEffects.Add(new DisgracedRookStatusEffect());
 }
예제 #21
0
 public override void AssignStatusEffectsOnCombatStart()
 {
     StatusEffects.Add(new RedBishopStatusEffect(), 30);
 }