protected override void Process() { if (!BCUtils.CheckWorld()) { return; } if (Params.Count != 2) { SendOutput("Invalid arguments"); SendOutput(GetHelp()); return; } var count = ConsoleHelper.ParseParamPartialNameOrId(Params[0], out string _, out var clientInfo); if (count == 1) { if (clientInfo == null) { SendOutput("Unable to locate player."); return; } if (MultiBuffClass.s_classes.ContainsKey(Params[1])) { clientInfo.SendPackage(new NetPackageConsoleCmdClient("buff " + Params[1], true)); SendOutput($"Buff {Params[1]} given to player {clientInfo.playerName}"); } else { SendOutput($"Unable to find buff {Params[1]}"); } } else if (count > 1) { SendOutput($"{count} matches found, please refine your search text."); } else { SendOutput("Player not found."); } }
protected override void Process() { if (!BCUtils.CheckWorld()) { return; } var editMode = GameManager.Instance.GetType().GetField(_editModeField, BindingFlags.NonPublic | BindingFlags.Instance); if (editMode == null) { SendOutput("Error getting editmode field"); return; } if (!(editMode.GetValue(GameManager.Instance) is bool mode)) { SendOutput("Error getting current value of editmode"); return; } if (Params.Count == 1) { switch (Params[0]) { case "toggle": editMode.SetValue(GameManager.Instance, !mode); break; default: if (!bool.TryParse(Params[0], out var flag)) { SendOutput("Unable to parse param as a boolean"); return; } editMode.SetValue(GameManager.Instance, flag); break; } } SendOutput($"Edit Mode set to {GameManager.Instance.IsEditMode()}"); }
protected override void Process() { if (!BCUtils.CheckWorld()) { return; } if (Params.Count != 2) { SendOutput(GetHelp()); return; } var count = ConsoleHelper.ParseParamPartialNameOrId(Params[0], out string _, out var clientInfo); if (count == 1) { if (clientInfo == null) { return; } if (QuestClass.s_Quests.ContainsKey(Params[1].ToLower())) { clientInfo.SendPackage(new NetPackageConsoleCmdClient($"removequest {Params[1]}", true)); SendOutput($"Quest {Params[1]} removed from player {clientInfo.playerName}"); } else { SendOutput($"Unable to find quest {Params[1]}"); } } else if (count > 1) { SendOutput($"{count} matches found, please refine your search text."); } else { SendOutput("Unable to find player."); } }
protected override void Process() { if (!BCUtils.CheckWorld()) { return; } if (Options.ContainsKey("filters")) { Filters(); return; } if (Options.ContainsKey("index")) { Indexed(); return; } if (Params.Count > 1) { SendOutput("Wrong number of arguments"); SendOutput(Config.GetHelp(GetType().Name)); return; } if (Params.Count == 1) { //SPECIFIC PLAYER if (!PlayerStore.GetId(Params[0], out var steamId, "CON")) { return; } var player = new BCMPlayer(PlayerData.PlayerInfo(steamId), Options, GetFilters(BCMGameObject.GOTypes.Players)); if (Options.ContainsKey("min")) { SendJson(new List <List <object> > { player.Data().Select(d => d.Value).ToList() }); } else { SendJson(player.Data()); } } else { //ALL PLAYERS var data = new List <object>(); foreach (var player in PlayerStore.GetAll(Options).Select(s => new BCMPlayer(PlayerData.PlayerInfo(s), Options, GetFilters(BCMGameObject.GOTypes.Players)))) { if (Options.ContainsKey("min")) { data.Add(player.Data().Select(d => d.Value).ToList()); } else { data.Add(player.Data()); } } SendJson(data); } }
protected override void Process() { if (!BCUtils.CheckWorld()) { return; } if (Options.ContainsKey("stop")) { if (_mapVisitor == null) { SendOutput("VisitRegion not running."); return; } if (bcmTask != null) { bcmTask.Output = new { Message = "Visitor was stopped before it completed" }; bcmTask.Command = new BCCmd { Command = commandStr }; bcmTask.Status = BCMTaskStatus.Aborted; bcmTask.Completion = DateTime.UtcNow; bcmTask.Duration = bcmTask.Completion - bcmTask.Timestamp; } _mapVisitor.Stop(); _mapVisitor = null; SendOutput("VisitRegion stopped."); return; } if (_mapVisitor != null && _mapVisitor.IsRunning()) { SendOutput($"VisitRegion already running ({completePercent}%). You can stop it with \"bc-visitregion /stop\"."); return; } if (Params.Count < 2) { SendOutput("VisitRegion isn't running. Provide some co-ords to explore some regions"); return; } if (!int.TryParse(Params[0], out var x)) { SendOutput("The given x1 coordinate is not a valid integer"); return; } if (!int.TryParse(Params[1], out var z)) { SendOutput("The given z1 coordinate is not a valid integer"); return; } if (x > 19 || x < -20) { SendOutput("Note: The given x1 coordinate is beyond the recommended range (-20 to 19)"); } if (z > 19 || z < -20) { SendOutput("Note: The given z1 coordinate is beyond the recommended range (-20 to 19)"); } completePercent = 0; var x2 = x; var z2 = z; switch (Params.Count) { case 2: SendOutput($"Sending a visitor to region {x},{z}"); break; case 3: if (!int.TryParse(Params[2], out var r)) { SendOutput("The given radius is not a valid integer"); } if (r < 0) { SendOutput("The given radius can't be less than 0, the recommended range is 0 to 20"); return; } if (r > 20) { SendOutput("Note: The given radius is beyond the recommended range (0 to 20)"); } x -= r; z -= r; x2 += r; z2 += r; SendOutput($"Sending a visitor to regions between {x},{z} and {x2},{z2}"); break; case 4: if (!int.TryParse(Params[2], out x2)) { SendOutput("The given x2 coordinate is not a valid integer"); } else if (!int.TryParse(Params[3], out z2)) { SendOutput("The given z2 coordinate is not a valid integer"); } if (x2 > 19 || x2 < -20) { SendOutput("Note: The given x2 coordinate is beyond the recommended range (-20 to 19)"); } if (z2 > 19 || z2 < -20) { SendOutput("Note: The given z2 coordinate is beyond the recommended range (-20 to 19)"); } SendOutput($"Sending a visitor to regions between {x},{z} and {x2},{z2}"); break; default: SendOutput("Invalid param count"); SendOutput(GetHelp()); break; } _lastSender = SenderInfo.RemoteClientInfo; commandStr = ""; if (Params.Count > 0 || Options.Count > 0) { commandStr += string.Join(" ", new[] { GetCommands()[0] }.Concat( Options.Count > 0 ? Params.Concat(Options.Select(o => "/" + o.Key + (o.Value != null ? "=" + o.Value : ""))) : Params ).ToArray()); } _mapVisitor = new MapVisitor(new Vector3i(x * 512, 0, z * 512), new Vector3i(x2 * 512 + 511, 0, z2 * 512 + 511)); _hash = _mapVisitor.GetHashCode(); BCTask.AddTask("MapVisitor", _mapVisitor.GetHashCode(), null); bcmTask = BCTask.GetTask("MapVisitor", _hash); if (bcmTask != null) { bcmTask.Command = new BCCmd { Command = commandStr }; bcmTask.Output = new { Count = 0, Total = 0, Perc = 0.00, Time = 0.00 }; } _mapVisitor.OnVisitChunk += ReportStatus; _mapVisitor.OnVisitChunk += GetMapColors; _mapVisitor.OnVisitMapDone += ReportCompletion; _mapVisitor.Start(); }
protected override void Process() { if (!BCUtils.CheckWorld()) { return; } if (Params.Count < 2 && (Params.Count == 0 || Params[0] != "list")) { SendOutput(GetHelp()); return; } switch (Params[0]) { case "list": ListPrefabs(); break; case "create": CreatePrefab(); break; case "clone": ClonePrefab(); break; case "backup": BackupPrefab(); break; case "restore": RestorePrefab(); break; case "delete": DeletePrefab(); break; case "setprop": SetProperty(); break; case "insert"://todo InsertLayers(); break; case "cut"://todo CutLayers(); break; case "add": AddLayers(); break; case "trim": TrimLayers(); break; case "setsize": SetSize(); break; case "swap": SwapBlocks(); break; case "swapmap"://todo SwapMap(); break; case "copylayer"://todo CopyLayer(); break; case "swaplayer"://todo SwapLayer(); break; case "setblock"://todo SetBlock(); break; case "repair"://todo RepairBlocks(); break; case "lock"://todo LockSecureBlocks(); break; case "dim": GetDimensions(); break; case "blockcount": GetBlockCounts(); break; case "blocks": GetBlocks(); break; case "paint": GetPaint(); break; case "type": GetBlocks("type"); break; case "density": GetBlocks("density"); break; case "rotation": GetBlocks("rotation"); break; case "damage": GetBlocks("damage"); break; case "meta": GetBlocks("meta"); break; case "meta2": GetBlocks("meta2"); break; case "meta3": GetBlocks("meta3"); break; case "stats": GetStats(); break; case "xml": GetXml(); break; default: SendOutput($"Unknown sub command {Params[0]}"); break; } }
protected override void Process() { if (!BCUtils.CheckWorld()) { return; } if (Params.Count == 0) { SendOutput(GetHelp()); return; } switch (Params[0]) { case "save": //todo: save current settings to system.xml file break; case "on": if (Heartbeat.IsAlive) { SendOutput("Heart is already beating"); return; } Heartbeat.IsAlive = true; Heartbeat.Start(); SendOutput("Heatbeat started"); break; case "off": Heartbeat.IsAlive = false; SendOutput("Heatbeat stopped"); break; case "bpm": if (Params.Count < 2) { SendOutput($"Current beats per minute is {Heartbeat.Bpm}"); return; } if (!int.TryParse(Params[1], out var bpm)) { SendOutput($"Unable to parse bpm from: {Params[1]}"); return; } if (bpm > 300) { SendOutput($"Woah, {bpm} is a bit high, are you trying to give the server a heartattack!? Max is 300"); return; } if (bpm <= 0) { SendOutput("Check your pulse, you might be dead! Bpm must be greater than 0"); return; } Heartbeat.Bpm = bpm; SendOutput($"Bpm now set to {bpm}"); break; case "state": case "toggle": case "disable": case "enable": { if (Params.Count != 2) { SendOutput("Select an event neuron to view/alter the state, * for all"); SendOutput(string.Join(",", Brain.Synapses.Select(s => s.Name).ToArray())); return; } if (Params[1] == "*") { foreach (var s in Brain.Synapses) { ProcessSynapseState(s); } return; } var synapse = Brain.GetSynapse(Params[1]); ProcessSynapseState(synapse); return; } case "deadisdead": ConfigDeadIsDead(); return; case "pingkicker": ConfigPingKicker(); return; case "tracker": ConfigTracker(); return; case "spawnmutator": ConfigSpawnMutator(); return; case "spawnmanager": ConfigSpawnManager(); return; case "logcache": ConfigLogCache(); return; default: SendOutput($"Unknown neuron name {Params[0]}"); return; } }
//todo: count sub command that returns a count of each object type protected override void Process() { if (!BCUtils.CheckWorld()) { return; } string type; switch (Params.Count) { case 0: //LIST OBJECT TYPES var o = typeof(BCMGameObject.GOTypes); SendJson( o.GetFields() .AsQueryable() .Where(f => f.Name != "Players" && f.Name != "Entities") .ToDictionary(field => field.Name, field => field.GetValue(o).ToString())); return; case 1: //ALL OBJECTS OF A TYPE type = Params[0].ToLower(); if (Options.ContainsKey("filters")) { DisplayFilters(type); return; } if (Options.ContainsKey("index")) { DisplayIndex(type); return; } //if (type == "count") //{ // CountObjects(); // return; //} GetObjects(type, out var objects); ProcessObjects(type, objects, out var data, GetFilters(type)); SendJson(type == BCMGameObject.GOTypes.Rwg ? data[0] : data); return; case 2: //SPECIFIC OBJECT type = Params[0].ToLower(); if (!GetObject(type, out var obj)) { return; } var gameObject = new BCMGameObject(obj, type, Options, GetFilters(type)); SendObject(gameObject); return; default: SendOutput("Wrong number of arguments"); SendOutput(Config.GetHelp(GetType().Name)); return; } }