private bool LinkToScriptAssembly(Assembly assembly) { if (assembly == null) { return(false); } if (string.IsNullOrWhiteSpace(ScriptPath)) { return(false); } var linker = new BooModuleLinker(assembly, ScriptPath, BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); //try to link to callbacks... //...but these are disabled since I have no idea how these should work //def.OnMaximumCurrency = linker["OnMaximumCurrency"]?.TryCreateDelegate<Action<object>>(); //def.OnNegativeCurrency = linker["OnNegativeCurrency"]?.TryCreateDelegate<Action<object>>(); OnLevelUp = linker["OnLevelUp"]?.TryCreateDelegate <Action <TSPlayer, Class, int> >(); OnLevelDown = linker["OnLevelDown"]?.TryCreateDelegate <Action <TSPlayer, Class, int> >(); OnClassChange = linker["OnClassChange"]?.TryCreateDelegate <Action <TSPlayer, Class, Class> >(); OnClassMastered = linker["OnClassMastered"]?.TryCreateDelegate <Action <TSPlayer, Class> >(); return(true); }
protected override bool OnLinkToScriptAssembly(Assembly ass) { if (ass == null) { return(false); } if (string.IsNullOrWhiteSpace(ScriptPath)) { return(false); } var linker = new BooModuleLinker(ass, ScriptPath); OnCheckReplace = linker.TryCreateDelegate <NpcCheckReplaceHandler>("OnCheckReplace"); OnCheckSpawn = linker.TryCreateDelegate <NpcCheckSpawnHandler>("OnCheckSpawn"); OnSpawn = linker.TryCreateDelegate <NpcSpawnHandler>("OnSpawn"); OnCollision = linker.TryCreateDelegate <NpcCollisionHandler>("OnCollision"); OnTileCollision = linker.TryCreateDelegate <NpcTileCollisionHandler>("OnTileCollision"); OnTransformed = linker.TryCreateDelegate <NpcTransformedHandler>("OnTransformed"); OnKilled = linker.TryCreateDelegate <NpcKilledHandler>("OnKilled"); OnStrike = linker.TryCreateDelegate <NpcStrikeHandler>("OnStrike"); OnAiUpdate = linker.TryCreateDelegate <NpcAiUpdateHandler>("OnAiUpdate"); return(true); }
private void LoadScripts() { var moduleManager = GetModuleManager(); var scriptPaths = GetScriptPaths(); foreach (var path in scriptPaths) { moduleManager.Add(path); } var results = moduleManager.Compile(); foreach (var cat in Categories.Values) { foreach (var skill in cat.Values) { foreach (var level in skill.Levels) { if (results.TryGetValue(CustomSkillsPlugin.Instance.PluginRelativePath(level.ScriptPath), out var compilerContext)) { CustomSkillsPlugin.Instance.LogPrintBooErrors(compilerContext); CustomSkillsPlugin.Instance.LogPrintBooWarnings(compilerContext); if (compilerContext.Errors.Count < 1) { var linker = new BooModuleLinker(compilerContext.GeneratedAssembly, level.ScriptPath); if (level.OnCancelled == null) { level.OnCancelled = linker.TryCreateDelegate <Action <TSPlayer, SkillState> >("OnCancelled"); } if (level.OnLevelUp == null) { level.OnLevelUp = linker.TryCreateDelegate <Action <TSPlayer> >("OnLevelUp"); } if (level.OnCast == null) { level.OnCast = linker.TryCreateDelegate <Func <TSPlayer, SkillState, bool> >("OnCast"); } if (level.OnCharge == null) { level.OnCharge = linker.TryCreateDelegate <Func <TSPlayer, SkillState, bool> >("OnCharge"); } if (level.OnFire == null) { level.OnFire = linker.TryCreateDelegate <Action <TSPlayer, SkillState> >("OnFire"); } } } } } } }
private void LoadScripts(string scriptPath) { const string assemblyPrefix = "Banking_"; if (string.IsNullOrWhiteSpace(scriptPath)) { return; } if (!File.Exists(scriptPath)) { BankingPlugin.Instance.LogPrint($"Unable to find script file '{scriptPath}'.", TraceLevel.Error); return; } var scriptName = Path.GetFileNameWithoutExtension(scriptPath); var assemblyName = $"{assemblyPrefix}{scriptName}.dll"; var scripts = new List <string>() { scriptPath }; var compiler = new BooScriptCompiler(); compiler.Configure(ScriptHelpers.GetReferences(), ScriptHelpers.GetDefaultImports(), ScriptHelpers.GetEnsuredMethodSignatures()); var context = compiler.Compile(assemblyName, scripts); if (context.Errors.Count > 0) { BankingPlugin.Instance.LogPrintBooErrors(context); return; } else if (context.Warnings.Count > 0) { BankingPlugin.Instance.LogPrintBooWarnings(context); } var ass = context.GeneratedAssembly; var linker = new BooModuleLinker(ass, scriptPath); ScriptOnPreReward = linker.TryCreateDelegate <Func <string, Reward, CurrencyDefinition, decimal, decimal> >("OnPreReward"); scriptOnAccountDeposit = linker.TryCreateDelegate <Action <Bank, BalanceChangedEventArgs> >("OnAccountDeposit"); scriptOnAccountWithdraw = linker.TryCreateDelegate <Action <Bank, BalanceChangedEventArgs> >("OnAccountWithdraw"); }
//internal bool LinkToScript(Assembly assembly) protected override bool OnLinkToScriptAssembly(Assembly assembly) { if (assembly == null) { return(false); } if (string.IsNullOrWhiteSpace(ScriptPath)) { return(false); } var linker = new BooModuleLinker(assembly, ScriptPath); OnSpawn = linker.TryCreateDelegate <ProjectileSpawnHandler>("OnSpawn"); OnKilled = linker.TryCreateDelegate <ProjectileKilledHandler>("OnKilled"); OnAiUpdate = linker.TryCreateDelegate <ProjectileAiUpdateHandler>("OnAiUpdate"); OnGameUpdate = linker.TryCreateDelegate <ProjectileGameUpdateHandler>("OnGameUpdate"); OnCollision = linker.TryCreateDelegate <ProjectileCollisionHandler>("OnCollision"); OnTileCollision = linker.TryCreateDelegate <ProjectileTileCollisionHandler>("OnTileCollision"); return(true); }
protected override bool OnLinkToScriptAssembly(Assembly ass) { if (ass == null) { return(false); } if (string.IsNullOrWhiteSpace(ScriptPath)) { return(false); } var linker = new BooModuleLinker(ass, ScriptPath); OnInvasionStart = linker.TryCreateDelegate <InvasionStartHandler>("OnInvasionStart"); OnInvasionEnd = linker.TryCreateDelegate <InvasionEndHandler>("OnInvasionEnd"); OnUpdate = linker.TryCreateDelegate <InvasionUpdateHandler>("OnUpdate"); OnWaveStart = linker.TryCreateDelegate <InvasionWaveStartHandler>("OnWaveStart"); OnWaveEnd = linker.TryCreateDelegate <InvasionWaveEndHandler>("OnWaveEnd"); OnWaveUpdate = linker.TryCreateDelegate <InvasionWaveUpdateHandler>("OnWaveUpdate"); OnBossDefeated = linker.TryCreateDelegate <InvasionBossDefeatedHandler>("OnBossDefeated"); return(true); }