示例#1
0
        public static void GiveViewersPoints()
        {
            Log.Message($"Total viewers to reward points: {TCText.ColoredText(viewers.Count.ToString(), ColorLibrary.BlueGreen)}");

            if (Ledgers.Instance == null)
            {
                Log.Error("ledger instance null");
                return;
            }

            Ledger activeLedger = Ledgers.ActiveLedger();

            if (activeLedger == null)
            {
                Log.Error("Current Active Ledger is null. Report to mod author.");
                return;
            }

            foreach (Viewer viewer in viewers)
            {
                LedgerRecord ledgerRecord = activeLedger.GetLedgerRecord(viewer.Username, viewer.Service);

                ledgerRecord.PointBalance += ToolkitPointsSettings.pointsPerReward;
            }
        }
示例#2
0
        internal static void LoadAll()
        {
            Log.Message(TCText.ColoredText("Trying to load previous ledger file", ColorLibrary.BrightBlue));

            if (DatabaseController.LoadObject(ledgerFileName, mod, out Ledgers ledgers))
            {
                Log.Message("Ledger file found, loading ledgers from file");

                Ledgers.Instance = ledgers;
            }
        }
示例#3
0
        void DoLedgerRow(Rect rect, Ledger ledger)
        {
            GUI.BeginGroup(rect);

            Rect widget = new Rect(0, 0, 200f, 24f);

            string ledgerLabel = ledger == selectedLedger
                ? TCText.ColoredText(ledger.Name, ColorLibrary.Gold)
                : ledger.Name;

            if (Widgets.ButtonText(widget, ledgerLabel, false))
            {
                selectedLedger = ledger;
            }

            GUI.EndGroup();
        }
        private void DoLedgerRow(Rect row, KeyValuePair <string, int> keyValuePair)
        {
            GUI.BeginGroup(row);

            Rect label      = new Rect(0, 0, 300f, 24f);
            Rect pointLabel = new Rect(304f, 0, 200f, 24f);

            Viewer viewer = ViewerController.GetViewer(keyValuePair.Key);

            string viewerLabel = selectedViewerName == keyValuePair.Key
                ? TCText.ColoredText(viewer.DisplayName, ColorLibrary.Gold)
                : viewer.DisplayName;

            if (Widgets.ButtonText(label, viewerLabel, false))
            {
                UpdateSelectedViewer(keyValuePair.Key);
            }

            Widgets.Label(pointLabel, $"{keyValuePair.Value} {ToolkitPointsSettings.pointsBaseName}");

            GUI.EndGroup();
        }
        public void DoWindowContents(Rect inRect)
        {
            Rect helpButton = new Rect(inRect.width - 120f, verticalSpacing, 90f, verticalHeight);

            if (Widgets.ButtonText(helpButton, "Help"))
            {
                Application.OpenURL("https://github.com/hodldeeznuts/ToolkitCore/wiki/Twitch-Chat-Connection");
            }

            Rect channelDetails = new Rect(0f, verticalSpacing, inRect.width / 2f, 64f);

            Widgets.Label(channelDetails, TCText.BigText("Channel Details"));

            float sectionVertical = channelDetails.y + (verticalSpacing * 2f);

            Rect label = new Rect(0f, sectionVertical, 200f, verticalHeight);

            Widgets.Label(label, "Channel:");

            label.y += verticalSpacing;

            Widgets.Label(label, "Bot Username:"******"OAuth Token:");

            Rect input = new Rect(200f, sectionVertical, 200f, verticalHeight);

            channel_username = Widgets.TextField(input, channel_username);

            input.y += verticalSpacing;

            bot_username = Widgets.TextField(input, bot_username);

            if (channel_username != "")
            {
                Rect copyUsername = new Rect(input.x + input.width + 10f, input.y, 210f, verticalHeight);

                if (Widgets.ButtonText(copyUsername, "Same as Channel"))
                {
                    bot_username = channel_username;
                }
            }

            input.y += verticalSpacing;

            Rect oauthToggle = new Rect(input.x + input.width + 10f, input.y, 60f, verticalHeight);

            if (showOauth)
            {
                oauth_token = Widgets.TextField(input, oauth_token);

                if (Widgets.ButtonText(oauthToggle, "Hide"))
                {
                    showOauth = !showOauth;
                }
            }
            else
            {
                Widgets.Label(input, new string('*', Math.Min(oauth_token.Length, 16)));

                if (Widgets.ButtonText(oauthToggle, "Show"))
                {
                    showOauth = !showOauth;
                }
            }

            Rect newToken = new Rect(oauthToggle.x + oauthToggle.width + 10f, input.y, 140f, verticalHeight);

            if (Widgets.ButtonText(newToken, "New OAuth Token"))
            {
                Application.OpenURL("https://www.twitchapps.com/tmi/");
            }

            input.y += verticalSpacing;

            if (Widgets.ButtonText(input, "Paste from Clipboard"))
            {
                oauth_token = GUIUtility.systemCopyBuffer;
            }

            // Connection

            Rect connectionDetails = new Rect(0f, input.y + (verticalSpacing * 2), inRect.width / 2f, 64f);

            Widgets.Label(connectionDetails, TCText.BigText("Connection"));

            sectionVertical = connectionDetails.y + (verticalSpacing * 2f);

            label.y = sectionVertical;
            input.y = sectionVertical;

            Widgets.Label(label, "Status:");

            Rect connectionButton = new Rect(input.x, input.y + verticalSpacing, input.width, verticalHeight);

            if (TwitchWrapper.Client != null && TwitchWrapper.Client.IsConnected)
            {
                Widgets.Label(input, TCText.ColoredText("Connected", Color.green));

                if (Widgets.ButtonText(connectionButton, "Disconnect"))
                {
                    TwitchWrapper.Client.Disconnect();
                }
            }
            else
            {
                Widgets.Label(input, TCText.ColoredText("Not Connected", Color.red));

                if (Widgets.ButtonText(connectionButton, "Connect"))
                {
                    TwitchWrapper.StartAsync();
                }
            }

            label.y += verticalSpacing * 3;

            Widgets.Label(label, "Auto Connect on Startup:");

            input.y = label.y;

            Widgets.Checkbox(input.position, ref connectOnGameStartup);

            label.y += verticalSpacing;

            Widgets.Label(label, "Allow Viewers to Whisper:");

            input.y = label.y;

            Widgets.Checkbox(input.position, ref allowWhispers);
        }
        public override void DoWindowContents(Rect inRect)
        {
            float columnOneX = 0f;
            float columnTwoX = inRect.width / 2f;

            float columnWidth = inRect.width / 2f;

            Rect eventName = new Rect(0, 0, 300, 24);

            Widgets.Label(eventName, TCText.ColoredText(Event.label, ColorLibrary.BrightPurple));
            Event.label = Widgets.TextField(new Rect(324, 0, 400, 24), Event.label);

            Widgets.DrawLineHorizontal(0, 32, inRect.width);

            // Triggers

            Rect triggerHeader = new Rect(columnOneX, 48f, 200f, 24f);

            Widgets.Label(triggerHeader, "<b>Triggers</b>");

            Rect triggerLabels = new Rect(columnOneX, 48f + 24f + (verticalSpacing * 2), columnWidth / 2f, 24f);
            Rect triggerValues = new Rect(columnWidth / 2f, triggerLabels.y, triggerLabels.width, 24f);

            Widgets.Label(triggerLabels, "Triggered by Bits:");
            Widgets.Checkbox(triggerValues.position, ref Event.bitTrigger);

            if (Event.bitTrigger)
            {
                triggerLabels.y += triggerLabels.height + verticalSpacing;
                triggerValues.y  = triggerLabels.y;

                Widgets.Label(triggerLabels, "Exact Amount");
                Widgets.Checkbox(triggerValues.position, ref Event.exactBitAmount);

                triggerLabels.y += triggerLabels.height + verticalSpacing;
                triggerValues.y  = triggerLabels.y;

                if (Event.exactBitAmount)
                {
                    Widgets.Label(triggerLabels, "Bits to Trigger");
                    string exactBitsBuffer = Event.bitsToTrigger.ToString();
                    Widgets.IntEntry(triggerValues, ref Event.bitsToTrigger, ref exactBitsBuffer, 10);
                }
                else
                {
                    Widgets.Label(triggerLabels, "Minimum Bits to Trigger");
                    string minimumBitsBuffer = Event.bitsMinimum.ToString();
                    Widgets.IntEntry(triggerValues, ref Event.bitsMinimum, ref minimumBitsBuffer, 10);

                    triggerLabels.y += triggerLabels.height + verticalSpacing;
                    triggerValues.y  = triggerLabels.y;

                    Widgets.Label(triggerLabels, "Infinite Maximum Bits");
                    Widgets.Checkbox(triggerValues.position, ref Event.bitsInfinite);

                    if (!Event.bitsInfinite)
                    {
                        triggerLabels.y += triggerLabels.height + verticalSpacing;
                        triggerValues.y  = triggerLabels.y;

                        Widgets.Label(triggerLabels, "Maximum Bits to Trigger");
                        string maximumBitsBuffer = Event.bitsMaximum.ToString();
                        Widgets.IntEntry(triggerValues, ref Event.bitsMaximum, ref maximumBitsBuffer, 10);
                    }
                }
            }

            triggerLabels.y += triggerLabels.height + (verticalSpacing * 4);
            triggerValues.y  = triggerLabels.y;

            Widgets.Label(triggerLabels, "Triggered by Donations:");
            Widgets.Checkbox(triggerValues.position, ref Event.tipTrigger);

            if (Event.tipTrigger)
            {
                triggerLabels.y += triggerLabels.height + verticalSpacing;
                triggerValues.y  = triggerLabels.y;

                Widgets.Label(triggerLabels, "Exact Amount");
                Widgets.Checkbox(triggerValues.position, ref Event.exactTipAmount);

                triggerLabels.y += triggerLabels.height + verticalSpacing;
                triggerValues.y  = triggerLabels.y;

                if (Event.exactTipAmount)
                {
                    Widgets.Label(triggerLabels, "Donation to Trigger");

                    string exactTipBuffer = Event.tipToTrigger.ToString("C", CultureInfo.CurrentCulture);
                    WidgetExtensions.TextFieldNumericDouble(triggerValues, ref Event.tipToTrigger, ref exactTipBuffer);
                }
                else
                {
                    Widgets.Label(triggerLabels, "Minimum Donation to Trigger");
                    string minimumTipBuffer = Event.tipMinimum.ToString("C", CultureInfo.CurrentCulture);
                    WidgetExtensions.TextFieldNumericDouble(triggerValues, ref Event.tipMinimum, ref minimumTipBuffer);

                    triggerLabels.y += triggerLabels.height + verticalSpacing;
                    triggerValues.y  = triggerLabels.y;

                    Widgets.Label(triggerLabels, "Infinite Maximum Donation");
                    Widgets.Checkbox(triggerValues.position, ref Event.tipInfinite);

                    if (!Event.tipInfinite)
                    {
                        triggerLabels.y += triggerLabels.height + verticalSpacing;
                        triggerValues.y  = triggerLabels.y;

                        Widgets.Label(triggerLabels, "Maximum Donation to Trigger");
                        string maximumTipBuffer = Event.tipMaximum.ToString("C", CultureInfo.CurrentCulture);
                        WidgetExtensions.TextFieldNumericDouble(triggerValues, ref Event.tipMaximum, ref maximumTipBuffer);
                    }
                }
            }

            triggerLabels.y += triggerLabels.height + (verticalSpacing * 4);
            triggerValues.y  = triggerLabels.y;

            Widgets.Label(triggerLabels, "Triggered by Subs:");
            Widgets.Checkbox(triggerValues.position, ref Event.subTrigger);

            if (Event.subTrigger)
            {
                triggerLabels.y += triggerLabels.height + (verticalSpacing);
                triggerValues.y  = triggerLabels.y;

                Widgets.Label(triggerLabels, "First Time Subs");
                Widgets.Checkbox(triggerValues.position, ref Event.firstTimeSubs);

                triggerLabels.y += triggerLabels.height + (verticalSpacing);
                triggerValues.y  = triggerLabels.y;

                Widgets.Label(triggerLabels, "Resubs");
                Widgets.Checkbox(triggerValues.position, ref Event.reSubs);

                triggerLabels.y += triggerLabels.height + (verticalSpacing);
                triggerValues.y  = triggerLabels.y;

                Widgets.Label(triggerLabels, "Gift Subs");
                Widgets.Checkbox(triggerValues.position, ref Event.giftSubs);

                triggerLabels.y += triggerLabels.height + (verticalSpacing * 2);
                triggerValues.y  = triggerLabels.y;

                Widgets.Label(triggerLabels, "Community Subs");
                Widgets.Checkbox(triggerValues.position, ref Event.communitySubs);

                triggerLabels.y += triggerLabels.height + (verticalSpacing * 2);
                triggerValues.y  = triggerLabels.y;

                Widgets.Label(triggerLabels, "Tier One Subs");
                Widgets.Checkbox(triggerValues.position, ref Event.tierOneSubs);

                triggerLabels.y += triggerLabels.height + (verticalSpacing);
                triggerValues.y  = triggerLabels.y;

                Widgets.Label(triggerLabels, "Tier Two Subs");
                Widgets.Checkbox(triggerValues.position, ref Event.tierTwoSubs);

                triggerLabels.y += triggerLabels.height + (verticalSpacing);
                triggerValues.y  = triggerLabels.y;

                Widgets.Label(triggerLabels, "Tier Three Subs");
                Widgets.Checkbox(triggerValues.position, ref Event.tierThreeSubs);
            }

            triggerLabels.y += triggerLabels.height + (verticalSpacing * 4);
            triggerValues.y  = triggerLabels.y;

            // Actions

            Rect actionHeader = new Rect(columnTwoX, 48f, 400f + WidgetRow.DefaultGap, 24f);

            GUI.BeginGroup(actionHeader);

            Rect actionHeaderLabel = new Rect(0f, 0f, 200f, 24f);

            Widgets.Label(actionHeaderLabel, "<b>Actions</b>");

            Rect addActionButton = new Rect(actionHeaderLabel.width + WidgetRow.DefaultGap, 0f, 200f, 24f);

            if (Widgets.ButtonText(addActionButton, "Add Action"))
            {
                List <FloatMenuOption> menuOptions = FloatMenuOptions();

                if (menuOptions.Count < 1)
                {
                    return;
                }

                Find.WindowStack.Add(new FloatMenu(FloatMenuOptions()));
            }

            GUI.EndGroup();

            Rect actionList = new Rect(columnTwoX, actionHeader.y + actionHeader.height + 8f, columnWidth, 24f);

            foreach (string actionDefLabel in actionDefLabels)
            {
                GUI.BeginGroup(actionList);
                Rect label = new Rect(0f, 0f, 200f, 24f);
                Widgets.Label(label, actionDefLabel);

                Rect remove = new Rect(label.x + label.width + WidgetRow.DefaultGap, 0, 200f, 24f);
                if (Widgets.ButtonText(remove, "Remove"))
                {
                    Action actionToRemove = DefDatabase <Action> .AllDefs.Where((x) => x.LabelCap == actionDefLabel).FirstOrDefault();

                    if (actionToRemove == null)
                    {
                        Log.Error($"Tried to remove {actionDefLabel} but it was null form DefDatabase");
                    }

                    Event.actionDefs = Event.actionDefs.Where((x) => x != actionToRemove.defName).ToList();

                    //Event.actionDefs = Event.actionDefs.Where((x) => x != DefDatabase<Action>.AllDefs.Where((y) => y.LabelCap == x).FirstOrDefault().defName).ToList();
                    CacheActionDefLabels();
                }
                GUI.EndGroup();
            }
        }
        public void DoWindowContents(Rect inRect)
        {
            Rect channelDetails = new Rect(0f, verticalSpacing, inRect.width, 64f);

            Widgets.Label(channelDetails, TCText.BigText("Channel Details"));

            float sectionVertical = channelDetails.y + (verticalSpacing);

            Rect label = new Rect(0f, sectionVertical, 250f, verticalHeight);

            Widgets.Label(label, "Channel:");

            label.y += verticalSpacing;

            Widgets.Label(label, "Bot Username:"******"OAuth Token:");

            Rect input = new Rect(250f, sectionVertical, 150f, verticalHeight);

            channel_username = Widgets.TextField(input, channel_username);

            input.y += verticalSpacing;

            bot_username = Widgets.TextField(input, bot_username);

            input.y += verticalSpacing;

            Rect oauthToggle = new Rect(input.x + input.width + 10f, input.y, 60f, verticalHeight);

            if (showOauth)
            {
                oauth_token = Widgets.TextField(input, oauth_token);

                if (Widgets.ButtonText(oauthToggle, "Hide"))
                {
                    showOauth = !showOauth;
                }
            }
            else
            {
                Widgets.Label(input, new string('*', Math.Min(oauth_token.Length, 16)));

                if (Widgets.ButtonText(oauthToggle, "Show"))
                {
                    showOauth = !showOauth;
                }
            }

            Rect newToken = new Rect(500f, input.y, 140f, verticalHeight);

            if (Widgets.ButtonText(newToken, "New OAuth Token"))
            {
                Application.OpenURL("https://www.twitchapps.com/tmi/");
            }

            input.y += verticalSpacing;

            if (Widgets.ButtonText(input, "Paste from Clipboard"))
            {
                oauth_token = GUIUtility.systemCopyBuffer;
            }

            // Connection

            Rect connectionDetails = new Rect(0f, input.y + (verticalSpacing), inRect.width, 64f);

            Widgets.Label(connectionDetails, TCText.BigText("Connection"));

            sectionVertical = connectionDetails.y + (verticalSpacing);

            label.y = sectionVertical;
            input.y = sectionVertical;

            Widgets.Label(label, "Status:");

            Rect connectionButton = new Rect(input.x, input.y + verticalSpacing, input.width, verticalHeight);

            if (TwitchWrapper.Client != null && TwitchWrapper.Client.IsConnected)
            {
                Widgets.Label(input, TCText.ColoredText("Connected", Color.green));

                if (Widgets.ButtonText(connectionButton, "Disconnect"))
                {
                    TwitchWrapper.Client.Disconnect();
                }
            }
            else
            {
                Widgets.Label(input, TCText.ColoredText("Not Connected", Color.red));

                if (Widgets.ButtonText(connectionButton, "Connect"))
                {
                    TwitchWrapper.StartAsync(true);
                }
            }

            label.y += verticalSpacing * 2;
            float secondMenu = label.y;

            Widgets.Label(label, "Auto Connect on Startup:");
            input.y = label.y;
            Widgets.Checkbox(input.position, ref connectOnGameStartup);

            label.y += verticalSpacing * 1;
            Widgets.Label(label, "Show welcome message:");
            input.y = label.y;
            Widgets.Checkbox(input.position, ref showWelcomeMessage);

            label.y += verticalSpacing * 1;
            Widgets.Label(label, "Use whispers as reply:");
            input.y = label.y;
            Widgets.Checkbox(input.position, ref useWhispers);

            Rect subsMenu = new Rect(350f, secondMenu, 250f, 25f);

            Widgets.Label(subsMenu, "Subs Only:");
            subsMenu.x += 150f;
            Widgets.Checkbox(subsMenu.position, ref subsOnlyCommands);

            subsMenu.x -= 150f;
            subsMenu.y += verticalSpacing;
            Widgets.Label(subsMenu, "User Timeout:");
            subsMenu.x += 150f;
            //subsMenu.y -= 15f;
            userCommandTimeout = Widgets.HorizontalSlider(subsMenu, userCommandTimeout, 0f, 20f, false, userCommandTimeout != 0 ? userCommandTimeout + " seconds" : "Timeout disabled", null, null, 1);

            subsMenu.x -= 150f;
            subsMenu.y += verticalSpacing;
            Widgets.Label(subsMenu, "Spammy replies:");
            subsMenu.x += 150f;
            Widgets.Checkbox(subsMenu.position, ref enableSpammyMessages);

            Rect footer = new Rect(0f, inRect.height - 10f, inRect.width, 20f);

            Widgets.Label(footer, "Special thanks to hodldeeznuts!");

            footer.y += verticalSpacing * 1;

            Widgets.Label(footer, "Without him this wouldnt be possible!");
        }
示例#8
0
        public override void DoWindowContents(Rect inRect)
        {
            Listing_Standard listing = new Listing_Standard();

            listing.Begin(inRect);

            listing.Label("Twitch Message Log");

            listing.ColumnWidth = inRect.width * 0.30f;

            if (TwitchWrapper.Client != null)
            {
                bool connected = TwitchWrapper.Client.IsConnected;

                listing.Label(connected ? TCText.ColoredText("Connected", Color.green) : TCText.ColoredText("Not Connected", Color.red));

                if (listing.ButtonText(connected ? "Disconnect" : "Connect"))
                {
                    TwitchWrapper.Client.Disconnect();
                }
            }
            else
            {
                if (listing.ButtonText("Reset Twitch Client"))
                {
                    TwitchWrapper.StartAsync();
                }
            }

            listing.End();

            float columnWidth = inRect.width * 0.49f;

            Rect headerOne = new Rect(0, 100f, columnWidth, 32f);

            Widgets.Label(headerOne, "Message Log");

            Rect messageBoxOne = new Rect(0, 132f, columnWidth, 200f);

            string messageBoxText = "";

            foreach (ChatMessage chatMessage in MessageLog.LastChatMessages)
            {
                messageBoxText += $"{chatMessage.DisplayName}: {chatMessage.Message}\n";
            }

            Widgets.TextArea(messageBoxOne, messageBoxText, true);

            Rect headerTwo = new Rect(headerOne);

            headerTwo.x += columnWidth + 10f;
            Widgets.Label(headerTwo, "Whisper Log");

            Rect messageBoxTwo = new Rect(messageBoxOne);

            messageBoxTwo.x += messageBoxTwo.width + 10f;

            string whisperBoxText = "";

            foreach (WhisperMessage whisperMessage in MessageLog.LastWhisperMessages)
            {
                whisperBoxText += $"{whisperMessage.DisplayName}: {whisperMessage.Message}\n";
            }

            Widgets.TextArea(messageBoxTwo, whisperBoxText, true);
        }