protected SmartScriptSolutionItemProvider(string name, string desc, string icon, SmartScriptType type) { _name = name; _desc = desc; _type = type; _icon = new BitmapImage(new Uri($"/WDE.SmartScriptEditor;component/Resources/{icon}.png", UriKind.Relative)); }
protected SmartScriptSolutionItemProvider(string name, string desc, string icon, SmartScriptType type) { this.name = name; this.desc = desc; this.type = type; this.icon = new ImageUri($"Resources/{icon}.png"); }
public SmartScript(SmartScriptSolutionItem item, ISmartFactory smartFactory) { EntryOrGuid = item.Entry; SourceType = item.SmartType; Events = new ObservableCollection <SmartEvent>(); this.smartFactory = smartFactory; }
public SmartScript(SmartScriptSolutionItem item, IUnityContainer container) { EntryOrGuid = item.Entry; SourceType = item.SmartType; _container = container; Events = new ObservableCollection <SmartEvent>(); }
public async Task InstallScriptFor(int entryOrGuid, SmartScriptType type, IEnumerable <ISmartScriptLine> script) { if (model == null) { return; } await model.BeginTransactionAsync(); await model.SmartScript.Where(x => x.EntryOrGuid == entryOrGuid && x.ScriptSourceType == (int)type).DeleteAsync(); if (type == SmartScriptType.Creature) { await model.CreatureTemplate .Where(p => p.Entry == entryOrGuid) .Set(p => p.AIName, "SmartAI") .Set(p => p.ScriptName, "") .UpdateAsync(); } foreach (var line in script) { MySqlSmartScriptLine sqlLine = new () { 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 }; await model.InsertAsync(sqlLine); } await model.CommitTransactionAsync(); }
public IEnumerable <ISmartScriptLine> GetScriptFor(int entryOrGuid, SmartScriptType type) { if (model == null) { return(new List <ISmartScriptLine>()); } return(model.SmartScript.Where((line) => line.EntryOrGuid == entryOrGuid && line.ScriptSourceType == (int)type).ToList()); }
public async Task InstallScriptFor(int entryOrGuid, SmartScriptType type, IEnumerable <ISmartScriptLine> script) { using var writeLock = await MySqlSingleWriteLock.WriteLock(); await using var model = new TrinityDatabase(); await model.BeginTransactionAsync(IsolationLevel.ReadCommitted); await model.SmartScript.Where(x => x.EntryOrGuid == entryOrGuid && x.ScriptSourceType == (int)type).DeleteAsync(); switch (type) { case SmartScriptType.Creature: await model.CreatureTemplate.Where(p => p.Entry == (uint)entryOrGuid) .Set(p => p.AIName, "SmartAI") .Set(p => p.ScriptName, "") .UpdateAsync(); break; case SmartScriptType.GameObject: await model.GameObjectTemplate.Where(p => p.Entry == (uint)entryOrGuid) .Set(p => p.AIName, "SmartAI") .Set(p => p.ScriptName, "") .UpdateAsync(); break; case SmartScriptType.AreaTrigger: await model.AreaTriggerScript.Where(p => p.Id == entryOrGuid).DeleteAsync(); await model.AreaTriggerScript.InsertAsync(() => new MySqlAreaTriggerScript() { Id = entryOrGuid, ScriptName = "SmartTrigger" }); break; case SmartScriptType.AreaTriggerEntity: await model.AreaTriggerTemplate.Where(p => p.Id == (uint)entryOrGuid && p.IsServerSide == false) .Set(p => p.ScriptName, "SmartAreaTriggerAI") .UpdateAsync(); break; case SmartScriptType.AreaTriggerEntityServerSide: await model.AreaTriggerTemplate.Where(p => p.Id == (uint)entryOrGuid && p.IsServerSide == true) .Set(p => p.ScriptName, "SmartAreaTriggerAI") .UpdateAsync(); break; } await model.SmartScript.BulkCopyAsync(script.Select(l => new MySqlSmartScriptLine(l))); await model.CommitTransactionAsync(); }
public async Task InstallScriptFor(int entryOrGuid, SmartScriptType type, IList <ISmartScriptLine> script) { using var writeLock = await DatabaseLock.WriteLock(); await using var model = Database(); await model.BeginTransactionAsync(IsolationLevel.ReadCommitted); foreach (var pair in script.Select(l => (l.ScriptSourceType, l.EntryOrGuid)) .Concat(new (int ScriptSourceType, int EntryOrGuid)[] { ((int)type, entryOrGuid) })
private string?TryGetName(int entryOrGuid, SmartScriptType type) { uint?entry = 0; switch (type) { case SmartScriptType.Creature: if (entryOrGuid < 0) { entry = database.GetCreatureByGuid((uint)-entryOrGuid)?.Entry; } else { entry = (uint)entryOrGuid; } if (entry.HasValue) { return(database.GetCreatureTemplate(entry.Value)?.Name); } break; case SmartScriptType.GameObject: if (entryOrGuid < 0) { entry = database.GetGameObjectByGuid((uint)-entryOrGuid)?.Entry; } else { entry = (uint)entryOrGuid; } if (entry.HasValue) { return(database.GetGameObjectTemplate(entry.Value)?.Name); } break; case SmartScriptType.Quest: return(database.GetQuestTemplate((uint)entryOrGuid)?.Name); case SmartScriptType.Aura: case SmartScriptType.Spell: if (spellStore.HasSpell((uint)entryOrGuid)) { return(spellStore.GetName((uint)entryOrGuid)); } break; default: return(null); } return(null); }
public void InstallScriptFor(int entryOrGuid, SmartScriptType type, IEnumerable <ISmartScriptLine> script) { if (model == null) { return; } using (var scope = new TransactionScope()) { model.SmartScript.Where(x => x.EntryOrGuid == entryOrGuid && x.ScriptSourceType == (int)type).Delete(); scope.Flush(); foreach (var line in script) { var sqlLine = model.SmartScript.Create(new { EntryOrGuid = line.EntryOrGuid, ScriptSourceType = line.ScriptSourceType, Id = line.Id }); sqlLine.Link = line.Link; sqlLine.EventType = line.EventType; sqlLine.EventPhaseMask = line.EventPhaseMask; sqlLine.EventChance = line.EventChance; sqlLine.EventFlags = line.EventFlags; sqlLine.EventParam1 = line.EventParam1; sqlLine.EventParam2 = line.EventParam2; sqlLine.EventParam3 = line.EventParam3; sqlLine.EventParam4 = line.EventParam4; sqlLine.EventCooldownMin = line.EventCooldownMin; sqlLine.EventCooldownMax = line.EventCooldownMax; sqlLine.ActionType = line.ActionType; sqlLine.ActionParam1 = line.ActionParam1; sqlLine.ActionParam2 = line.ActionParam2; sqlLine.ActionParam3 = line.ActionParam3; sqlLine.ActionParam4 = line.ActionParam4; sqlLine.ActionParam5 = line.ActionParam5; sqlLine.ActionParam6 = line.ActionParam6; sqlLine.SourceType = line.SourceType; sqlLine.SourceParam1 = line.SourceParam1; sqlLine.SourceParam2 = line.SourceParam2; sqlLine.SourceParam3 = line.SourceParam3; sqlLine.SourceConditionId = line.SourceConditionId; sqlLine.TargetType = line.TargetType; sqlLine.TargetParam1 = line.TargetParam1; sqlLine.TargetParam2 = line.TargetParam2; sqlLine.TargetParam3 = line.TargetParam3; sqlLine.TargetConditionId = line.TargetConditionId; sqlLine.TargetX = line.TargetX; sqlLine.TargetY = line.TargetY; sqlLine.TargetZ = line.TargetZ; sqlLine.TargetO = line.TargetO; sqlLine.Comment = line.Comment; } scope.Complete(); } }
public SmartScriptAreaTriggerEntityListProviderBase( Lazy <IItemFromListProvider> itemFromListProvider, Lazy <IDatabaseProvider> database, string name, string desc, string icon, SmartScriptType type, bool serverSide ) : base(name, desc, icon, type) { this.itemFromListProvider = itemFromListProvider; this.database = database; this.type = type; this.serverSide = serverSide; }
public SmartScript(ISmartScriptSolutionItem item, ISmartFactory smartFactory, ISmartDataManager smartDataManager, IMessageBoxService messageBoxService) { this.smartFactory = smartFactory; this.smartDataManager = smartDataManager; this.messageBoxService = messageBoxService; EntryOrGuid = (int)item.Entry; SourceType = item.SmartType; Events = new ObservableCollection <SmartEvent>(); selectionHelper = new SmartSelectionHelper(this); selectionHelper.ScriptSelectedChanged += CallScriptSelectedChanged; AllSmartObjectsFlat = selectionHelper.AllSmartObjectsFlat; Events.ToStream() .Subscribe((e) => { if (e.Type == CollectionEventType.Add) { e.Item.Parent = this; } }); }
public Task <IList <int> > GetSmartScriptEntriesByType(SmartScriptType scriptType) => impl.GetSmartScriptEntriesByType(scriptType);
public Task InstallScriptFor(int entryOrGuid, SmartScriptType type, IEnumerable <ISmartScriptLine> script) { return(Task.FromResult(false)); }
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()); }
public SmartScriptSolutionItem(int entry, SmartScriptType type, IUnityContainer unity) { Entry = entry; SmartType = type; _unity = unity; }
public IEnumerable <IConditionLine> GetConditionsForSourceTarget(int entryOrGuid, SmartScriptType type) => Enumerable.Empty <IConditionLine>();
public Task InstallScriptFor(int entryOrGuid, SmartScriptType type, IEnumerable <ISmartScriptLine> script) { return(databaseProvider.InstallScriptFor(entryOrGuid, type, script)); }
public IEnumerable <ISmartScriptLine> GetScriptFor(int entryOrGuid, SmartScriptType type) { using var model = new TrinityDatabase(); return(model.SmartScript.Where(line => line.EntryOrGuid == entryOrGuid && line.ScriptSourceType == (int)type).ToList()); }
public async Task InstallScriptFor(int entryOrGuid, SmartScriptType type, IEnumerable <ISmartScriptLine> script) { using var writeLock = await DatabaseLock.WriteLock(); await using var model = Database(); await model.BeginTransactionAsync(IsolationLevel.ReadCommitted); await model.SmartScript.Where(x => x.EntryOrGuid == entryOrGuid && x.ScriptSourceType == (int)type).DeleteAsync(); switch (type) { case SmartScriptType.Creature: { uint entry = 0; if (entryOrGuid < 0) { var template = await model.Creature.Where(p => p.Guid == (uint)-entryOrGuid).FirstOrDefaultAsync(); if (template == null) { throw new Exception( $"Trying to install creature script for guid {-entryOrGuid}, but this guid doesn't exist in creature table, so entry cannot be determined."); } entry = template.Entry; } else { entry = (uint)entryOrGuid; } await model.CreatureTemplate.Where(p => p.Entry == entry) .Set(p => p.AIName, currentCoreVersion.Current.SmartScriptFeatures.CreatureSmartAiName) .Set(p => p.ScriptName, "") .UpdateAsync(); break; } case SmartScriptType.GameObject: { uint entry = 0; if (entryOrGuid < 0) { var template = await model.GameObject.Where(p => p.Guid == (uint)-entryOrGuid).FirstOrDefaultAsync(); if (template == null) { throw new Exception( $"Trying to install gameobject script for guid {-entryOrGuid}, but this guid doesn't exist in gameobject table, so entry cannot be determined."); } entry = template.Entry; } else { entry = (uint)entryOrGuid; } await model.GameObjectTemplate.Where(p => p.Entry == entry) .Set(p => p.AIName, currentCoreVersion.Current.SmartScriptFeatures.GameObjectSmartAiName) .Set(p => p.ScriptName, "") .UpdateAsync(); break; } case SmartScriptType.Quest: var addonExists = await model.QuestTemplateAddon.Where(p => p.Entry == (uint)entryOrGuid).AnyAsync(); if (!addonExists) { await model.QuestTemplateAddon.InsertAsync(() => new MySqlQuestTemplateAddon() { Entry = (uint)entryOrGuid }); } await model.QuestTemplateAddonWithScriptName .Where(p => p.Entry == (uint)entryOrGuid) .Set(p => p.ScriptName, "SmartQuest") .UpdateAsync(); break; case SmartScriptType.AreaTrigger: await model.AreaTriggerScript.Where(p => p.Id == entryOrGuid).DeleteAsync(); await model.AreaTriggerScript.InsertAsync(() => new MySqlAreaTriggerScript() { Id = entryOrGuid, ScriptName = "SmartTrigger" }); break; case SmartScriptType.AreaTriggerEntity: await model.AreaTriggerTemplate.Where(p => p.Id == (uint)entryOrGuid && p.IsServerSide == false) .Set(p => p.ScriptName, "SmartAreaTriggerAI") .UpdateAsync(); break; case SmartScriptType.AreaTriggerEntityServerSide: await model.AreaTriggerTemplate.Where(p => p.Id == (uint)entryOrGuid && p.IsServerSide == true) .Set(p => p.ScriptName, "SmartAreaTriggerAI") .UpdateAsync(); break; } await model.SmartScript.BulkCopyAsync(script.Select(l => new MySqlSmartScriptLine(l))); await model.CommitTransactionAsync(); }
public IEnumerable <ISmartScriptLine> GetScriptFor(int entryOrGuid, SmartScriptType type) { return(databaseProvider.GetScriptFor(entryOrGuid, type)); }
public Task InstallScriptFor(int entryOrGuid, SmartScriptType type, IEnumerable <ISmartScriptLine> script) => impl.InstallScriptFor(entryOrGuid, type, script);
public SmartScriptSolutionItem(int entry, SmartScriptType type) { Entry = entry; SmartType = type; }
public Task InstallScriptFor(int entryOrGuid, SmartScriptType type, IList <ISmartScriptLine> script) => Task.FromResult(false);
public IEnumerable <ISmartScriptLine> GetScriptFor(int entryOrGuid, SmartScriptType type) => impl.GetScriptFor(entryOrGuid, type);
public Task <IEnumerable <ISmartScriptLine> > GetScriptFor(int entryOrGuid, SmartScriptType type) { return(Task.FromResult(databaseProvider.GetScriptFor(entryOrGuid, type))); }
public IEnumerable <ISmartScriptLine> GetScriptFor(int entryOrGuid, SmartScriptType type) => Enumerable.Empty <ISmartScriptLine>();
public IEnumerable <IConditionLine> GetConditionsForScript(int entryOrGuid, SmartScriptType type) { return(databaseProvider.GetConditionsFor(SmartConstants.ConditionSourceSmartScript, entryOrGuid, (int)type)); }
public Task <IList <int> > GetSmartScriptEntriesByType(SmartScriptType scriptType) => Task.FromResult <IList <int> >(new List <int>());
public async Task InstallConditionsForScript(IEnumerable <IConditionLine> conditions, int entryOrGuid, SmartScriptType type) { await databaseProvider.InstallConditions(conditions, IDatabaseProvider.ConditionKeyMask.SourceEntry | IDatabaseProvider.ConditionKeyMask.SourceId, new IDatabaseProvider.ConditionKey(SmartConstants.ConditionSourceSmartScript, null, entryOrGuid, (int)type)); }