using System.Collections.Generic; using System.Globalization; using System.Xml.Linq; public class CVarCompareRebirth : TargetedCompareRequirementBase { protected static bool CompareValues(float _valueA, RequirementBase.OperationTypes _operation, float _valueB) { bool result = false; ; switch (_operation) { case RequirementBase.OperationTypes.Equals: case RequirementBase.OperationTypes.EQ: case RequirementBase.OperationTypes.E: result = _valueA == _valueB; //Log.Out("CVarCompareRebirth-CompareValues _valueA (" + _valueA + ") == _valueB (" + _valueB + "): " + result); return result; case RequirementBase.OperationTypes.NotEquals: case RequirementBase.OperationTypes.NEQ: case RequirementBase.OperationTypes.NE: result = _valueA != _valueB; //Log.Out("CVarCompareRebirth-CompareValues _valueA (" + _valueA + ") != _valueB (" + _valueB + "): " + result); return result; case RequirementBase.OperationTypes.Less: case RequirementBase.OperationTypes.LessThan: case RequirementBase.OperationTypes.LT: result = _valueA < _valueB; //Log.Out("CVarCompareRebirth-CompareValues _valueA (" + _valueA + ") < _valueB (" + _valueB + "): " + result); return result; case RequirementBase.OperationTypes.Greater: case RequirementBase.OperationTypes.GreaterThan: case RequirementBase.OperationTypes.GT: result = _valueA > _valueB; //Log.Out("CVarCompareRebirth-CompareValues _valueA (" + _valueA + ") > _valueB (" + _valueB + "): " + result); return result; case RequirementBase.OperationTypes.LessOrEqual: case RequirementBase.OperationTypes.LessThanOrEqualTo: case RequirementBase.OperationTypes.LTE: result = _valueA <= _valueB; //Log.Out("CVarCompareRebirth-CompareValues _valueA (" + _valueA + ") <= _valueB (" + _valueB + "): " + result); return result; case RequirementBase.OperationTypes.GreaterOrEqual: case RequirementBase.OperationTypes.GreaterThanOrEqualTo: case RequirementBase.OperationTypes.GTE: result = _valueA >= _valueB; //Log.Out("CVarCompareRebirth-CompareValues _valueA (" + _valueA + ") >= _valueB (" + _valueB + "): " + result); return result; default: return result; } } public override bool IsValid(MinEventParams _params) { if (!this.ParamsValid(_params)) { return false; } bool flag = false; //Log.Out("CVarCompareRebirth-IsValid fullValue: " + fullValue); foreach (var requirement in fullValue.Split(',')) { //Log.Out("CVarCompareRebirth-IsValid requirement: " + requirement); float value = 0; if (requirement.StartsWith("@")) { value = _params.Self.Buffs.GetCustomVar(this.refCvarName, 0f); } else { value = float.Parse(requirement); } //Log.Out("CVarCompareRebirth-IsValid value: " + value); //Log.Out("CVarCompareRebirth-IsValid this.target.Buffs.GetCustomVar(cvarName): " + this.target.Buffs.GetCustomVar(cvarName)); bool result = CompareValues(this.target.Buffs.GetCustomVar(cvarName), this.operation, value); //Log.Out("CVarCompareRebirth-IsValid result: " + result); flag = flag || result; } if (this.invert) { return !flag; } return flag; } public override void GetInfoStrings(ref List list) { list.Add(string.Format("cvar.{0} {1} {2}", this.cvarName, this.operation.ToStringCached(), this.value.ToCultureInvariantString())); } public override bool ParseXAttribute(XAttribute _attribute) { string localName = _attribute.Name.LocalName; if (localName == "operation") { this.operation = EnumUtils.Parse(_attribute.Value, true); return true; } else if (localName == "value") { if (_attribute.Value.StartsWith("@")) { this.useCVar = true; this.refCvarName = _attribute.Value.Substring(1); } else { this.value = StringParsers.ParseFloat(_attribute.Value, 0, -1, NumberStyles.Any); } fullValue = _attribute.Value; return true; } else if (localName == "invert") { this.invert = StringParsers.ParseBool(_attribute.Value, 0, -1, true); return true; } else if (localName == "target") { this.targetType = EnumUtils.Parse(_attribute.Value, true); return true; } else if (localName == "cvar") { cvarName = _attribute.Value; cvarNameHash = cvarName.GetHashCode(); return true; } else { return false; } } protected string cvarName; protected int cvarNameHash; protected string fullValue; }