public void trail(object sender, EventArgs e) { if (on) { Farmer f = Game1.player; Monster monster = new Duggy(f.position); NPC npc = Game1.getCharacterFromName("Pierre"); npc.showTextAboveHead("Test"); Game1.currentLocation.characters.Add(monster); monster.deathAnimation(); Game1.currentLocation.characters.Remove(monster); } }
/// <summary> /// Clones the given monster and puts it on the same place as the original /// </summary> /// <param name="dungeon"></param> /// <param name="monster"></param> private void CloneVolcanoDungeonMonster(VolcanoDungeon dungeon, Monster monster) { Monster clone = null; var originalPosition = monster.Position; if (monster is Duggy) { clone = new Duggy(originalPosition, magmaDuggy: true); } else if (monster is RockCrab) { clone = new RockCrab(originalPosition, ModEntry.VolcanoRockCrabName); } else if (monster is Bat bat) { var batName = bat.Name; if (ModEntry.VolcanoBatNameToMineLevel.ContainsKey(batName)) { clone = new Bat(originalPosition, ModEntry.VolcanoBatNameToMineLevel[batName]); } } else if (monster is LavaLurk) { clone = new LavaLurk(originalPosition); } else if (monster is HotHead) { clone = new HotHead(originalPosition); } else if (monster is GreenSlime) { var greenSlime = new GreenSlime(originalPosition, 0); greenSlime.makeTigerSlime(); clone = greenSlime; } else if (monster is Spiker spike) { return; } if (clone == null) { this.Monitor.Log($"Cloning of monster \"{monster.Name}\" is not supported.", LogLevel.Warn); } else { dungeon.addCharacter(clone); } }
private void DuggyBoss(int x, int y) { Duggy duggy = new Duggy(new Vector2(x, y)) { Health = (mineLevel == 1) ? 400 : ((mineLevel / 2) * 400), speed = 6, ExperienceGained = 40, DamageToFarmer = (Config.difficulty > 5) ? (int)(mineLevel / 2 * difficulty) : ((mineLevel == 1) ? 12 : ((mineLevel / 2) * 12)), isGlowing = true, glowingTransparency = 0.0f }; duggy.jitteriness.Value = (Double)100.0; Game1.mine.tryToAddMonster((Monster)duggy, x, y); _bossHpEvents.Add((Monster)duggy, new Action(BossLevel10Die)); }
private static bool Duggy_behaviorAtGameTick_Prefix(ref Duggy __instance, GameTime time) { try { if (IsLovedMonster(__instance)) { __instance.Sprite.loop = false; __instance.IsInvisible = true; __instance.Sprite.CurrentFrame = 10; return(false); } return(true); } catch (Exception ex) { Instance.LogFailure(ex, nameof(Duggy_behaviorAtGameTick_Prefix)); return(true); } }
/********* ** Private methods *********/ private void SpawnEntity(string command, string[] args) { //We need a world to spawn monsters in, duh if (Context.IsWorldReady) { // Determine if we have arguments if (args.Length > 0) { //Set defaults NPC entity = null; int xTile = Game1.player.getTileX(); int yTile = Game1.player.getTileY(); int amount = 1; //Ensure provided coordinatees are actually coordinates try { //Determine X tile if (args.Length >= 2) { if (!args[1].Equals("~")) { xTile = int.Parse(args[1]); } } //Determine Y tile if (args.Length >= 3) { if (!args[1].Equals("~")) { yTile = int.Parse(args[2]); } } } catch (Exception) { Monitor.Log("Arguments 1 and 2 must be coordinates or '~' to use the Farmer's coordinates! Make sure you don't add any brackets!"); return; } try { if (args.Length >= 4) { amount = int.Parse(args[3]); if (amount < 1) { throw new Exception(); } } } catch (Exception) { Monitor.Log("Argument 3 must be an amount larger than 0!"); return; } Vector2 pos = new Vector2(xTile, yTile); for (int i = 0; i < amount; i++) { // Determine the monster to spawn switch (args[0]) { case "greenSlime": entity = new GreenSlime(pos, 0); break; case "blueSlime": entity = new GreenSlime(pos, 40); break; case "redSlime": entity = new GreenSlime(pos, 80); break; case "purpleSlime": entity = new GreenSlime(pos, 121); break; case "yellowSlime": entity = new GreenSlime(pos, new Color(255, 255, 50)); break; case "blackSlime": Random r = new Random(); entity = new GreenSlime(pos, new Color(40 + r.Next(10), 40 + r.Next(10), 40 + r.Next(10))); break; case "bat": entity = new Bat(pos); break; //minelevel: 0 - 40 - 80 - 171 -> type case "frostBat": entity = new Bat(pos, 40); break; case "lavaBat": entity = new Bat(pos, 80); break; case "iridiumBat": entity = new Bat(pos, 171); break; case "bug": entity = new Bug(pos, 0); break; //available areatypes: 121 -> armored case "armoredBug": entity = new Bug(pos, 121); break; case "fly": entity = new Fly(pos); break; //hard -> mutant case "mutantFly": entity = new Fly(pos, true); break; case "ghost": entity = new Ghost(pos); break; //name -> carbon ghost case "carbonGhost": entity = new Ghost(pos, "Carbon Ghost"); break; case "grub": entity = new Grub(pos); break; //hard -> mutant case "mutantGrub": entity = new Grub(pos, true); break; case "rockCrab": entity = new RockCrab(pos); break; //name -> iridium crab case "lavaCrab": entity = new LavaCrab(pos); break; case "iridiumCrab": entity = new RockCrab(pos, "Iridium Crab"); break; case "metalHead": entity = new MetalHead(pos, 80); break; //mineareas: 0, 40, 80 - seems to only spawn at 80+ case "rockGolem": entity = new RockGolem(pos); break; //mineareas: 0, 40, 80 - changes health and damage; difficultymod: case "wildernessGolem": entity = new RockGolem(pos, 5); break; case "mummy": entity = new Mummy(pos); break; case "serpent": entity = new Serpent(pos); break; case "shadowBrute": entity = new ShadowBrute(pos); break; case "shadowShaman": entity = new ShadowShaman(pos); break; case "skeleton": entity = new Skeleton(pos); break; case "squidKid": entity = new SquidKid(pos); break; case "duggy": entity = new Duggy(pos); break; case "dustSpirit": entity = new DustSpirit(pos); break; } if (entity != null) { entity.currentLocation = Game1.currentLocation; entity.setTileLocation(new Vector2(xTile, yTile)); Game1.currentLocation.addCharacter(entity); } else { Monitor.Log($"{args[0]} not found! Type monster_list to view a list of available monsters to spawn!"); return; } } Monitor.Log($"{amount} {entity.Name} added at {entity.currentLocation.Name} {entity.getTileX()},{entity.getTileY()}", LogLevel.Info); } else { Monitor.Log("Usage: monster_spawn <name> [posX] [posY] [amount]\n\nUses Farmer's coordinates if none or '~' was given."); } } else { Monitor.Log("Load a save first!"); } }