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; } }
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; } }
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!"); }
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); }