public List <int> BuildReferencedAttributes() { int count = 0; List <ExpressionVariable> variables = m_formula.GetAllVariables(); if (variables != null) { count = variables.Count; } for (int i = 0; i < count; ++i) { ExpressionVariable variable = variables[i]; if (variable.MaxIndex == 1 && variable[0] == ExpressionVariable.VID_LevelTable) { m_is_level_based = true; } else if (variable.MaxIndex >= 2 && variable[variable.MaxIndex - 2] == ExpressionVariable.VID_Attribute || variable.MaxIndex == 1) { int attribute_id = variable[variable.MaxIndex - 1]; if (AttributeSystem.IsAttributeID(attribute_id)) { m_referenced_attributes.Add(attribute_id); } } } return(m_referenced_attributes); }
void InitAttributeData() { AttributeData attribute_data = new AttributeData(); attribute_data.m_attribute_name = "MaxHealth"; attribute_data.m_attribute_id = (int)CRC.Calculate(attribute_data.m_attribute_name); attribute_data.m_formula = "BaseValue"; attribute_data.m_reflection_property = (int)CRC.Calculate("max_health"); attribute_data.m_clamp_property = (int)CRC.Calculate("current_health"); attribute_data.m_clamp_min_value = FixPoint.Zero; AttributeSystem.RegisterAttribute(attribute_data); m_attribute_data[attribute_data.m_attribute_id] = attribute_data; attribute_data = new AttributeData(); attribute_data.m_attribute_name = "测试属性1"; attribute_data.m_attribute_id = (int)CRC.Calculate(attribute_data.m_attribute_name); attribute_data.m_formula = "BaseValue"; AttributeSystem.RegisterAttribute(attribute_data); m_attribute_data[attribute_data.m_attribute_id] = attribute_data; attribute_data = new AttributeData(); attribute_data.m_attribute_name = "TestAttribute2"; attribute_data.m_attribute_id = (int)CRC.Calculate(attribute_data.m_attribute_name); attribute_data.m_formula = "BaseValue + LevelTable.name3"; AttributeSystem.RegisterAttribute(attribute_data); m_attribute_data[attribute_data.m_attribute_id] = attribute_data; attribute_data = new AttributeData(); attribute_data.m_attribute_name = "TestAttribute3"; attribute_data.m_attribute_id = (int)CRC.Calculate(attribute_data.m_attribute_name); attribute_data.m_formula = "BaseValue + TestAttribute1.Value"; AttributeSystem.RegisterAttribute(attribute_data); m_attribute_data[attribute_data.m_attribute_id] = attribute_data; attribute_data = new AttributeData(); attribute_data.m_attribute_name = "TestAttribute14"; attribute_data.m_attribute_id = (int)CRC.Calculate(attribute_data.m_attribute_name); attribute_data.m_formula = "(BaseValue + TestAttribute2.Value) * LevelTable.name1"; AttributeSystem.RegisterAttribute(attribute_data); m_attribute_data[attribute_data.m_attribute_id] = attribute_data; attribute_data = new AttributeData(); attribute_data.m_attribute_name = "TestAttribute5"; attribute_data.m_attribute_id = (int)CRC.Calculate(attribute_data.m_attribute_name); attribute_data.m_formula = "BaseValue + Max(TestAttribute3.Value, Entity.Attribute.TestAttribute4.Value)"; AttributeSystem.RegisterAttribute(attribute_data); m_attribute_data[attribute_data.m_attribute_id] = attribute_data; attribute_data = new AttributeData(); attribute_data.m_attribute_name = "TestAttribute6"; attribute_data.m_attribute_id = (int)CRC.Calculate(attribute_data.m_attribute_name); attribute_data.m_formula = "BaseValue * TestAttribute2.Value * TestAttribute5.Value"; AttributeSystem.RegisterAttribute(attribute_data); m_attribute_data[attribute_data.m_attribute_id] = attribute_data; }