Skip to content
This repository has been archived by the owner on Feb 1, 2024. It is now read-only.

Commit

Permalink
Updated master to AT 1.3.8-14 (Servermod 3.7.0) (#109)
Browse files Browse the repository at this point in the history
* CLOSESTDOOR command. For modifying the closest door to the player
* LOCKDOORS command. For locking/unlocking doors when interacted with. Toggable.
* RESPAWNLOCK command. For stopping respawns. Toggable.
* GRENADEMODE command. Adds a grenade to the users inventory when a grenade is used. Toggable.
* INFINITEITEM command. Adds a new item of the same type when used/dropped. Toggable.
* Discord Webhook feature & API
* EditorConfig
* More debug
* Utility API Class
* New Warp-point system and save format (JSON)
* PlayerFile format, will automatically upgrade (temporarily disabled)
* All command classes now contain their own command aliases
* Playerfiles is now stored as a serialized class
* Refactored ATFileManager
  • Loading branch information
Rnen authored Jul 22, 2020
1 parent a8e1a2e commit fa79968
Show file tree
Hide file tree
Showing 64 changed files with 4,078 additions and 2,635 deletions.
119 changes: 119 additions & 0 deletions AdminToolbox/AdminToolbox/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# To learn more about .editorconfig see https://aka.ms/editorconfigdocs
###############################
# Core EditorConfig Options #
###############################
root = true
# All files
[*]
indent_style = tab
# Code files
[*.cs]
charset = utf-8
indent_size = 4
insert_final_newline = true
trim_trailing_whitespaces = true
###############################
# .NET Coding Conventions #
###############################
[*.cs]
# Organize usings
dotnet_sort_system_directives_first = true
# this. preferences
dotnet_style_qualification_for_field = false:silent
dotnet_style_qualification_for_property = false:silent
dotnet_style_qualification_for_method = false:silent
dotnet_style_qualification_for_event = false:silent
# Language keywords vs BCL types preferences
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
dotnet_style_predefined_type_for_member_access = true:suggestion
# Parentheses preferences
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:suggestion
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:suggestion
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:suggestion
dotnet_style_parentheses_in_other_operators = always_for_clarity:suggestion
# Modifier preferences
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
dotnet_style_readonly_field = true:suggestion
# Expression-level preferences
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
dotnet_prefer_inferred_tuple_names = true:suggestion
dotnet_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_auto_properties = true:suggestion
dotnet_style_prefer_conditional_expression_over_assignment = false:suggestion
dotnet_style_prefer_conditional_expression_over_return = false:suggestion
###############################
# Naming Conventions #
###############################
# Style Definitions
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
# Use PascalCase for constant fields
dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields
dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style
dotnet_naming_symbols.constant_fields.applicable_kinds = field
dotnet_naming_symbols.constant_fields.applicable_accessibilities = *
dotnet_naming_symbols.constant_fields.required_modifiers = const
###############################
# C# Coding Conventions #
###############################
[*.cs]
# var preferences
csharp_style_var_for_built_in_types = false:suggestion
csharp_style_var_when_type_is_apparent = false:suggestion
csharp_style_var_elsewhere = false:suggestion
# Expression-bodied members
csharp_style_expression_bodied_methods = true:suggestion
csharp_style_expression_bodied_constructors = true:suggestion
csharp_style_expression_bodied_operators = true:suggestion
csharp_style_expression_bodied_properties = true:suggestion
csharp_style_expression_bodied_indexers = true:suggestion
csharp_style_expression_bodied_accessors = true:suggestion
# Pattern matching preferences
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
# Null-checking preferences
csharp_style_throw_expression = true:suggestion
csharp_style_conditional_delegate_call = true:suggestion
# Modifier preferences
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
# Expression-level preferences
csharp_prefer_braces = true:silent
csharp_style_deconstructed_variable_declaration = true:suggestion
csharp_prefer_simple_default_expression = true:suggestion
csharp_style_pattern_local_over_anonymous_function = true:suggestion
csharp_style_inlined_variable_declaration = true:suggestion
###############################
# C# Formatting Rules #
###############################
# New line preferences
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_between_query_expression_clauses = true
# Indentation preferences
csharp_indent_case_contents = true
csharp_indent_switch_labels = true
csharp_indent_labels = flush_left
# Space preferences
csharp_space_after_cast = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_around_binary_operators = before_and_after
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
# Wrapping preferences
csharp_preserve_single_line_statements = true
csharp_preserve_single_line_blocks = true
87 changes: 59 additions & 28 deletions AdminToolbox/AdminToolbox/API/ATWeb.cs
Original file line number Diff line number Diff line change
@@ -1,41 +1,38 @@
using Smod2.Commands;
using Smod2;
using Smod2.API;
using System.Collections.Generic;
using System;
using System.Linq;
using System.Net;
using Smod2;
using UnityEngine.Networking;


namespace AdminToolbox.API
{
using API.Webhook;
/// <summary>
/// Static <see cref="AdminToolbox"/> class that contains all of the plugins web-based methods
/// </summary>
public static class ATWeb
{
private static AdminToolbox Plugin => AdminToolbox.singleton;

private static void Debug(string str) => Plugin.Debug("[ATWeb]: " + str);

/// <summary>
/// Class for storing the latest GitHub release info
/// </summary>
public class AT_LatestReleaseInfo
{
readonly string title;
readonly string version;
readonly string author;
readonly string downloadLink;

#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
public string Title => title;
public string Version => version;
public string Author => author;
public string DownloadLink => downloadLink;
public string Title { get; }
public string Version { get; }
public string Author { get; }
public string DownloadLink { get; }

public AT_LatestReleaseInfo(string Title, string Version, string Author, string DownloadLink)
{
this.title = Title;
this.version = Version;
this.author = Author;
this.downloadLink = DownloadLink;
this.Title = Title;
this.Version = Version;
this.Author = Author;
this.DownloadLink = DownloadLink;
}
#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
}
Expand All @@ -49,40 +46,74 @@ public static AT_LatestReleaseInfo GetOnlineInfo(AdminToolbox plugin)
|| ConfigManager.Manager.Config.GetBoolValue("admintoolbox_disable_networking", false)) return new AT_LatestReleaseInfo(plugin.Details.name, plugin.Details.version, plugin.Details.author, "");
string rawResponse = string.Empty;
string apiURL = "https://api.github.com/repos/Rnen/AdminToolbox/releases/latest";
string _title = "", _version = "", _author = "", _dllink ="";
string _title = "", _version = "", _author = "", _dllink = "";

try
{
using (UnityWebRequest ww = UnityWebRequest.Get(apiURL))
{
ww.SendWebRequest();
DateTime timer = DateTime.Now.AddSeconds(2);
while (!ww.isDone || !ww.downloadHandler.isDone && DateTime.Now < timer) { }
while (!ww.isDone || (!ww.downloadHandler.isDone && DateTime.Now < timer)) { }
rawResponse = ww.downloadHandler.text;
if (string.IsNullOrEmpty(rawResponse))
throw new Exception();
throw new Exception("[AdminToolbox]: GitHub web request response was NullOrEmpty!");
string FindValue(string key)
{
plugin.Debug("Searched: " + key);
//plugin.Debug("Searched: " + key);
string str = rawResponse.Split(Environment.NewLine.ToCharArray()).Where(s => s.Trim().StartsWith("\"" + key)).FirstOrDefault().Split(new[] { ':' }, 2).Last().Replace("\"", string.Empty).Trim(',').Trim();
plugin.Debug("Found: " + str);
if (key.ToLower() == "tag_name") return str.Split('-').FirstOrDefault();
//plugin.Debug("Found: " + str);
return str;
}
_title = FindValue("name");
_version = FindValue("tag_name");
_author = FindValue("login");
_dllink = FindValue("html_url"); //FindValue("browser_download_url");
if (string.IsNullOrEmpty(_version))
throw new Exception();
throw new Exception("[AdminToolbox]: GitHub version was NullOrEmpty!");
}
}
catch
catch (Exception e)
{
Debug("Exception: " + e.Message);
plugin.Info(" \n\n - Downloading online version failed, skipping..." + "\n \n");
return new AT_LatestReleaseInfo(plugin.Details.name, plugin.Details.version, plugin.Details.author, "");
}
return new AT_LatestReleaseInfo(_title,_version,_author,_dllink);
return new AT_LatestReleaseInfo(_title, _version, _author, _dllink);
}

internal static bool NewerVersionAvailable()
{
if (Plugin == null) return false;
string thisVersion = Plugin.Details.version.Split('-').FirstOrDefault().Replace(".", string.Empty);
string onlineVersion = Plugin.GetGitReleaseInfo().Version.Split('-').FirstOrDefault().Replace(".", string.Empty);

if (int.TryParse(thisVersion, out int thisV)
&& int.TryParse(onlineVersion, out int onlineV)
&& onlineV > thisV)
return true;
else return false;
}

internal static string SendWebhook(DiscordWebhook discordWebHook, string url)
{
if (!string.IsNullOrEmpty(url) && Uri.TryCreate(url, UriKind.Absolute, out Uri uri))
{
//string jsonData = UnityEngine.JsonUtility.ToJson(discordWebHook, true);
string jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(discordWebHook);
return WebPost(uri, jsonData);
}
else
return "Failed creating URI of WebHook link: " + url;
}

private static string WebPost(Uri uri, string rawJsonData)
{
using (WebClient wb = new WebClient())
{
wb.Headers[HttpRequestHeader.ContentType] = "application/json";
return wb.UploadString(uri, "POST", rawJsonData);
}
}
}
}
51 changes: 51 additions & 0 deletions AdminToolbox/AdminToolbox/API/DiscordWebhook.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
namespace AdminToolbox.API.Webhook
{
public class Image
{
public string url;
}
public class Author
{
public string name = "";
public string url = "";
public string icon_url = "";
}
public class Field
{
public string name;
public string value;
public string inline = "false";
public Field() { }

public Field(Field field)
{
this.name = field.name;
this.value = field.value;
this.inline = field.inline;
}

public override string ToString()
{
return "Name: " + this.name + " Value: " + this.value + " InLine: " + inline;
}
}
public class EmbedData
{
public Author author = new Author();
public string title = "";
public string url = "";
public string description = "";
public int color = 12395008;
public Field[] fields = new Field[0];
public Image image;
public Image thumbnail;
}

public class DiscordWebhook
{
public string username = "AdminToolbox";
public string avatar_url = "https://puu.sh/D0DRU.png";
public string content = "";
public EmbedData[] embeds = new EmbedData[1] { new EmbedData() };
}
}
Loading

0 comments on commit fa79968

Please sign in to comment.