public override void Process() { if (GameManager.Instance.World == null) { SendOutput("The world isn't loaded"); return; } //if (_options.ContainsKey("filters")) //{ // //todo: filters for derived objects // return; //} //if (_options.ContainsKey("index")) //{ // //todo: index for derived objects // 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(); GetObjects(type, out List <object> objects); ProcessObjects(type, objects, out List <object> data, GetFilters(type)); SendJson(data); return; case 2: //SPECIFIC OBJECT type = Params[0].ToLower(); if (!GetObject(type, out object 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; } }
private static void ProcessObjects(string type, IEnumerable <object> objects, out List <object> data, List <string> filter) { data = new List <object>(); foreach (var obj in objects) { var go = new BCMGameObject(obj, type, Options, filter); if (Options.ContainsKey("min")) { data.Add(go.Data().Select(d => d.Value).ToList()); } else { data.Add(go.Data()); } } }
//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; } }