public void setFocus(NWN2WaypointTemplate wp) { if (wp == null) { Text = "ACR Waypoint Editor"; propBasic.SelectedObject = null; ACRSpawnWP.SetSelection(null); propBasic.Refresh(); propSpawn.Refresh(); } // Update main property sheet. if (wp.GetType() == typeof(NWN2WaypointBlueprint)) { Text = "ACR Waypoint Editor: " + ((NWN2WaypointBlueprint)wp).ResourceName.Value; propBasic.SelectedObject = (NWN2WaypointBlueprint)wp; } else if (wp.GetType() == typeof(NWN2WaypointInstance)) { Text = "ACR Creature Editor: " + ((NWN2WaypointInstance)wp).Template.ResRef.Value + " (instance)"; propBasic.SelectedObject = (NWN2WaypointInstance)wp; } else { propBasic.SelectedObject = wp; } // Update ACR property sheet. ACRSpawnWP.SetSelection(wp); ACRQuestWP.SetSelection(wp); propBasic.Refresh(); propSpawn.Refresh(); propQuest.Refresh(); }
public void SetSelection(NWN2WaypointTemplate wp) { waypoint = wp; }
/// <summary> /// Determines if a given variable on an object matches another. /// </summary> private bool GetAreVariablesEqual(NWN2WaypointTemplate waypoint, string variable1, string variable2) { if (waypoint == null) return true; if (waypoint.Variables.GetVariable(variable1) == null && waypoint.Variables.GetVariable(variable2) == null) return true; if (waypoint.Variables.GetVariable(variable1) == null || waypoint.Variables.GetVariable(variable2) == null) return false; if (waypoint.Variables.GetVariable(variable1).VariableType != waypoint.Variables.GetVariable(variable2).VariableType) return false; switch (waypoint.Variables.GetVariable(variable1).VariableType) { case NWN2ScriptVariableType.Float: return (waypoint.Variables.GetVariable(variable1).ValueFloat == waypoint.Variables.GetVariable(variable2).ValueFloat); case NWN2ScriptVariableType.Int: return (waypoint.Variables.GetVariable(variable1).ValueInt == waypoint.Variables.GetVariable(variable2).ValueInt); case NWN2ScriptVariableType.Location: return (waypoint.Variables.GetVariable(variable1).ValueLocation == waypoint.Variables.GetVariable(variable2).ValueLocation); case NWN2ScriptVariableType.String: return (waypoint.Variables.GetVariable(variable1).ValueString == waypoint.Variables.GetVariable(variable2).ValueString); } return false; }
private void ValidateVariableBounds(string reference, NWN2WaypointTemplate waypoint, string variable, float min, float max) { if (waypoint == null) return; if (waypoint.Variables.GetVariable(variable) == null) return; if (waypoint.Variables.GetVariable(variable).VariableType != NWN2ScriptVariableType.Float) return; if (waypoint.Variables.GetVariable(variable).ValueFloat < min || waypoint.Variables.GetVariable(variable).ValueFloat > max) { log.WriteLine("ERROR: Waypoint blueprint \"{0}\" has variable \"{1}\" of value {2} outside of bounds [{3},{4}].", reference, variable, waypoint.Variables.GetVariable(variable).ValueFloat, min, max); } }
/// <summary> /// Verifies that a given variable on an object is of the correct type. /// </summary> /// <param name="enforce">If true, this function will try to fix the variable's type.</param> private void ValidateVariableType(string reference, NWN2WaypointTemplate waypoint, string variable, NWN2ScriptVariableType type, bool enforce = true) { if (waypoint == null) return; if (waypoint.Variables.GetVariable(variable) == null) return; if (waypoint.Variables.GetVariable(variable).VariableType != type) { if (enforce) { waypoint.Variables.GetVariable(variable).VariableType = type; log.WriteLine("FIXED: Waypoint blueprint \"{0}\" has variable \"{1}\" not of type {2}.", reference, variable, type.ToString()); } else { log.WriteLine("ERROR: Waypoint blueprint \"{0}\" has variable \"{1}\" not of type {2}.", reference, variable, type.ToString()); } } }
private void Validate(NWN2WaypointTemplate waypoint, string reference) { try { // Check for common errors in the ACR_Spawn system. if (waypoint.Variables.GetVariable("ACR_SPAWN_TYPE") != null) { // Check variable types. ValidateVariableType(reference, waypoint, "ACR_SPAWN_TYPE", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_RESNAMES_MIN", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_RESNAMES_MAX", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_RESPAWN_COUNT", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_RESPAWN_DELAY_MIN", NWN2ScriptVariableType.Float); ValidateVariableType(reference, waypoint, "ACR_RESPAWN_DELAY_MAX", NWN2ScriptVariableType.Float); ValidateVariableType(reference, waypoint, "ACR_SPAWN_CHANCE", NWN2ScriptVariableType.Float); ValidateVariableType(reference, waypoint, "ACR_SPAWN_RANDOM_RADIUS", NWN2ScriptVariableType.Float); ValidateVariableType(reference, waypoint, "ACR_SPAWN_RANDOM_RANGE", NWN2ScriptVariableType.Float); ValidateVariableType(reference, waypoint, "ACR_SPAWN_IN_VFX", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_VFX", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_IN_SFX", NWN2ScriptVariableType.String); ValidateVariableType(reference, waypoint, "ACR_SPAWN_SFX", NWN2ScriptVariableType.String); ValidateVariableType(reference, waypoint, "ACR_SPAWN_ANIMATION", NWN2ScriptVariableType.String); ValidateVariableType(reference, waypoint, "ACR_SPAWN_IN_HOUR", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_OUT_HOUR", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_IN_DAY", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_OUT_DAY", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_IN_MONTH", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_OUT_MONTH", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_IN_PC_SIGHT", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_ONLY_WHEN_NO_PC_IN_AREA", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_WITH_ANIMATION", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_IS_DISABLED", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_RANDOM_FACING", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_IN_STEALTH", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_IN_DETECT", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_SPAWN_BUFFED", NWN2ScriptVariableType.Int); ValidateVariableType(reference, waypoint, "ACR_COLOR_NAME", NWN2ScriptVariableType.String); // Check variable bounds. ValidateVariableBounds(reference, waypoint, "ACR_SPAWN_TYPE", 0, 8); ValidateVariableBounds(reference, waypoint, "ACR_SPAWN_RESNAMES_MIN", 0, 31); ValidateVariableBounds(reference, waypoint, "ACR_SPAWN_RESNAMES_MAX", 0, 31); ValidateVariableBounds(reference, waypoint, "ACR_SPAWN_CHANCE", 0.0f, 100.0f); if (!GetAreVariablesEqual(waypoint, "ACR_SPAWN_IN_HOUR", "ACR_SPAWN_OUT_HOUR")) { ValidateVariableBounds(reference, waypoint, "ACR_SPAWN_IN_HOUR", 0, 23); ValidateVariableBounds(reference, waypoint, "ACR_SPAWN_OUT_HOUR", 0, 23); } if (!GetAreVariablesEqual(waypoint, "ACR_SPAWN_IN_DAY", "ACR_SPAWN_OUT_DAY")) { ValidateVariableBounds(reference, waypoint, "ACR_SPAWN_IN_DAY", 0, 31); ValidateVariableBounds(reference, waypoint, "ACR_SPAWN_OUT_DAY", 0, 31); } if (!GetAreVariablesEqual(waypoint, "ACR_SPAWN_IN_MONTH", "ACR_SPAWN_OUT_MONTH")) { ValidateVariableBounds(reference, waypoint, "ACR_SPAWN_IN_MONTH", 0, 12); ValidateVariableBounds(reference, waypoint, "ACR_SPAWN_OUT_MONTH", 0, 12); } } } catch (Exception exception) { log.WriteLine(String.Format("EXCEPTION: Error while handling \"{0}\":\n{1}", reference, exception.Message)); } }