Exemple #1
0
    private void Hurt(Enemy enemy)
    {
        DevMonsterInfo monsterInfo = Content.Instance.GetMonsterByName(enemy.Info.Name);

        if (!Invincible && monsterInfo.DMG != 0)
        {
            // EndAttack();

            SocketClient.Instance.SendTookDMG(enemy.Info);

            Instance.Hurt();

            Instance.PlayEyesEmote("angry");
            Instance.PlayMouthEmote("sad");

            StartCoroutine(DisableSpeedUntilGrounded());

            DevPerkMap knockbackPerk = monsterInfo.GetPerk("knockbackModifier");
            float      Modifier      = (knockbackPerk != null) ? knockbackPerk.Value : 1f;

            if (enemy.transform.position.x < transform.position.x)
            {
                Rigid.AddForce(2.5f * Modifier * transform.right, ForceMode2D.Impulse);
            }
            else
            {
                Rigid.AddForce(2.5f * Modifier * -transform.right, ForceMode2D.Impulse);
            }
        }
    }
Exemple #2
0
    public EnemyInfo(DevMonsterInfo info, string id = "noID")
    {
        this.ID   = id;
        this.Name = info.MonsterName;
        this.Type = info.Type;

        this.CurrentHealth = info.MonsterHP;
        this.MaxHealth     = info.MonsterHP;

        this.isBoss    = info.isBoss;
        this.AggroType = info.AggroType;
    }
Exemple #3
0
    public virtual void Initialize(string instanceID, DevMonsterInfo givenInfo, int currentHP = 0)
    {
        Info = new EnemyInfo(givenInfo, instanceID);
        Info.CurrentHealth = currentHP;
        SpellInCast        = null;

        if (Body != null && initScale == Vector3.zero)
        {
            initScale = Body.localScale;
        }

        RegisterEnemy();

        if (m_AlphaGroup != null)
        {
            m_AlphaGroup.SetAlpha(1f);
        }

        CheckMobAggro();
    }
Exemple #4
0
    private void HandleCommand(string cmd)
    {
        Content currentInfo = (Content)target;

        if (string.IsNullOrEmpty(cmd))
        {
            return;
        }

        if (WordNumber(0) == "item")
        {
            if (WordNumber(1) == "delete")
            {
                int tempIndex;
                if (int.TryParse(WordNumber(2), out tempIndex))
                {
                    Undo.RecordObject(target, "Remove Item");
                    currentInfo.Items.RemoveAt(tempIndex);
                    return;
                }
                else
                {
                    string tempWord = WordNumber(2);
                    for (int i = 0; i < currentInfo.Items.Count; i++)
                    {
                        if (currentInfo.Items[i].Key == tempWord)
                        {
                            Undo.RecordObject(target, "Remove Item");
                            currentInfo.Items.RemoveAt(i);
                            return;
                        }
                    }
                }
            }
            else if (WordNumber(1) == "modifyDrop")
            {
                Undo.RecordObject(target, "Times modifyDrop");
                for (int i = 0; i < currentInfo.Items.Count; i++)
                {
                    if (currentInfo.Items[i].DropChance < 0.5f)
                    {
                        currentInfo.Items[i].DropChance *= float.Parse(WordNumber(2));
                    }
                }
            }
            else if (WordNumber(1) == "balanceDropTargets")
            {
                Undo.RecordObject(target, "Times modifyDrop");
                for (int i = 0; i < currentInfo.Items.Count; i++)
                {
                    if (currentInfo.Items[i].DropChance < 0.5f && currentInfo.Items[i].AppearsAt.MinLvlMobs > 0 && currentInfo.Items[i].AppearsAt.MaxLvlMobs > 0)
                    {
                        currentInfo.Items[i].AppearsAt.MaxLvlMobs = currentInfo.Items[i].Stats.RequiresLVL + 2;
                        currentInfo.Items[i].AppearsAt.MinLvlMobs = currentInfo.Items[i].Stats.RequiresLVL - 2;
                    }
                }
            }
        }
        else if (WordNumber(0) == "monster")
        {
            if (WordNumber(1) == "clone")
            {
                Undo.RecordObject(target, "Clone Monster");
                currentInfo.Monsters.Add(currentInfo.GetMonster(WordNumber(2)).Clone());
                return;
            }
            if (WordNumber(1) == "delete")
            {
                int tempIndex;
                if (int.TryParse(WordNumber(2), out tempIndex))
                {
                    Undo.RecordObject(target, "Remove Monster");
                    currentInfo.Monsters.RemoveAt(tempIndex);
                    return;
                }
                else
                {
                    string tempWord = WordNumber(2);
                    for (int i = 0; i < currentInfo.Monsters.Count; i++)
                    {
                        if (currentInfo.Monsters[i].MonsterKey == tempWord)
                        {
                            Undo.RecordObject(target, "Remove Monster");
                            currentInfo.Monsters.RemoveAt(i);
                            return;
                        }
                    }
                }
            }
            else if (WordNumber(1) == "addLoot")
            {
                string tempWord = WordNumber(2);
                for (int i = 0; i < currentInfo.Monsters.Count; i++)
                {
                    if (currentInfo.Monsters[i].MonsterKey == tempWord)
                    {
                        Undo.RecordObject(target, "Add Monster Loot");
                        currentInfo.Monsters[i].PossibleLoot.Add(new LootInstance(WordNumber(3)));
                        return;
                    }
                }
            }
            else if (WordNumber(1) == "deleteLoot")
            {
                string monster = WordNumber(2);
                string item    = WordNumber(3);

                for (int i = 0; i < currentInfo.Monsters.Count; i++)
                {
                    if (currentInfo.Monsters[i].MonsterKey == monster)
                    {
                        Undo.RecordObject(target, "Delete Monster Loot");
                        for (int l = 0; l < currentInfo.Monsters[i].PossibleLoot.Count; l++)
                        {
                            if (currentInfo.Monsters[i].PossibleLoot[l].ItemKey == item)
                            {
                                currentInfo.Monsters[i].PossibleLoot.RemoveAt(l);
                                return;
                            }
                        }

                        return;
                    }
                }

                return;
            }
            else if (WordNumber(1) == "deleteLoot")
            {
                string tempWord = WordNumber(2);
                for (int i = 0; i < currentInfo.Monsters.Count; i++)
                {
                    if (currentInfo.Monsters[i].MonsterKey == tempWord)
                    {
                        for (int a = 0; a < currentInfo.Monsters[i].PossibleLoot.Count; a++)
                        {
                            if (currentInfo.Monsters[i].PossibleLoot[a].ItemKey == WordNumber(3))
                            {
                                Undo.RecordObject(target, "Remove Monster Loot");
                                currentInfo.Monsters[i].PossibleLoot.RemoveAt(a);
                                return;
                            }
                        }
                    }
                }
            }
            else if (WordNumber(1) == "addLootAll")
            {
                Undo.RecordObject(target, "Add All Monsters Loot");

                string tempWord = WordNumber(2);
                for (int i = 0; i < currentInfo.Monsters.Count; i++)
                {
                    currentInfo.Monsters[i].PossibleLoot.Add(new LootInstance(tempWord));
                }
            }
            else if (WordNumber(1) == "deleteLootAll")
            {
                Undo.RecordObject(target, "Delete All Monsters Loot");

                string tempWord = WordNumber(2);
                for (int i = 0; i < currentInfo.Monsters.Count; i++)
                {
                    for (int a = 0; a < currentInfo.Monsters[i].PossibleLoot.Count; a++)
                    {
                        if (currentInfo.Monsters[i].PossibleLoot[a].ItemKey == tempWord)
                        {
                            currentInfo.Monsters[i].PossibleLoot.RemoveAt(a);
                            break;
                        }
                    }
                }
            }
            else if (WordNumber(1) == "addLootMonsterLevel")
            {
                Undo.RecordObject(target, "Add Monsters Loot in monsters above level");

                string tempWord = WordNumber(2);

                int level;
                if (int.TryParse(WordNumber(3), out level))
                {
                    for (int i = 0; i < currentInfo.Monsters.Count; i++)
                    {
                        if (currentInfo.Monsters[i].MonsterLevel > level)
                        {
                            currentInfo.Monsters[i].PossibleLoot.Add(new LootInstance(tempWord));
                        }
                    }
                }
            }
            else if (WordNumber(1) == "deleteLootMonsterLevel")
            {
                Undo.RecordObject(target, "Delete Monsters Loot in monsters below level");

                string tempWord = WordNumber(2); //item

                int level;
                if (int.TryParse(WordNumber(3), out level))
                {
                    for (int i = 0; i < currentInfo.Monsters.Count; i++)
                    {
                        if (currentInfo.Monsters[i].MonsterLevel < level)
                        {
                            for (int a = 0; a < currentInfo.Monsters[i].PossibleLoot.Count; a++)
                            {
                                if (currentInfo.Monsters[i].PossibleLoot[a].ItemKey == tempWord)
                                {
                                    currentInfo.Monsters[i].PossibleLoot.RemoveAt(a);
                                    break;
                                }
                            }
                        }
                    }
                }
            }
            else if (WordNumber(1) == "ClearLootDuplicates")
            {
                Undo.RecordObject(target, "Clear Monster Loot Duplicates");

                List <LootInstance> toDelete = new List <LootInstance>();
                bool containsFlag;

                for (int t = 0; t < currentInfo.Items.Count; t++)
                {
                    for (int i = 0; i < currentInfo.Monsters.Count; i++)
                    {
                        toDelete.Clear();
                        containsFlag = false;

                        for (int a = 0; a < currentInfo.Monsters[i].PossibleLoot.Count; a++)
                        {
                            if (currentInfo.Monsters[i].PossibleLoot[a].ItemKey == currentInfo.Items[t].Key)
                            {
                                if (!containsFlag)
                                {
                                    containsFlag = true;
                                }
                                else
                                {
                                    toDelete.Add(currentInfo.Monsters[i].PossibleLoot[a]);
                                }
                            }
                        }

                        for (int b = 0; b < toDelete.Count; b++)
                        {
                            currentInfo.Monsters[i].PossibleLoot.Remove(toDelete[b]);
                        }
                    }
                }
            }
            else if (WordNumber(1) == "cloneLoot")
            {
                Undo.RecordObject(target, "Clone loot from monster to monster");

                DevMonsterInfo monsterFrom = currentInfo.GetMonster(WordNumber(2));
                DevMonsterInfo monsterTo   = currentInfo.GetMonster(WordNumber(3));

                foreach (LootInstance loot in monsterFrom.PossibleLoot)
                {
                    monsterTo.PossibleLoot.Add(loot);
                }
            }
        }
        else if (WordNumber(0) == "pa")
        {
            if (WordNumber(1) == "clonePerks")
            {
                Undo.RecordObject(target, "Clone Perks");

                DevAbility paFrom = currentInfo.GetAbility(WordNumber(2));
                DevAbility paTo   = currentInfo.GetAbility(WordNumber(3));

                paTo.InitialPerks.Clear();
                paTo.InitialPerks.InsertRange(0, paFrom.InitialPerks);

                paTo.Perks.Clear();
                paTo.Perks.InsertRange(0, paFrom.Perks);

                return;
            }
        }
        else if (WordNumber(0) == "quest")
        {
            if (WordNumber(1) == "delete")
            {
                int tempIndex;
                if (int.TryParse(WordNumber(2), out tempIndex))
                {
                    Undo.RecordObject(target, "Remove Quest");
                    currentInfo.Quests.RemoveAt(tempIndex);
                    return;
                }
                else
                {
                    string tempWord = WordNumber(2);
                    for (int i = 0; i < currentInfo.Quests.Count; i++)
                    {
                        if (currentInfo.Quests[i].Key == tempWord)
                        {
                            Undo.RecordObject(target, "Remove Quest");
                            currentInfo.Quests.RemoveAt(i);
                            return;
                        }
                    }
                }
            }
        }
        else if (WordNumber(0) == "scenes")
        {
            if (WordNumber(1) == "save")
            {
                SceneSaver.Instance.resaveAllScenes();
            }
        }
    }