private AbstractSmartScriptLine GenerateSingleSai(int eventId, SmartEvent ev, SmartAction action, int link = 0, string comment = null) { AbstractSmartScriptLine line = new AbstractSmartScriptLine { EntryOrGuid = _item.Entry, ScriptSourceType = (int)_item.SmartType, Id = eventId, Link = link, EventType = ev.Id, EventPhaseMask = ev.Phases.Value, EventChance = ev.Chance.Value, EventFlags = ev.Flags.Value, EventParam1 = ev.GetParameter(0).Value, EventParam2 = ev.GetParameter(1).Value, EventParam3 = ev.GetParameter(2).Value, EventParam4 = ev.GetParameter(3).Value, EventCooldownMin = ev.CooldownMin.Value, EventCooldownMax = ev.CooldownMax.Value, ActionType = action.Id, ActionParam1 = action.GetParameter(0).Value, ActionParam2 = action.GetParameter(1).Value, ActionParam3 = action.GetParameter(2).Value, ActionParam4 = action.GetParameter(3).Value, ActionParam5 = action.GetParameter(4).Value, ActionParam6 = action.GetParameter(5).Value, SourceType = action.Source.Id, SourceParam1 = action.Source.GetParameter(0).Value, SourceParam2 = action.Source.GetParameter(1).Value, SourceParam3 = action.Source.GetParameter(2).Value, SourceConditionId = action.Source.Condition.Value, TargetType = action.Target.Id, TargetParam1 = action.Target.GetParameter(0).Value, TargetParam2 = action.Target.GetParameter(1).Value, TargetParam3 = action.Target.GetParameter(2).Value, TargetConditionId = action.Target.Condition.Value, TargetX = action.Target.X, TargetY = action.Target.Y, TargetZ = action.Target.Z, TargetO = action.Target.O, Comment = ev.Readable + " - " + action.Readable }; return(line); }
public static bool TryToISmartScriptLine(this string str, out ISmartScriptLine line) { line = new AbstractSmartScriptLine(); Match m = SAI_LINE_REGEX.Match(str); if (!m.Success || m.Groups.Count != 28) { return(false); } line.EntryOrGuid = int.Parse(m.Groups[1].ToString()); line.ScriptSourceType = int.Parse(m.Groups[2].ToString()); line.Id = int.Parse(m.Groups[3].ToString()); line.Link = int.Parse(m.Groups[4].ToString()); line.EventType = int.Parse(m.Groups[5].ToString()); line.EventPhaseMask = int.Parse(m.Groups[6].ToString()); line.EventChance = int.Parse(m.Groups[7].ToString()); line.EventFlags = int.Parse(m.Groups[8].ToString()); line.EventParam1 = int.Parse(m.Groups[9].ToString()); line.EventParam2 = int.Parse(m.Groups[10].ToString()); line.EventParam3 = int.Parse(m.Groups[11].ToString()); line.EventParam4 = int.Parse(m.Groups[12].ToString()); line.ActionType = int.Parse(m.Groups[13].ToString()); line.ActionParam1 = int.Parse(m.Groups[14].ToString()); line.ActionParam2 = int.Parse(m.Groups[15].ToString()); line.ActionParam3 = int.Parse(m.Groups[16].ToString()); line.ActionParam4 = int.Parse(m.Groups[17].ToString()); line.ActionParam5 = int.Parse(m.Groups[18].ToString()); line.ActionParam6 = int.Parse(m.Groups[19].ToString()); line.TargetType = int.Parse(m.Groups[20].ToString()); line.TargetParam1 = int.Parse(m.Groups[21].ToString()); line.TargetParam2 = int.Parse(m.Groups[22].ToString()); line.TargetParam3 = int.Parse(m.Groups[23].ToString()); line.TargetX = float.Parse(m.Groups[24].ToString(), CultureInfo.InvariantCulture); line.TargetY = float.Parse(m.Groups[25].ToString(), CultureInfo.InvariantCulture); line.TargetZ = float.Parse(m.Groups[26].ToString(), CultureInfo.InvariantCulture); line.TargetO = float.Parse(m.Groups[27].ToString(), CultureInfo.InvariantCulture); line.Comment = m.Groups[28].ToString(); return(true); }
public static ISmartScriptLine[] ToSmartScriptLines(this SmartEvent e, int scriptEntryOrGuid, SmartScriptType scriptSourceType, int id, int?linkTo = null) { List <ISmartScriptLine> lines = new List <ISmartScriptLine>(); IEnumerable <SmartAction> actions = e.Actions.Count == 0 ? new List <SmartAction>() { new SmartAction(-1, new SmartSource(-1) { ReadableHint = "" }, new SmartTarget(-1) { ReadableHint = "" }) { ReadableHint = "" } } : e.Actions; foreach (var a in actions) { var line = new AbstractSmartScriptLine() { EntryOrGuid = scriptEntryOrGuid, ScriptSourceType = (int)scriptSourceType, Id = id, Link = linkTo ?? 0, EventType = e.Id, EventPhaseMask = e.Phases.Value, EventChance = e.Chance.Value, EventFlags = e.Flags.Value, EventParam1 = e.GetParameter(0).Value, EventParam2 = e.GetParameter(1).Value, EventParam3 = e.GetParameter(2).Value, EventParam4 = e.GetParameter(3).Value, EventCooldownMin = e.CooldownMin.Value, EventCooldownMax = e.CooldownMax.Value, ActionType = a.Id, ActionParam1 = a.GetParameter(0).Value, ActionParam2 = a.GetParameter(1).Value, ActionParam3 = a.GetParameter(2).Value, ActionParam4 = a.GetParameter(3).Value, ActionParam5 = a.GetParameter(4).Value, ActionParam6 = a.GetParameter(5).Value, SourceType = a.Source.Id, SourceParam1 = a.Source.GetParameter(0).Value, SourceParam2 = a.Source.GetParameter(1).Value, SourceParam3 = a.Source.GetParameter(2).Value, SourceConditionId = 0, TargetType = a.Target.Id, TargetParam1 = a.Target.GetParameter(0).Value, TargetParam2 = a.Target.GetParameter(1).Value, TargetParam3 = a.Target.GetParameter(2).Value, TargetConditionId = 0, TargetX = a.Target.X, TargetY = a.Target.Y, TargetZ = a.Target.Z, TargetO = a.Target.O, Comment = e.Readable + " - " + a.Readable + (string.IsNullOrEmpty(a.Comment) ? "" : (" // " + a.Comment)), }; lines.Add(line); } return(lines.ToArray()); }