Esempio n. 1
0
 public MySqlSmartScriptLine(ISmartScriptLine line)
 {
     EntryOrGuid      = line.EntryOrGuid;
     ScriptSourceType = line.ScriptSourceType;
     Id               = line.Id;
     Link             = line.Link;
     EventType        = line.EventType;
     EventPhaseMask   = line.EventPhaseMask;
     EventChance      = line.EventChance;
     EventFlags       = line.EventFlags;
     EventParam1      = line.EventParam1;
     EventParam2      = line.EventParam2;
     EventParam3      = line.EventParam3;
     EventParam4      = line.EventParam4;
     EventCooldownMin = line.EventCooldownMin;
     EventCooldownMax = line.EventCooldownMax;
     ActionType       = line.ActionType;
     ActionParam1     = line.ActionParam1;
     ActionParam2     = line.ActionParam2;
     ActionParam3     = line.ActionParam3;
     ActionParam4     = line.ActionParam4;
     ActionParam5     = line.ActionParam5;
     ActionParam6     = line.ActionParam6;
     TargetType       = line.TargetType;
     TargetParam1     = line.TargetParam1;
     TargetParam2     = line.TargetParam2;
     TargetParam3     = line.TargetParam3;
     TargetX          = line.TargetX;
     TargetY          = line.TargetY;
     TargetZ          = line.TargetZ;
     TargetO          = line.TargetO;
     Comment          = line.Comment;
 }
Esempio n. 2
0
        public static long GetActionParam(this ISmartScriptLine line, int i)
        {
            switch (i)
            {
            case 0:
                return(line.ActionParam1);

            case 1:
                return(line.ActionParam2);

            case 2:
                return(line.ActionParam3);

            case 3:
                return(line.ActionParam4);

            case 4:
                return(line.ActionParam5);

            case 5:
                return(line.ActionParam6);
            }

            throw new IndexOutOfRangeException();
        }
Esempio n. 3
0
        private int GetActionParameter(ISmartScriptLine line, int i)
        {
            // ugly but DB is in such form
            switch (i)
            {
            case 0:
                return(line.ActionParam1);

            case 1:
                return(line.ActionParam2);

            case 2:
                return(line.ActionParam3);

            case 3:
                return(line.ActionParam4);

            case 4:
                return(line.ActionParam5);

            case 5:
                return(line.ActionParam6);
            }
            throw new ArgumentException("Action parameter out of range");
        }
        private object GenerateSingleSai(IMultiQuery query, ISmartScriptLine line)
        {
            IRawText entryOrGuid = query.Raw("@ENTRY");

            if (line.EntryOrGuid != script.EntryOrGuid)
            {
                if (line.EntryOrGuid / 100 == script.EntryOrGuid)
                {
                    string plus = "";
                    if (line.EntryOrGuid % 100 != 0)
                    {
                        plus = " + " + (line.EntryOrGuid % 100);
                    }
                    entryOrGuid = query.Raw("@ENTRY * 100" + plus);
                }
                else
                {
                    entryOrGuid = query.Raw(line.EntryOrGuid.ToString());
                }
            }
            return(new
            {
                entryorguid = entryOrGuid,
                source_type = (int)line.ScriptSourceType,
                id = line.Id,
                link = line.Link,

                event_type = line.EventType,
                event_phase_mask = line.EventPhaseMask,
                event_chance = line.EventChance,
                event_flags = line.EventFlags,
                event_param1 = line.EventParam1,
                event_param2 = line.EventParam2,
                event_param3 = line.EventParam3,
                event_param4 = line.EventParam4,

                action_type = line.ActionType,
                action_param1 = line.ActionParam1,
                action_param2 = line.ActionParam2,
                action_param3 = line.ActionParam3,
                action_param4 = line.ActionParam4,
                action_param5 = line.ActionParam5,
                action_param6 = line.ActionParam6,

                target_type = line.TargetType,
                target_param1 = line.TargetParam1,
                target_param2 = line.TargetParam2,
                target_param3 = line.TargetParam3,

                target_x = line.TargetX,
                target_y = line.TargetY,
                target_z = line.TargetZ,
                target_o = line.TargetO,

                comment = line.Comment
            });
        }
 private SmartAction SafeActionFactory(ISmartScriptLine line)
 {
     try
     {
         return(smartFactory.ActionFactory(line));
     }
     catch (Exception e)
     {
         System.Windows.MessageBox.Show($"Action {line.ActionType} unknown, skipping action");
     }
     return(null);
 }
 private SmartEvent SafeEventFactory(ISmartScriptLine line)
 {
     try
     {
         return(smartFactory.EventFactory(line));
     }
     catch (Exception e)
     {
         System.Windows.MessageBox.Show($"Event {line.EventType} unknown, skipping action");
     }
     return(null);
 }
Esempio n. 7
0
        private string GenerateSingleSai(ISmartScriptLine line)
        {
            //if (action.Id == 188) // ACTION DEBUG MESSAGE
            //    comment = action.Comment;
            object data = new
            {
                entryorguid = "@ENTRY",
                source_type = ((int)_script.SourceType).ToString(),
                id          = line.Id.ToString(),
                linkto      = line.Link.ToString(),

                event_id     = line.EventType.ToString(),
                phasemask    = line.EventPhaseMask.ToString(),
                chance       = line.EventChance.ToString(),
                flags        = line.EventFlags.ToString(),
                event_param1 = line.EventParam1.ToString(),
                event_param2 = line.EventParam2.ToString(),
                event_param3 = line.EventParam3.ToString(),
                event_param4 = line.EventParam4.ToString(),

                event_cooldown_min = line.EventCooldownMin.ToString(),
                event_cooldown_max = line.EventCooldownMax.ToString(),

                action_id     = line.ActionType.ToString(),
                action_param1 = line.ActionParam1.ToString(),
                action_param2 = line.ActionParam2.ToString(),
                action_param3 = line.ActionParam3.ToString(),
                action_param4 = line.ActionParam4.ToString(),
                action_param5 = line.ActionParam5.ToString(),
                action_param6 = line.ActionParam6.ToString(),

                action_source_id    = line.SourceType.ToString(),
                source_param1       = line.SourceParam1.ToString(),
                source_param2       = line.SourceParam2.ToString(),
                source_param3       = line.SourceParam3.ToString(),
                source_condition_id = line.SourceConditionId.ToString(),

                target_id           = line.TargetType.ToString(),
                target_param1       = line.TargetParam1.ToString(),
                target_param2       = line.TargetParam2.ToString(),
                target_param3       = line.TargetParam3.ToString(),
                target_condition_id = line.TargetConditionId.ToString(),

                x = line.TargetX.ToString(CultureInfo.InvariantCulture),
                y = line.TargetY.ToString(CultureInfo.InvariantCulture),
                z = line.TargetZ.ToString(CultureInfo.InvariantCulture),
                o = line.TargetO.ToString(CultureInfo.InvariantCulture),

                comment = line.Comment
            };

            return(SmartFormat.Smart.Format(SAI_SQL, data));
        }
Esempio n. 8
0
        private SmartSource SourceFactory(ISmartScriptLine line)
        {
            SmartSource source = SourceFactory(line.SourceType);

            source.Condition.SetValue(line.SourceConditionId);

            for (int i = 0; i < SmartSource.SmartSourceParametersCount; ++i)
            {
                source.SetParameter(i, GetSourceParameter(line, i));
            }

            return(source);
        }
Esempio n. 9
0
        private SmartSource SourceFactory(ISmartScriptLine line)
        {
            SmartSource source = SourceFactory(line.SourceType);

            source.Condition.Value = line.SourceConditionId;

            for (var i = 0; i < SmartSource.SmartSourceParametersCount; ++i)
            {
                source.GetParameter(i).Value = line.GetSourceParam(i);
            }

            return(source);
        }
        public static string ToSqlString(this ISmartScriptLine line)
        {
            object data = new
            {
                entryorguid = line.EntryOrGuid.ToString(),
                source_type = line.SourceType.ToString(),
                id          = line.Id.ToString(),
                linkto      = line.Link.ToString(),

                event_id     = line.EventType.ToString(),
                phasemask    = line.EventPhaseMask.ToString(),
                chance       = line.EventChance.ToString(),
                flags        = line.EventFlags.ToString(),
                event_param1 = line.EventParam1.ToString(),
                event_param2 = line.EventParam2.ToString(),
                event_param3 = line.EventParam3.ToString(),
                event_param4 = line.EventParam4.ToString(),

                event_cooldown_min = line.EventCooldownMin.ToString(),
                event_cooldown_max = line.EventCooldownMax.ToString(),

                action_id     = line.ActionType.ToString(),
                action_param1 = line.ActionParam1.ToString(),
                action_param2 = line.ActionParam2.ToString(),
                action_param3 = line.ActionParam3.ToString(),
                action_param4 = line.ActionParam4.ToString(),
                action_param5 = line.ActionParam5.ToString(),
                action_param6 = line.ActionParam6.ToString(),

                action_source_id    = line.SourceType.ToString(),
                source_param1       = line.SourceParam1.ToString(),
                source_param2       = line.SourceParam2.ToString(),
                source_param3       = line.SourceParam3.ToString(),
                source_condition_id = line.SourceConditionId.ToString(),

                target_id           = line.TargetType.ToString(),
                target_param1       = line.TargetParam1.ToString(),
                target_param2       = line.TargetParam2.ToString(),
                target_param3       = line.TargetParam3.ToString(),
                target_condition_id = line.TargetConditionId.ToString(),

                x = line.TargetX.ToString(CultureInfo.InvariantCulture),
                y = line.TargetY.ToString(CultureInfo.InvariantCulture),
                z = line.TargetZ.ToString(CultureInfo.InvariantCulture),
                o = line.TargetO.ToString(CultureInfo.InvariantCulture),

                comment = line.Comment
            };

            return(SmartFormat.Smart.Format(SAI_SQL, data));
        }
Esempio n. 11
0
        public SmartAction ActionFactory(ISmartScriptLine line)
        {
            SmartSource source = SourceFactory(line);
            SmartTarget target = TargetFactory(line);

            SmartAction action = ActionFactory(line.ActionType, source, target);

            for (int i = 0; i < SmartAction.SmartActionParametersCount; ++i)
            {
                action.SetParameter(i, GetActionParameter(line, i));
            }

            return(action);
        }
Esempio n. 12
0
        public static long GetTargetParam(this ISmartScriptLine line, int i)
        {
            switch (i)
            {
            case 0:
                return(line.TargetParam1);

            case 1:
                return(line.TargetParam2);

            case 2:
                return(line.TargetParam3);
            }

            throw new IndexOutOfRangeException();
        }
Esempio n. 13
0
        private int GetTargetParameter(ISmartScriptLine line, int i)
        {
            // ugly but DB is in such form
            switch (i)
            {
            case 0:
                return(line.TargetParam1);

            case 1:
                return(line.TargetParam2);

            case 2:
                return(line.TargetParam3);
            }
            throw new ArgumentException("Target parameter out of range");
        }
Esempio n. 14
0
        public SmartEvent EventFactory(ISmartScriptLine line)
        {
            SmartEvent ev = EventFactory(line.EventType);

            ev.Chance.SetValue(line.EventChance);
            ev.Phases.SetValue(line.EventPhaseMask);
            ev.Flags.SetValue(line.EventFlags);
            ev.CooldownMin.SetValue(line.EventCooldownMin);
            ev.CooldownMax.SetValue(line.EventCooldownMax);

            for (int i = 0; i < SmartEvent.SmartEventParamsCount; ++i)
            {
                ev.SetParameter(i, GetEventParameter(line, i));
            }

            return(ev);
        }
Esempio n. 15
0
        public SmartEvent EventFactory(ISmartScriptLine line)
        {
            SmartEvent ev = EventFactory(line.EventType);

            ev.Chance.Value      = line.EventChance;
            ev.Phases.Value      = line.EventPhaseMask;
            ev.Flags.Value       = line.EventFlags;
            ev.CooldownMin.Value = line.EventCooldownMin;
            ev.CooldownMax.Value = line.EventCooldownMax;

            for (var i = 0; i < SmartEvent.SmartEventParamsCount; ++i)
            {
                ev.GetParameter(i).Value = line.GetEventParam(i);
            }

            return(ev);
        }
Esempio n. 16
0
        public SmartTarget TargetFactory(ISmartScriptLine line)
        {
            SmartTarget target = TargetFactory(line.TargetType);

            target.X = line.TargetX;
            target.Y = line.TargetY;
            target.Z = line.TargetZ;
            target.O = line.TargetO;

            target.Condition.Value = (line.TargetConditionId);

            for (var i = 0; i < SmartSource.SmartSourceParametersCount; ++i)
            {
                target.GetParameter(i).Value = line.GetTargetParam(i);
            }

            return(target);
        }
Esempio n. 17
0
        public SmartTarget TargetFactory(ISmartScriptLine line)
        {
            SmartTarget target = TargetFactory(line.TargetType);

            target.X = line.TargetX;
            target.Y = line.TargetY;
            target.Z = line.TargetZ;
            target.O = line.TargetO;

            target.Condition.SetValue(line.TargetConditionId);

            for (int i = 0; i < SmartTarget.SmartSourceParametersCount; ++i)
            {
                target.SetParameter(i, GetTargetParameter(line, i));
            }

            return(target);
        }
        private bool TryParseGlobalVariable(SmartScript script, ISmartScriptLine line)
        {
            if (line.EventType != SmartConstants.EventAiInitialize)
            {
                return(false);
            }
            if (line.ActionType != SmartConstants.ActionNone)
            {
                return(false);
            }
            if (!line.Comment.StartsWith("#define"))
            {
                return(false);
            }

            Match match = Regex.Match(line.Comment, @"#define ([A-Za-z]+) (\d+) (.*?)(?: -- (.*?))?$", RegexOptions.IgnoreCase);

            if (!match.Success)
            {
                return(false);
            }

            if (!Enum.TryParse(typeof(GlobalVariableType), match.Groups[1].Value, out var enm) || enm == null)
            {
                return(false);
            }

            if (!long.TryParse(match.Groups[2].Value, out var key))
            {
                return(false);
            }

            var variable = new GlobalVariable()
            {
                Name         = match.Groups[3].Value,
                Comment      = match.Groups.Count == 5 ? match.Groups[4].Value : null,
                Key          = key,
                VariableType = (GlobalVariableType)enm
            };

            script.GlobalVariables.Add(variable);
            return(true);
        }
Esempio n. 19
0
        public static int GetEventParam(this ISmartScriptLine line, int i)
        {
            switch (i)
            {
            case 0:
                return(line.EventParam1);

            case 1:
                return(line.EventParam2);

            case 2:
                return(line.EventParam3);

            case 3:
                return(line.EventParam4);
            }

            throw new IndexOutOfRangeException();
        }
        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);
        }
Esempio n. 21
0
        public SmartAction ActionFactory(ISmartScriptLine line)
        {
            SmartSource source = SourceFactory(line);
            SmartTarget target = TargetFactory(line);

            var raw = smartDataManager.GetRawData(SmartType.SmartAction, line.ActionType);

            if (raw.ImplicitSource != null)
            {
                UpdateSource(source, smartDataManager.GetDataByName(SmartType.SmartSource, raw.ImplicitSource).Id);
            }

            SmartAction action = ActionFactory(line.ActionType, source, target);

            for (var i = 0; i < SmartAction.SmartActionParametersCount; ++i)
            {
                action.GetParameter(i).Value = line.GetActionParam(i);
            }

            return(action);
        }
Esempio n. 22
0
        public SmartAction ActionFactory(ISmartScriptLine line)
        {
            SmartSource source = SourceFactory(line);
            SmartTarget target = TargetFactory(line);

            var raw = smartDataManager.GetRawData(SmartType.SmartAction, line.ActionType);

            if (raw.ImplicitSource != null)
            {
                UpdateSource(source, smartDataManager.GetDataByName(SmartType.SmartSource, raw.ImplicitSource).Id);
            }

            SmartAction action = ActionFactory(line.ActionType, source, target);

            for (var i = 0; i < SmartAction.SmartActionParametersCount; ++i)
            {
                action.GetParameter(i).Value = line.GetActionParam(i);
            }

            if (raw.SourceStoreInAction)
            {
                try
                {
                    UpdateSource(source,
                                 smartDataManager.GetRawData(SmartType.SmartSource, (int)action.GetParameter(2).Value).Id);
                    source.GetParameter(0).Value = action.GetParameter(3).Value;
                    source.GetParameter(1).Value = action.GetParameter(4).Value;
                    source.GetParameter(2).Value = action.GetParameter(5).Value;
                    action.GetParameter(2).Value = 0;
                    action.GetParameter(3).Value = 0;
                    action.GetParameter(4).Value = 0;
                    action.GetParameter(5).Value = 0;
                }
                catch (Exception)
                {
                }
            }

            return(action);
        }
        private object GenerateSingleSai(IMultiQuery query, ISmartScriptLine line)
        {
            return(new
            {
                entryorguid = query.Variable("ENTRY"),
                source_type = (int)script.SourceType,
                id = line.Id,
                link = line.Link,

                event_type = line.EventType,
                event_phase_mask = line.EventPhaseMask,
                event_chance = line.EventChance,
                event_flags = line.EventFlags,
                event_param1 = line.EventParam1,
                event_param2 = line.EventParam2,
                event_param3 = line.EventParam3,
                event_param4 = line.EventParam4,

                action_type = line.ActionType,
                action_param1 = line.ActionParam1,
                action_param2 = line.ActionParam2,
                action_param3 = line.ActionParam3,
                action_param4 = line.ActionParam4,
                action_param5 = line.ActionParam5,
                action_param6 = line.ActionParam6,

                target_type = line.TargetType,
                target_param1 = line.TargetParam1,
                target_param2 = line.TargetParam2,
                target_param3 = line.TargetParam3,

                target_x = line.TargetX,
                target_y = line.TargetY,
                target_z = line.TargetZ,
                target_o = line.TargetO,

                comment = line.Comment
            });
        }
Esempio n. 24
0
 protected override ISolutionItem GenerateSolutionItem(ISmartScriptLine line)
 {
     return(new SmartScriptSolutionItem(line.EntryOrGuid, (SmartScriptType)line.ScriptSourceType));
 }
Esempio n. 25
0
 protected abstract ISolutionItem GenerateSolutionItem(ISmartScriptLine line);