//public TEnum GetIndexFromPartial<TEnum>(string name) //{ // string langInvar; // Dictionary<string, string[]> aliasList; // object catalog; // if (typeof(TEnum) == typeof(ItemIndex)) // { // aliasList = ItemAlias; // } // else if (typeof(TEnum) == typeof(EquipmentIndex)) // { // aliasList = EquipAlias; // } // else // { // Log.Message("Invalid type"); // throw new Exception("Invalid Type"); // } // foreach (KeyValuePair<string, string[]> dictEnt in aliasList) // { // foreach (string alias in dictEnt.Value) // { // if (alias.ToUpper().Equals(name.ToUpper())) // { // name = dictEnt.Key.ToString(); // } // } // } // TEnum foundObject; // if (Enum.TryParse(name, true, out foundObject) && EquipmentCatalog.IsIndexValid(foundObject)) // { // //catalogmod // Log.MessageInfo("RETURNED EXACT MATCH!"); // return foundObject; // } // return default; //} /// <summary> /// Returns an EquipmentIndex when provided with a partial/invariant. /// </summary> /// <param name="name">Matches in order: (int)Index, Exact Alias, Exact Index, Partial Index, Partial Invariant</param> /// <returns>Returns the EquiptmentIndex if a match is found, or returns EquiptmentIndex.None</returns> public EquipmentIndex GetEquipFromPartial(string name) { string langInvar; foreach (KeyValuePair <string, string[]> dictEnt in EquipAlias) { foreach (string alias in dictEnt.Value) { if (alias.ToUpper().Equals(name.ToUpper())) { name = dictEnt.Key.ToString(); } } } if (Enum.TryParse(name, true, out EquipmentIndex foundEquip) && EquipmentCatalog.IsIndexValid(foundEquip)) { //catalogmod Log.MessageInfo("RETURNED EXACT MATCH!"); return(foundEquip); } StringBuilder s = new StringBuilder(); foreach (var equip in EquipmentCatalog.allEquipment) { langInvar = GetLangInvar("EQUIPMENT_" + equip.ToString().ToUpper() + "_NAME"); s.AppendLine(equip.ToString() + ":" + langInvar + ":" + name.ToUpper()); if (equip.ToString().ToUpper().Contains(name.ToUpper()) || langInvar.ToUpper().Contains(name.ToUpper())) { Log.MessageInfo(s); return(equip); } } Log.MessageInfo(s); return(EquipmentIndex.None); }
private static void ConCmdYeet(ConCommandArgs args) { if (!args.senderBody) { _logger.LogError("ConCmdYeet: called by nonexistent player!"); return; } if (args.Count < 1) { _logger.LogError("ConCmdYeet: not enough arguments! Need at least 1 (item ID), received 0."); return; } bool isEquipment = args.TryGetArgBool(1) ?? false; if (isEquipment ? preventEquipment : preventItems) { return; } int rawInd; string itemSearch = args.TryGetArgString(0); if (itemSearch == null) { _logger.LogError("ConCmdYeet: could not read first argument (item ID)!"); return; } else if (int.TryParse(itemSearch, out rawInd)) { if (isEquipment) { if (!EquipmentCatalog.IsIndexValid((EquipmentIndex)rawInd)) { _logger.LogError("ConCmdYeet: first argument (equipment ID as integer EquipmentIndex) is out of range; no equipment with that ID exists!"); return; } } else { if (!ItemCatalog.IsIndexValid((ItemIndex)rawInd)) { _logger.LogError("ConCmdYeet: first argument (item ID as integer ItemIndex) is out of range; no item with that ID exists!"); return; } } } else { if (isEquipment) { var results = EquipmentCatalog.allEquipment.Where((searchInd) => { var iNameToken = EquipmentCatalog.GetEquipmentDef(searchInd).nameToken; var iName = Language.GetString(iNameToken); return(iName.ToUpper().Contains(itemSearch.ToUpper())); }); if (results.Count() < 1) { _logger.LogError("ConCmdYeet: first argument (equipment ID as string EquipmentName) not found in EquipmentCatalog; no equipment with a name containing that string exists!"); return; } else { if (results.Count() > 1) { _logger.LogWarning("ConCmdYeet: first argument (item ID as string EquipmentName) matched multiple equipments; using first."); } rawInd = (int)results.First(); } } else { var results = ItemCatalog.allItems.Where((searchInd) => { var iNameToken = ItemCatalog.GetItemDef(searchInd).nameToken; var iName = Language.GetString(iNameToken); return(iName.ToUpper().Contains(itemSearch.ToUpper())); }); if (results.Count() < 1) { _logger.LogError("ConCmdYeet: first argument (item ID as string ItemName) not found in ItemCatalog; no item with a name containing that string exists!"); return; } else { if (results.Count() > 1) { _logger.LogWarning("ConCmdYeet: first argument (item ID as string ItemName) matched multiple items; using first."); } rawInd = (int)results.First(); } } } float throwForce = Mathf.Lerp(lowThrowForce, highThrowForce, Mathf.Clamp01(args.TryGetArgFloat(2) ?? 0f)); if (isEquipment) { if (args.senderBody.inventory.GetEquipmentIndex() != (EquipmentIndex)rawInd) { _logger.LogWarning("ConCmdYeet: someone's trying to drop an equipment they don't have"); return; } var edef = EquipmentCatalog.GetEquipmentDef((EquipmentIndex)rawInd); args.senderBody.inventory.SetEquipmentIndex(EquipmentIndex.None); args.senderBody.inventory.RemoveItem((ItemIndex)rawInd); PickupDropletController.CreatePickupDroplet( PickupCatalog.FindPickupIndex((EquipmentIndex)rawInd), args.senderBody.inputBank.aimOrigin, args.senderBody.inputBank.aimDirection * throwForce); } else { int count; if (Compat_TILER2.enabled) { count = Compat_TILER2.GetRealItemCount(args.senderBody.inventory, (ItemIndex)rawInd); } else { count = args.senderBody.inventory.GetItemCount((ItemIndex)rawInd); } if (count < 1) { _logger.LogWarning("ConCmdYeet: someone's trying to drop an item they don't have any of"); return; } var idef = ItemCatalog.GetItemDef((ItemIndex)rawInd); if (idef.hidden || !idef.canRemove || (idef.tier == ItemTier.Lunar && preventLunar) || idef.tier == ItemTier.NoTier) { return; } args.senderBody.inventory.RemoveItem((ItemIndex)rawInd); var obj = GameObject.Instantiate(PickupDropletController.pickupDropletPrefab, args.senderBody.inputBank.aimOrigin, Quaternion.identity); obj.AddComponent <PickupDropletNoCommandFlag>(); obj.GetComponent <PickupDropletController>().NetworkpickupIndex = PickupCatalog.FindPickupIndex((ItemIndex)rawInd); var rbdy = obj.GetComponent <Rigidbody>(); rbdy.velocity = args.senderBody.inputBank.aimDirection * throwForce; rbdy.AddTorque(Random.Range(150f, 120f) * Random.onUnitSphere); NetworkServer.Spawn(obj); } }