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