/////////////////////////////////////////////////////////////////////////////// //File: VCS_Connector.cs // //Description: Connector class for Virindi Chat System 5. // //References required: // VCS5 // //This file is Copyright (c) 2013 VirindiPlugins // //Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // //The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // //THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. /////////////////////////////////////////////////////////////////////////////// using System; using System.Collections.Generic; using System.Text; using Decal.Adapter; using Decal.Adapter.Wrappers; using System.Reflection; namespace MyClasses { static class VCS_Connector { public enum eVVSConsoleColorClass { SystemMessage = 0, Magic = 1, MyMeleeAttack = 2, OtherMeleeAttack = 3, MyTell = 4, OtherTell = 5, GlobalChat = 6, AllegianceChat = 7, FellowChat = 8, OpenChat = 9, OpenEmote = 10, StatusError = 11, StatRaised = 12, RareFound = 13, PluginMessage = 96, PluginError = 97, Link = 98, Unknown = 99, } public static string ThisPluginName = "???"; public static PluginHost Host = null; /// /// A shortcut method to initialize plugin name and the PluginHost object. /// /// PluginCore.Host /// The friendly name of this plugin. Used in the presets list. public static void Initialize(PluginHost myhost, string mypluginname) { Host = myhost; ThisPluginName = mypluginname; } #region SendChatText /// /// Sends text as regular chat. Deprecated. /// /// PluginCore.Host /// The chat message. /// The default AC console color ID. /// The default target window, 0=auto, 1=main, 2=float1 /// The VVS console control filter type. [Obsolete] public static void SendChatText(PluginHost host, string text, int color, int window, eVVSConsoleColorClass vvsfilteras) { if (IsVCSPresent(host)) { //Send using VCS Curtain_SendChatTextVCS(text, color, window); } else { //Send the old way host.Actions.AddChatTextRaw(text, color, window); } if (IsVirindiViewsPresent(host)) Curtain_SendChatTextVViews(text, color, (int)vvsfilteras); } static void Curtain_SendChatTextVCS(string text, int color, int window) { VCS5.PluginCore.Instance.FilterOutputText(text, window, color); } static void Curtain_SendChatTextVViews(string text, int color, int vvsfilteras) { VirindiViewService.Controls.HudChatbox.SendChatText(text, (VirindiViewService.Controls.HudConsole.eACTextColor)color, (VirindiViewService.eConsoleColorClass)vvsfilteras); } #endregion SendChatText #region Sending Categorized Text /// /// Send a filtered chat message by VCS preset. Call Initialize() first, then call InitializeCategory() to /// create the preset, then finally call this to output text. /// /// The preset name. Should already be initialized by InitializeCategory(). /// The output chat text. /// The default AC console color ID. /// The default target windows, 0=auto, 1=main, 2=float1 public static void SendChatTextCategorized(string categoryname, string text, int color, params int[] windows) { if ((windows == null) || (windows.Length == 0)) windows = new int[] { 1 }; if (IsVCSPresent(Host)) { Curtain_SendChatTextCategorized(categoryname, text, color, windows); } else { foreach (int x in windows) { Host.Actions.AddChatText(text, color, x); } } if (IsVirindiViewsPresent(Host)) Curtain_SendChatTextVViews(text, color, (int)eVVSConsoleColorClass.PluginMessage); } static void Curtain_SendChatTextCategorized(string categoryname, string text, int color, params int[] windows) { VCS5.Presets.FilterOutputPreset(ThisPluginName, categoryname, text, color, windows); } /// /// Creates a VCS preset type which can later be used for chat. Will appear in the VCS presets list. Call Initialize() first. /// /// The preset name. /// The preset description. public static void InitializeCategory(string categoryname, string description) { if (IsVCSPresent(Host)) Curtain_InitializeCategory(categoryname, description); } static void Curtain_InitializeCategory(string categoryname, string description) { VCS5.Presets.RegisterPreset(ThisPluginName, categoryname, description); } #endregion Sending Categorized Text #region VCS and VVS online checks static bool seenvcsassembly = false; public static bool IsVCSPresent(PluginHost pHost) { try { //See if VCS assembly is loaded if (!seenvcsassembly) { System.Reflection.Assembly[] asms = AppDomain.CurrentDomain.GetAssemblies(); foreach (System.Reflection.Assembly a in asms) { AssemblyName nmm = a.GetName(); if ((nmm.Name == "VCS5") && (nmm.Version >= new System.Version("5.0.0.5"))) { seenvcsassembly = true; break; } } } if (seenvcsassembly) if (Curtain_VCSInstanceEnabled()) return true; } catch { } return false; } static bool Curtain_VCSInstanceEnabled() { return VCS5.PluginCore.Running; } static bool has_cachedvvsresult = false; static bool cachedvvsresult = false; //Doh //Need to know about VVS to post to VVS "console" controls. //Since VVS is a service and can't be turned on and off at runtime, we only need to do this once. public static bool IsVirindiViewsPresent(PluginHost pHost) { try { if (has_cachedvvsresult) return cachedvvsresult; //See if VCS assembly is loaded System.Reflection.Assembly[] asms = AppDomain.CurrentDomain.GetAssemblies(); bool l = false; foreach (System.Reflection.Assembly a in asms) { AssemblyName nmm = a.GetName(); if ((nmm.Name == "VirindiViewService") && (nmm.Version >= new System.Version("1.0.0.14"))) { l = true; break; } } if (l) if (Curtain_VirindiViewsInstanceEnabled()) { has_cachedvvsresult = true; cachedvvsresult = true; return true; } } catch { } has_cachedvvsresult = true; cachedvvsresult = false; return false; } static bool Curtain_VirindiViewsInstanceEnabled() { return VirindiViewService.Service.Running; } #endregion VCS and VVS online checks } }