private bool RuleFulFilled(Rule rule) { if (rule != null) //Addition: handling of "selected" item restriction { rule.inputs[0].gameItem = this; if (!this.FulFillsProperties(rule.inputs[0])) { return(false); } if (rule.inputs.Count > 1) { int i = 1; if (!rule.selectedInput) { GameItem selectedItem = Player.Instance.getSelectedItem(); if (selectedItem != null) { if (selectedItem.name == rule.inputs[1].name || selectedItem.dbItem.GetSuperTypes().Contains(rule.inputs[1].name)) { if (selectedItem.FulFillsProperties(rule.inputs[1])) { rule.inputs[1].gameItem = selectedItem; i = 2; } else { return(false); } } } else { return(false); } } List <GameItem> inventory = Player.Instance.GetInventory(); if (inventory.Count == 0 && !rule.HasPlayerInput()) { return(false); } for (; i < rule.inputs.Count; i++) { bool found = false; if (rule.inputs[i].name == "Player") { if (PuzzleManager.Instance.GetPlayer().FulFillsProperties(rule.inputs[i])) { found = true; rule.inputs[i].gameItem = PuzzleManager.Instance.GetPlayer(); } } foreach (GameItem inventoryItem in inventory) { if (inventoryItem.name == rule.inputs[i].name || inventoryItem.dbItem.GetSuperTypes().Contains(rule.inputs[i].name)) { if (inventoryItem.FulFillsProperties(rule.inputs[i])) { found = true; rule.inputs[i].gameItem = inventoryItem; } } } if (!found) { return(false); } } } return(true); } return(false); }