Esempio n. 1
0
 private static void Diemob_Update(DieMobRegion region)
 {
     db.Query("UPDATE DieMobRegions SET AffectFriendlyNPCs=@2, AffectStatueSpawns=@3, Type=@4, ReplaceMobs=@5 WHERE Region=@0 AND WorldID=@1",
              region.TSRegion.Name, Main.worldID, region.AffectFriendlyNPCs, region.AffectStatueSpawns,
              (int)region.Type, JsonConvert.SerializeObject(region.ReplaceMobs));
 }
Esempio n. 2
0
        private static void DieMobCommand(CommandArgs args)
        {
            if (args.Parameters.Count > 0 && args.Parameters[0].ToLower() == "reload")
            {
                if (ReadConfig())
                {
                    args.Player.SendMessage("DieMob config reloaded.", Color.BurlyWood);
                }
                else
                {
                    args.Player.SendErrorMessage("Error reading config. Check log for details.");
                }
                return;
            }
            else if (args.Parameters.Count > 0 && args.Parameters[0].ToLower() == "list")
            {
                for (int r = 0; r < RegionList.Count; r++)
                {
                    var regManReg = TShock.Regions.GetRegionByName(RegionList[r].TSRegion.Name);
                    if (RegionList[r].TSRegion == null || regManReg == null || regManReg.Name == "")
                    {
                        db.Query("DELETE FROM DieMobRegions WHERE Region=@0 AND WorldID=@1", RegionList[r].TSRegion.Name, Main.worldID);
                        RegionList.RemoveAt(r);
                    }
                }

                int pageNumber;

                if (args.Parameters.Count < 2)
                {
                    pageNumber = 1;
                }
                else if (!int.TryParse(args.Parameters[1], out pageNumber))
                {
                    args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}dm list <page number>", (args.Silent ? TShock.Config.CommandSilentSpecifier : TShock.Config.CommandSpecifier));
                }

                if (!PaginationTools.TryParsePageNumber(args.Parameters, 1, args.Player, out pageNumber))
                {
                    return;
                }
                IEnumerable <string> Regions = from region in RegionList
                                               where region.TSRegion != null
                                               select string.Format("{0} @ X: {1}, Y: {2}", region.TSRegion.Name, region.TSRegion.Area.X,
                                                                    region.TSRegion.Area.Y);

                PaginationTools.SendPage(args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(Regions),
                                         new PaginationTools.Settings
                {
                    HeaderFormat = "DieMob Regions ({0}/{1}):",
                    FooterFormat = "Type /dm list {0} for more."
                });
                return;
            }
            else if (args.Parameters.Count > 1 && args.Parameters[0].ToLower() == "info")
            {
                DieMobRegion reg = GetRegionByName(args.Parameters[1]);
                if (reg == null)
                {
                    args.Player.SendMessage(String.Format("Region {0} not found on DieMob list", args.Parameters[1]), Color.Red);
                }
                else
                {
                    args.Player.SendMessage(String.Format("DieMob region: {0}", reg.TSRegion.Name), Color.DarkOrange);
                    args.Player.SendMessage(String.Format("Type: {0}", reg.Type.ToString()), Color.LightSalmon);
                    args.Player.SendMessage(String.Format("Affects friendly NPCs: {0}", reg.AffectFriendlyNPCs ? "True" : "False"), Color.LightSalmon);
                    args.Player.SendMessage(String.Format("Affects statue spawned mobs: {0}", reg.AffectStatueSpawns ? "True" : "False"), Color.LightSalmon);
                    args.Player.SendMessage(String.Format("Replacing {0} mobs. Type '{1}dm replacemobsinfo RegionName [pageNum]' to get a list.", reg.ReplaceMobs.Count, (args.Silent ? TShock.Config.CommandSilentSpecifier : TShock.Config.CommandSpecifier)), Color.LightSalmon);
                }
                return;
            }
            else if (args.Parameters.Count > 1 && (args.Parameters[0].ToLower() == "replacemobsinfo" || args.Parameters[0].ToLower() == "rminfo"))
            {
                DieMobRegion reg = GetRegionByName(args.Parameters[1]);
                if (reg == null)
                {
                    args.Player.SendErrorMessage("Region {0} not found on DieMob list", args.Parameters[1]);
                }
                else
                {
                    int page = 0;
                    if (args.Parameters.Count > 2)
                    {
                        int.TryParse(args.Parameters[2], out page);
                    }
                    if (page <= 0)
                    {
                        page = 1;
                    }
                    int startIndex = (page - 1) * 6;
                    args.Player.SendMessage(String.Format("{0} mob replacements page {1}:", reg.TSRegion.Name, page), Color.LightSalmon);
                    for (int i = startIndex; i < reg.ReplaceMobs.Count; i++)
                    {
                        if (i < startIndex + 6)
                        {
                            int key = reg.ReplaceMobs.Keys.ElementAt(i);
                            args.Player.SendMessage(String.Format("[{0}] From: {1}  To: {2}", i + 1, key, reg.ReplaceMobs[key]), Color.BurlyWood);
                        }
                    }
                }
                return;
            }
            else if (args.Parameters.Count > 0 && args.Parameters[0].ToLower() == "mod")
            {
                if (args.Parameters.Count > 1)
                {
                    DieMobRegion region = GetRegionByName(args.Parameters[1]);
                    if (region == null)
                    {
                        args.Player.SendErrorMessage("Region {0} not found on DieMob list", args.Parameters[1]);
                        return;
                    }
                    if (args.Parameters.Count > 2)
                    {
                        switch (args.Parameters[2].ToLower())
                        {
                        case "type":
                        {
                            if (args.Parameters.Count > 3 && (args.Parameters[3].ToLower() == "kill" || args.Parameters[3].ToLower() == "repel" ||
                                                              args.Parameters[3].ToLower() == "passive"))
                            {
                                if (args.Parameters[3].ToLower() == "repel")
                                {
                                    region.Type = RegionType.Repel;
                                    args.Player.SendMessage(String.Format("Region {0} is now repeling mobs", region.TSRegion.Name), Color.LightSalmon);
                                }
                                else if (args.Parameters[3].ToLower() == "passive")
                                {
                                    region.Type = RegionType.Passive;
                                    args.Player.SendMessage(String.Format("Region {0} is now passive", region.TSRegion.Name), Color.LightSalmon);
                                }
                                else
                                {
                                    region.Type = RegionType.Kill;
                                    args.Player.SendMessage(String.Format("Region {0} is now killing mobs", region.TSRegion.Name), Color.LightSalmon);
                                }
                                Diemob_Update(region);
                                return;
                            }
                            break;
                        }

                        case "affectfriendlynpcs":
                        {
                            if (args.Parameters.Count > 3 && (args.Parameters[3].ToLower() == "true" || args.Parameters[3].ToLower() == "false"))
                            {
                                if (args.Parameters[3].ToLower() == "true")
                                {
                                    region.AffectFriendlyNPCs = true;
                                    args.Player.SendMessage(String.Format("Region {0} is now affecting friendly NPCs", region.TSRegion.Name),
                                                            Color.LightSalmon);
                                }
                                else
                                {
                                    region.AffectFriendlyNPCs = false;
                                    args.Player.SendMessage(String.Format("Region {0} is no longer affecting friendly NPCs", region.TSRegion.Name),
                                                            Color.LightSalmon);
                                }
                                Diemob_Update(region);
                                return;
                            }
                            break;
                        }

                        case "affectstatuespawns":
                        {
                            if (args.Parameters.Count > 3 && (args.Parameters[3].ToLower() == "true" || args.Parameters[3].ToLower() == "false"))
                            {
                                if (args.Parameters[3].ToLower() == "true")
                                {
                                    region.AffectStatueSpawns = true;
                                    args.Player.SendMessage(String.Format("Region {0} is now affecting statue spawned mobs", region.TSRegion.Name),
                                                            Color.LightSalmon);
                                }
                                else
                                {
                                    region.AffectStatueSpawns = false;
                                    args.Player.SendMessage(String.Format("Region {0} is no longer affecting statue spawned mobs", region.TSRegion.Name),
                                                            Color.LightSalmon);
                                }
                                Diemob_Update(region);
                                return;
                            }
                            break;
                        }

                        case "replacemobs":
                        {
                            if (args.Parameters.Count > 4 && (args.Parameters[3].ToLower() == "add" || args.Parameters[3].ToLower() == "del"))
                            {
                                int fromMobID, toMobID;
                                if (args.Parameters[3].ToLower() == "add" && args.Parameters.Count > 5 && int.TryParse(args.Parameters[4], out fromMobID) &&
                                    int.TryParse(args.Parameters[5], out toMobID))
                                {
                                    if (region.ReplaceMobs.ContainsKey(fromMobID))
                                    {
                                        args.Player.SendMessage(String.Format("Region {0} already is already converting mobID {1} to mob {2}",
                                                                              region.TSRegion.Name, fromMobID, region.ReplaceMobs[fromMobID]), Color.LightSalmon);
                                        return;
                                    }
                                    region.ReplaceMobs.Add(fromMobID, toMobID);
                                    args.Player.SendMessage(String.Format("Region {0} is now converting mobs with id {1} to mobs {2}", region.TSRegion.Name,
                                                                          fromMobID, toMobID), Color.LightSalmon);
                                    Diemob_Update(region);
                                    return;
                                }
                                else if (args.Parameters[3].ToLower() == "del" && int.TryParse(args.Parameters[4], out fromMobID))
                                {
                                    if (region.ReplaceMobs.ContainsKey(fromMobID))
                                    {
                                        region.ReplaceMobs.Remove(fromMobID);
                                    }
                                    args.Player.SendMessage(String.Format("Region {0} is no longer converting mobs with id {1}", region.TSRegion.Name, fromMobID),
                                                            Color.LightSalmon);
                                    Diemob_Update(region);
                                    return;
                                }
                            }
                            break;
                        }
                        }
                    }
                }
                args.Player.SendMessage("{0}dm mod RegionName option arguments".SFormat(args.Silent ? TShock.Config.CommandSilentSpecifier : TShock.Config.CommandSpecifier), Color.DarkOrange);
                args.Player.SendMessage("Options:", Color.LightSalmon);
                args.Player.SendMessage("type - args: kill [default] / repel / passive", Color.LightSalmon);
                args.Player.SendMessage("affectfriendlynpcs - args: true / false [default]", Color.LightSalmon);
                args.Player.SendMessage("affectstatuespawns - args: true / false [default]", Color.LightSalmon);
                args.Player.SendMessage("replacemobs - args: add fromMobID toMobID / del fromMobID", Color.LightSalmon);
                return;
            }
            else if (args.Parameters.Count > 1)
            {
                var region = TShock.Regions.GetRegionByName(args.Parameters[1]);
                if (region != null && region.Name != "")
                {
                    if (args.Parameters[0].ToLower() == "add")
                    {
                        if (RegionList.Select(r => r.TSRegion).Contains(region))
                        {
                            args.Player.SendMessage(String.Format("Region '{0}' is already on the DieMob list", region.Name), Color.LightSalmon);
                            return;
                        }
                        if (!DieMob_Add(region.Name))
                        {
                            args.Player.SendErrorMessage("Error adding '{0}' to DieMob list. Check log for details", region.Name);
                            return;
                        }
                        RegionList.Add(new DieMobRegion(region));
                        args.Player.SendMessage(String.Format("Region '{0}' added to DieMob list", region.Name), Color.BurlyWood);
                        return;
                    }
                    else if (args.Parameters[0].ToLower() == "del")
                    {
                        if (!RegionList.Exists(r => r.TSRegion.Name == region.Name))
                        {
                            args.Player.SendMessage(String.Format("Region '{0}' is not on the DieMob list", region.Name), Color.LightSalmon);
                            return;
                        }
                        DieMob_Delete(region.Name);
                        args.Player.SendMessage(String.Format("Region '{0}' deleted from DieMob list", region.Name), Color.BurlyWood);
                        return;
                    }
                    return;
                }
                else
                {
                    args.Player.SendErrorMessage($"Region '{args.Parameters[1]}' not found.");
                    return;
                }
            }
            args.Player.SendMessage("Syntax: {0}diemob [add | del] RegionName - Creates / Deletes DieMob region based on pre-existing region".SFormat(args.Silent ? TShock.Config.CommandSilentSpecifier : TShock.Config.CommandSpecifier), Color.LightSalmon);
            args.Player.SendMessage("Syntax: {0}diemob list [page number] - Lists DieMob regions".SFormat(args.Silent ? TShock.Config.CommandSilentSpecifier : TShock.Config.CommandSpecifier), Color.LightSalmon);
            args.Player.SendMessage("Syntax: {0}diemob reload - Reloads config.json file".SFormat(args.Silent ? TShock.Config.CommandSilentSpecifier : TShock.Config.CommandSpecifier), Color.LightSalmon);
            args.Player.SendMessage("Syntax: {0}diemob mod RegionName - Modifies a DieMob region".SFormat(args.Silent ? TShock.Config.CommandSilentSpecifier : TShock.Config.CommandSpecifier), Color.LightSalmon);
            args.Player.SendMessage("Syntax: {0}diemob info RegionName - Displays info for a DieMob region".SFormat(args.Silent ? TShock.Config.CommandSilentSpecifier : TShock.Config.CommandSpecifier), Color.LightSalmon);
        }
Esempio n. 3
0
 private static void Diemob_Update(DieMobRegion region)
 {
     db.Query("UPDATE DieMobRegions SET AffectFriendlyNPCs=@2, AffectStatueSpawns=@3, Type=@4, ReplaceMobs=@5 WHERE Region=@0 AND WorldID=@1",
         region.TSRegion.Name, Main.worldID, region.AffectFriendlyNPCs, region.AffectStatueSpawns,
         (int)region.Type, JsonConvert.SerializeObject(region.ReplaceMobs));
 }
Esempio n. 4
0
 private void OnUpdate(EventArgs e)
 {
     if ((DateTime.UtcNow - lastUpdate).TotalMilliseconds >= config.UpdateInterval)
     {
         lastUpdate = DateTime.UtcNow;
         if (!initialized && Main.worldID > 0)
         {
             initialized = true;
             OnWorldLoad();
         }
         try
         {
             for (int r = 0; r < RegionList.Count; r++)
             {
                 Region reg = TShock.Regions.GetRegionByName(RegionList[r].TSRegion.Name);
                 if (reg == null)
                 {
                     db.Query("DELETE FROM DieMobRegions WHERE Region=@0 AND WorldID=@1", RegionList[r].TSRegion.Name, Main.worldID);
                     RegionList.RemoveAt(r);
                     continue;
                 }
                 DieMobRegion Region = RegionList[r];
                 Region.TSRegion = reg;
                 for (int i = 0; i < Main.npc.Length; i++)
                 {
                     if (Main.npc[i].active)
                     {
                         NPC npc = Main.npc[i];
                         if ((npc.friendly && Region.AffectFriendlyNPCs) || (!npc.friendly &&
                                                                             (npc.value > 0 || Region.AffectStatueSpawns || config.MobsWith0ValueButNotStatueSpawn.Contains(npc.netID))))
                         {
                             if (Region.TSRegion.InArea((int)(Main.npc[i].position.X / 16), (int)(Main.npc[i].position.Y / 16)))
                             {
                                 if (Region.ReplaceMobs.ContainsKey(npc.netID))
                                 {
                                     npc.SetDefaults(Region.ReplaceMobs[npc.netID]);
                                     NetMessage.SendData((int)PacketTypes.NpcUpdate, -1, -1, "", i);
                                 }
                                 else if (Region.Type == RegionType.Repel)
                                 {
                                     Rectangle area = Region.TSRegion.Area;
                                     int       yDir = -10;
                                     if (area.Bottom - (int)(npc.position.Y / 16) < area.Height / 2)
                                     {
                                         yDir = 10;
                                     }
                                     int xDir = -10;
                                     if (area.Right - (int)(npc.position.X / 16) < area.Width / 2)
                                     {
                                         xDir = 10;
                                     }
                                     npc.velocity = new Vector2(xDir * config.RepelPowerModifier, yDir * config.RepelPowerModifier);
                                     NetMessage.SendData((int)PacketTypes.NpcUpdate, -1, -1, "", i);
                                 }
                                 else if (Region.Type == RegionType.Kill)
                                 {
                                     Main.npc[i].netDefaults(0);
                                     Main.npc[i].active = false;
                                     TSPlayer.Server.StrikeNPC(i, 99999, 90f, 1);
                                 }
                             }
                         }
                     }
                 }
             }
         }
         catch (Exception ex)
         {
             TShock.Log.ConsoleError(ex.Message);
         }
     }
 }
Esempio n. 5
0
 private void OnUpdate(EventArgs e)
 {
     if ((DateTime.UtcNow - lastUpdate).TotalMilliseconds >= Config.UpdateInterval)
     {
         lastUpdate = DateTime.UtcNow;
         if (!initialized && Main.worldID > 0)
         {
             initialized = true;
             OnWorldLoad();
         }
         try
         {
             for (int r = 0; r < Database.DieMobRegions.Count; r++)
             {
                 Region reg = TShock.Regions.GetRegionByName(Database.DieMobRegions[r].TSRegion.Name);
                 if (reg == null)
                 {
                     Database.DieMob_Delete(Database.DieMobRegions[r].TSRegion.Name);
                     continue;
                 }
                 DieMobRegion Region = Database.DieMobRegions[r];
                 Region.TSRegion = reg;
                 for (int i = 0; i < Main.npc.Length; i++)
                 {
                     if (Main.npc[i].active)
                     {
                         NPC npc = Main.npc[i];
                         if ((npc.friendly && Region.AffectFriendlyNPCs && npc.netID != 488) ||
                             (!npc.friendly && npc.SpawnedFromStatue && Region.AffectStatueSpawns && npc.netID != 488 && npc.catchItem == 0) ||
                             (!npc.friendly && !npc.SpawnedFromStatue && npc.netID != 488 && npc.catchItem == 0))
                         {
                             if (Region.TSRegion.InArea((int)(Main.npc[i].position.X / 16), (int)(Main.npc[i].position.Y / 16)))
                             {
                                 if (Region.ReplaceMobs.ContainsKey(npc.netID))
                                 {
                                     npc.SetDefaults(Region.ReplaceMobs[npc.netID]);
                                     NetMessage.SendData((int)PacketTypes.NpcUpdate, -1, -1, NetworkText.Empty, i);
                                 }
                                 else if (Region.ReplaceMobs.ContainsKey(-100))
                                 {
                                     npc.SetDefaults(Region.ReplaceMobs[-100]);
                                     NetMessage.SendData((int)PacketTypes.NpcUpdate, -1, -1, NetworkText.Empty, i);
                                 }
                                 else if (Region.Type == RegionType.Repel)
                                 {
                                     Rectangle area = Region.TSRegion.Area;
                                     int       yDir = -10;
                                     if (area.Bottom - (int)(npc.position.Y / 16) < area.Height / 2)
                                     {
                                         yDir = 10;
                                     }
                                     int xDir = -10;
                                     if (area.Right - (int)(npc.position.X / 16) < area.Width / 2)
                                     {
                                         xDir = 10;
                                     }
                                     npc.velocity = new Vector2(xDir * Config.RepelPowerModifier, yDir * Config.RepelPowerModifier);
                                     NetMessage.SendData((int)PacketTypes.NpcUpdate, -1, -1, NetworkText.Empty, i);
                                 }
                                 else if (Region.Type == RegionType.Kill)
                                 {
                                     Main.npc[i] = new NPC();
                                     NetMessage.SendData((int)PacketTypes.NpcUpdate, -1, -1, NetworkText.Empty, i);
                                 }
                             }
                         }
                     }
                 }
             }
         }
         catch (Exception ex)
         {
             TShock.Log.ConsoleError(ex.ToString());
         }
     }
 }