{"page":"api/getting-started","section":"Getting Started","lang":"csharp","code":"namespace Oxide.Plugins\n{\n [Info(\"Epic Stuff\", \"Unknown Author\", \"0.1.0\")]\n [Description(\"Makes epic stuff happen\")]\n class EpicStuff : CovalencePlugin\n {\n private void Init()\n {\n Puts(\"A baby plugin is born!\");\n }\n\n // The rest of the code magic\n\n // TODO (you): Make more epic stuff\n }\n}"} {"page":"api/getting-started","section":"Namespace","lang":"csharp","code":"namespace Oxide.Plugins"} {"page":"api/getting-started","section":"Title","lang":"csharp","code":"\"Epic Stuff\""} {"page":"api/getting-started","section":"Author","lang":"csharp","code":"\"Unknown Author\""} {"page":"api/getting-started","section":"Version","lang":"csharp","code":"\"0.1.0\""} {"page":"api/getting-started","section":"Description","lang":"csharp","code":"[Description(\"Makes epic stuff happen\")]"} {"page":"api/getting-started","section":"Class Name","lang":"csharp","code":"class EpicStuff"} {"page":"api/getting-started","section":"Plugin Type","lang":"csharp","code":"class EpicStuff : CovalencePlugin"} {"page":"api/hooks","section":"Basic example","lang":"csharp","code":"private bool CanUserLogin(string name, string id, string ip)\n{\n Puts(\"No one can connect\");\n return false; // By returning false, no players may connect to this server\n}"} {"page":"api/hooks","section":"Calling a hook from a plugin reference","lang":"csharp","code":"bool result = EpicStuff.CallHook(\"CanDoSomething\");\nif (result)\n{\n Puts(\"Player can do the thing!\");\n}"} {"page":"api/hooks","section":"Calling a hook globally","lang":"csharp","code":"bool result = Interface.CallHook(\"CanDoSomething\");\nif (result)\n{\n Puts(\"Player can do the thing!\");\n}"} {"page":"api/hooks","section":"Unsubscribe from hook","lang":"csharp","code":"bool chatFeatureEnabled = false;\n\nvoid Init()\n{\n if (!chatFeatureEnabled)\n {\n Unsubscribe(\"OnUserChat\");\n }\n}\n\nobject OnUserChat(IPlayer player, string message)\n{\n // Do stuff\n}"} {"page":"api/hooks","section":"Subscribe to hook","lang":"csharp","code":"[Command(\"test\")]\nprivate void TestCommand(IPlayer player, string command, string[] args)\n{\n if (player.IsAdmin)\n {\n Puts(\"Enabling chat behavior\");\n Subscribe(\"OnUserChat\");\n }\n}"} {"page":"api/hooks","section":"Hook overloading","lang":"csharp","code":"int EpicNumber = 42;\nstring EpicString = \"Whoa\";\n\nInterface.CallHook(\"EpicHook\", EpicNumber);\nInterface.CallHook(\"EpicHook\", EpicNumber, EpicString);"} {"page":"api/hooks","section":"Hook overloading","lang":"csharp","code":"private void EpicHook(int epicNumber)\n{\n Puts($\"Received a number '{epicNumber}'\");\n}\n\nprivate void EpicHook(int epicNumber, string epicString)\n{\n Puts($\"Received a number '{epicNumber}' AND string '{epicString}'\");\n}"} {"page":"api/commands","section":"Chat commands","lang":"csharp","code":"[Command(\"test\")]\nprivate void TestCommand(IPlayer player, string command, string[] args)\n{\n player.Reply(\"Test successful!\");\n}"} {"page":"api/commands","section":"Console commands","lang":"csharp","code":"[Command(\"epicstuff.test\")]\nprivate void TestCommand(IPlayer player, string command, string[] args)\n{\n player.Reply(\"Test successful!\");\n}"} {"page":"api/commands","section":"Command permissions","lang":"csharp","code":"[Command(\"test\"), Permission(\"epicstuff.use\")]\nprivate void TestCommand(IPlayer player, string command, string[] args)\n{\n player.Reply(\"Test successful!\");\n}"} {"page":"api/player","section":"Name","lang":"csharp","code":"string name = player.Name;"} {"page":"api/player","section":"Id","lang":"csharp","code":"string id = player.Id;"} {"page":"api/player","section":"Address","lang":"csharp","code":"string address = player.Address;"} {"page":"api/player","section":"Ping","lang":"csharp","code":"int ping = player.Ping;"} {"page":"api/player","section":"Language","lang":"csharp","code":"CultureInfo language = player.Language;"} {"page":"api/player","section":"IsConnected","lang":"csharp","code":"if (player.IsConnected)\n{\n player.Reply(\"You are connected\");\n}"} {"page":"api/player","section":"IsServer","lang":"csharp","code":"if (player.IsServer)\n{\n player.Reply(\"You are the server\");\n}"} {"page":"api/player","section":"IsAdmin","lang":"csharp","code":"if (player.IsAdmin)\n{\n player.Reply(\"You are an admin\");\n}"} {"page":"api/player","section":"IsBanned","lang":"csharp","code":"if (player.IsBanned)\n{\n player.Reply(\"You are banned\");\n}"} {"page":"api/player","section":"BanTimeRemaining","lang":"csharp","code":"TimeSpan banTimeRemaining = player.BanTimeRemaining;"} {"page":"api/player","section":"Ban","lang":"csharp","code":"player.Ban(\"reason\"); // Ban player indefinitely\nplayer.Ban(\"reason\", new TimeSpan(2, 0, 0)); // Ban player for 2 hours"} {"page":"api/player","section":"Unban","lang":"csharp","code":"player.Unban();"} {"page":"api/player","section":"Kick","lang":"csharp","code":"player.Kick(\"reason\");"} {"page":"api/player","section":"Health","lang":"csharp","code":"float health = player.Health;\nplayer.Health = 100f;"} {"page":"api/player","section":"MaxHealth","lang":"csharp","code":"float maxHealth = player.MaxHealth;\nplayer.MaxHealth = 50f;"} {"page":"api/player","section":"Heal","lang":"csharp","code":"player.Heal(100f);"} {"page":"api/player","section":"Hurt","lang":"csharp","code":"player.Hurt(50f);"} {"page":"api/player","section":"Kill","lang":"csharp","code":"player.Kill();"} {"page":"api/player","section":"Rename","lang":"csharp","code":"player.Rename(\"EpicName\");"} {"page":"api/player","section":"Teleport","lang":"csharp","code":"float x = 1;\nfloat y = 2;\nfloat z = 3;\nplayer.Teleport(x, y, z);\n\nGenericPosition position = new GenericPosition(x, y, z);\nplayer.Teleport(position);"} {"page":"api/player","section":"Position","lang":"csharp","code":"GenericPosition position = player.Position();"} {"page":"api/player","section":"Message","lang":"csharp","code":"player.Message(\"hello world\");"} {"page":"api/player","section":"Reply","lang":"csharp","code":"player.Reply(\"hello world\");"} {"page":"api/player","section":"Command","lang":"csharp","code":"player.Command(\"command\", arg1, arg2 /* , ... */ );"} {"page":"api/player","section":"HasPermission","lang":"csharp","code":"if (player.HasPermission(\"epicstuff.use\"))\n{\n player.Reply(\"You have the epic permission\");\n}"} {"page":"api/player","section":"GrantPermission","lang":"csharp","code":"player.GrantPermission(\"epicstuff.use\");"} {"page":"api/player","section":"RevokePermission","lang":"csharp","code":"player.RevokePermission(\"epicstuff.use\");"} {"page":"api/player","section":"BelongsToGroup","lang":"csharp","code":"if (player.BelongsToGroup(\"admin\"))\n{\n player.Reply(\"You are in the admin group\");\n}"} {"page":"api/player","section":"AddToGroup","lang":"csharp","code":"player.AddToGroup(\"admin\");"} {"page":"api/player","section":"RemoveFromGroup","lang":"csharp","code":"player.RemoveFromGroup(\"admin\");"} {"page":"api/permissions","section":"Basic usage","lang":"csharp","code":"namespace Oxide.Plugins\n{\n [Info(\"Epic Stuff\", \"Unknown Author\", \"0.1.0\")]\n [Description(\"Makes epic stuff happen\")]\n class EpicStuff : CovalencePlugin\n {\n private void Init()\n {\n permission.RegisterPermission(\"epicstuff.use\", this);\n }\n\n private void OnUserConnected(IPlayer player)\n {\n if (player.HasPermission(\"epicstuff.use\"))\n {\n // Player has permission, do special stuff for them\n }\n }\n }\n}"} {"page":"api/permissions","section":"Get all groups","lang":"csharp","code":"string[] groups = permission.GetGroups();"} {"page":"api/permissions","section":"Check if group exists","lang":"csharp","code":"bool GroupExists = permission.GroupExists(\"GroupName\");"} {"page":"api/permissions","section":"Create a group","lang":"csharp","code":"bool GroupCreated = permission.CreateGroup(\"GroupName\", \"Group Title\", 0);"} {"page":"api/permissions","section":"Remove a group","lang":"csharp","code":"bool GroupRemoved = permission.RemoveGroup(\"GroupName\");"} {"page":"api/permissions","section":"Check if group has a permission","lang":"csharp","code":"bool GroupHasPermission = permission.GroupHasPermission(\"GroupName\", \"epicstuff.use\");"} {"page":"api/permissions","section":"Grant permission to a group","lang":"csharp","code":"permission.GrantGroupPermission(\"GroupName\", \"epicstuff.use\", this);"} {"page":"api/permissions","section":"Revoke permission from a group","lang":"csharp","code":"permission.RevokeGroupPermission(\"GroupName\", \"epicstuff.use\");"} {"page":"api/permissions","section":"Get the rank for a group","lang":"csharp","code":"int GroupRank = permission.GetGroupRank(\"GroupName\");"} {"page":"api/permissions","section":"Get the title for a group","lang":"csharp","code":"string GroupTitle = permission.GetGroupTitle(\"GroupName\");"} {"page":"api/permissions","section":"Get parent group for a group","lang":"csharp","code":"string GroupParent = permission.GetGroupParent(\"GroupName\");"} {"page":"api/permissions","section":"Get permissions for a group","lang":"csharp","code":"string[] permissions = permission.GetGroupPermissions(\"GroupName\", false);"} {"page":"api/permissions","section":"Migrate group","lang":"csharp","code":"permission.MigrateGroup(\"OldGroupName\", \"NewGroupName\");"} {"page":"api/permissions","section":"Get permissions granted to player","lang":"csharp","code":"string[] UserPermissions = permission.GetUserPermissions(\"playerID\");"} {"page":"api/permissions","section":"Check if player has a permission","lang":"csharp","code":"bool UserHasPermission = permission.UserHasPermission(\"playerID\", \"epicstuff.use\");"} {"page":"api/permissions","section":"Add player to a group","lang":"csharp","code":"permission.AddUserGroup(\"playerID\", \"GroupName\");"} {"page":"api/permissions","section":"Remove player from a group","lang":"csharp","code":"permission.RemoveUserGroup(\"playerID\", \"GroupName\");"} {"page":"api/permissions","section":"Check if player is in a group","lang":"csharp","code":"bool UserHasGroup = permission.UserHasGroup(\"playerID\", \"GroupName\");"} {"page":"api/permissions","section":"Grant permission to a player","lang":"csharp","code":"permission.GrantUserPermission(\"playerID\", \"epicstuff.use\", this);"} {"page":"api/permissions","section":"Revoke permission from a player","lang":"csharp","code":"permission.RevokeUserPermission(\"playerID\", \"epicstuff.use\");"} {"page":"api/permissions","section":"Get all registered permissions","lang":"csharp","code":"string[] permissions = permission.GetPermissions();"} {"page":"api/permissions","section":"Check if a permission exists","lang":"csharp","code":"bool PermissionExists = permission.PermissionExists(\"epicstuff.use\", this);"} {"page":"api/permissions","section":"Register a permission","lang":"csharp","code":"permission.RegisterPermission(\"epicstuff.use\", this);"} {"page":"api/configuration","section":"Creating","lang":"csharp","code":"protected override void LoadDefaultConfig()\n{\n LogWarning(\"Creating a new configuration file\");\n Config[\"ShowJoinMessage\"] = true;\n Config[\"ShowLeaveMessage\"] = true;\n Config[\"JoinMessage\"] = \"Welcome to this server\";\n Config[\"LeaveMessage\"] = \"Goodbye\";\n}"} {"page":"api/configuration","section":"Updating","lang":"csharp","code":"[Command(\"test\")]\nprivate void TestCommand(IPlayer player, string command, string[] args)\n{\n Config[\"ShowJoinMessage\"] = !(bool)Config[\"ShowJoinMessage\"];\n SaveConfig();\n}"} {"page":"api/configuration","section":"Advanced configuration","lang":"csharp","code":"private class PluginConfig\n{\n public bool ShowJoinMessage;\n public bool ShowLeaveMessage;\n public string JoinMessage;\n public string LeaveMessage;\n}"} {"page":"api/configuration","section":"Updating","lang":"csharp","code":"private void SaveConfig()\n{\n Config.WriteObject(config, true);\n}"} {"page":"api/configuration","section":"Loading","lang":"csharp","code":"private PluginConfig config;\n\nprivate void Init()\n{\n config = Config.ReadObject();\n}\n\nprotected override void LoadDefaultConfig()\n{\n Config.WriteObject(GetDefaultConfig(), true);\n}\n\nprivate PluginConfig GetDefaultConfig()\n{\n return new PluginConfig\n {\n ShowJoinMessage = true,\n ShowLeaveMessage = true,\n JoinMessage = \"Welcome to this server\",\n LeaveMessage = \"Goodbye\"\n };\n}"} {"page":"api/data-files","section":"Creating/saving the file","lang":"csharp","code":"DynamicConfigFile dataFile = Interface.Oxide.DataFileSystem.GetDatafile(\"MyDataFile\");\n\ndataFile[\"EpicString\"] = \"EpicValue\";\ndataFile[\"EpicNumber\"] = 42;\n\ndataFile.Save();"} {"page":"api/data-files","section":"Creating/saving the file","lang":"json","code":"{\n \"EpicString\" : \"EpicValue\",\n \"EpicNumber\" : 42\n}"} {"page":"api/data-files","section":"Accessing data by key","lang":"csharp","code":"// Check if the EpicString exists\nif (dataFile[\"EpicString\"] != null)\n{\n Puts(dataFile[\"EpicString\"]); // Outputs: EpicValue\n}\n\n// Check if the EpicNumber exists\nif (dataFile[\"EpicNumber\"] != null)\n{\n Puts(dataFile[\"EpicNumber\"]); // Outputs: 42\n}"} {"page":"api/data-files","section":"Removing a key","lang":"csharp","code":"dataFile.Remove(\"EpicString\");\ndataFile.Save();"} {"page":"api/data-files","section":"Removing a key","lang":"json","code":"{\n \"EpicNumber\" : 42\n}"} {"page":"api/data-files","section":"Clearing the entire file","lang":"csharp","code":"dataFile.Clear();"} {"page":"api/data-files","section":"Write nested key","lang":"csharp","code":"dataFile[\"EpicCategory\", \"EpicString\"] = \"EpicValue\";"} {"page":"api/data-files","section":"Write nested key","lang":"json","code":"{\n \"EpicCategory\" : {\n \"EpicString\" : \"EpicValue\"\n }\n}"} {"page":"api/data-files","section":"Read nested key","lang":"csharp","code":"if (dataFile[\"EpicCategory\", \"EpicString\"] != null)\n{\n Puts(dataFile[\"EpicCategory\", \"EpicString\"]); // Outputs: EpicValue\n}"} {"page":"api/data-files","section":"Checking if a file exists","lang":"csharp","code":"if (Interface.Oxide.DataFileSystem.ExistsDatafile(\"MyDataFile\"))\n{\n Puts(\"MyDataFile exists!\");\n}\nelse\n{\n Puts(\"MyDataFile does not exist\");\n}"} {"page":"api/data-files","section":"Loading a data object","lang":"csharp","code":"private class StoredData\n{\n public HashSet Players = new HashSet();\n\n public StoredData()\n {\n }\n}\n\nprivate class PlayerInfo\n{\n public string Id;\n public string Name;\n\n public PlayerInfo()\n {\n }\n\n public PlayerInfo(IPlayer player)\n {\n Id = player.Id;\n Name = player.Name;\n }\n}\n\nprivate StoredData storedData;\n\nprivate void Init()\n{\n storedData = Interface.Oxide.DataFileSystem.ReadObject(\"MyDataFile\");\n}"} {"page":"api/data-files","section":"Saving a data object","lang":"csharp","code":"[Command(\"test\")]\nprivate void TestCommand(IPlayer player, string command, string[] args)\n{\n PlayerInfo info = new PlayerInfo(player);\n if (storedData.Players.Contains(info))\n {\n player.Reply(\"Your data has already been added to the file\");\n }\n else\n {\n storedData.Players.Add(info);\n player.Reply(\"Saving your data to the file...\");\n Interface.Oxide.DataFileSystem.WriteObject(\"MyDataFile\", storedData);\n }\n}"} {"page":"api/data-files","section":"Advanced data","lang":"csharp","code":"private DataFileSystem dataFile;\n\nprivate void Init()\n{\n dataFile = new DataFileSystem($\"{Interface.Oxide.DataDirectory}\\\\player_info\");\n}\n\nprivate PlayerInfo LoadPlayerInfo(string playerId)\n{\n return dataFile.ReadObject($\"playerInfo_{playerId}\");\n}\n\nprivate void SavePlayerInfo(string playerId, PlayerInfo playerInfo)\n{\n dataFile.WriteObject($\"playerInfo_{playerId}\", playerInfo);\n}"} {"page":"api/database","section":"Open a connection","lang":"csharp","code":"Core.MySql.Libraries.MySql sqlLibrary = Interface.Oxide.GetLibrary();\nConnection sqlConnection = sqlLibrary.OpenDb(\"localhost\", 3306, \"umod\", \"username\", \"password\", this);"} {"page":"api/database","section":"Close the connection","lang":"csharp","code":"sqlLibrary.CloseDb(sqlConnection);"} {"page":"api/database","section":"Query the database","lang":"csharp","code":"string sqlQuery = \"SELECT `id`, `field1`, `field2` FROM example_table\";\nSql selectCommand = Oxide.Core.Database.Sql.Builder.Append(sqlQuery);\n\nsqlLibrary.Query(selectCommand, sqlConnection, list =>\n{\n if (list == null)\n {\n return; // Empty result or no records found\n }\n\n StringBuilder newString = new StringBuilder();\n newString.AppendLine(\" id\\tfield1\\tfield2\");\n\n // Iterate through resulting records\n foreach (Dictionary entry in list)\n {\n newString.AppendFormat(\" {0}\\t{1}\\t{2}\\n\", entry[\"id\"], entry[\"field1\"], entry[\"field2\"]);\n }\n\n Puts(newString.ToString());\n});"} {"page":"api/database","section":"Insert query","lang":"csharp","code":"string sqlQuery = \"INSERT INTO example_table (`field1`, `field2`) VALUES (@0, @1);\";\nSql insertCommand = Oxide.Core.Database.Sql.Builder.Append(sqlQuery, \"field1 value\", \"field2 value\");\n\nsqlLibrary.Insert(insertCommand, sqlConnection, rowsAffected =>\n{\n if (rowsAffected > 0)\n {\n Puts(\"New record inserted with ID: {0}\", sqlConnection.LastInsertRowId);\n }\n});"} {"page":"api/database","section":"Update query","lang":"csharp","code":"int exampleId = 2;\nstring sqlQuery = \"UPDATE example_table SET `field1` = @0, `field2` = @1 WHERE `id` = @2;\";\nSql updateCommand = Oxide.Core.Database.Sql.Builder.Append(sqlQuery, \"field1 value\", \"field2 value\", exampleId);\n\nsqlLibrary.Update(updateCommand, sqlConnection, rowsAffected =>\n{\n if (rowsAffected > 0)\n {\n Puts(\"Record successfully updated!\");\n }\n});"} {"page":"api/database","section":"Delete query","lang":"csharp","code":"int exampleId = 2;\nstring sqlQuery = \"DELETE FROM example_table WHERE `id` = @0;\";\nSql deleteCommand = Oxide.Core.Database.Sql.Builder.Append(sqlQuery, exampleId);\n\nsqlLibrary.Delete(deleteCommand, sqlConnection, rowsAffected =>\n{\n if (rowsAffected > 0)\n {\n Puts(\"Record successfully deleted!\");\n }\n});"} {"page":"api/database","section":"Non-query","lang":"csharp","code":"int exampleId = 2;\nstring sqlQuery = \"UPDATE example_table SET `field1` = @0, `field2` = @1 WHERE `id` = @3;\";\nSql sqlCommand = Oxide.Core.Database.Sql.Builder.Append(sqlQuery, \"field1 value\", \"field2 value\", exampleId);\n\nsqlLibrary.ExecuteNonQuery(sqlCommand, sqlConnection);"} {"page":"api/localization","section":"Registering messages","lang":"csharp","code":"protected override void LoadDefaultMessages()\n{\n lang.RegisterMessages(new Dictionary\n {\n [\"EpicThing\"] = \"An epic thing has happened\",\n [\"EpicTimes\"] = \"An epic thing has happened: {0} time(s)\"\n }, this);\n}"} {"page":"api/localization","section":"Get all messages","lang":"csharp","code":"Dictionary messages = lang.GetMessages(\"en\", this);\n\nPuts($\"Messages for {Title}:\");\nforeach(KeyValuePair message in messages)\n{\n Puts($\"{message.Key}: {message.Value}\");\n}"} {"page":"api/localization","section":"Get a single message","lang":"csharp","code":"[Command(\"epicstuff.message\")]\nprivate void TestMessageCommand(IPlayer player)\n{\n string message = lang.GetMessage(\"EpicThing\", this, player.Id);\n Puts(message);\n}"} {"page":"api/localization","section":"Formatting a message","lang":"csharp","code":"int amount = 0;\n\n[Command(\"epicstuff.amount\")]\nprivate void TestAmountCommand(IPlayer player)\n{\n amount++;\n string message = lang.GetMessage(\"EpicTimes\", this, player.Id);\n Puts(string.Format(message, amount.ToString()));\n}"} {"page":"api/localization","section":"Get player language","lang":"csharp","code":"[Command(\"epicstuff.language\")]\nprivate void TestLanguageCommand(IPlayer player)\n{\n Puts(lang.GetLanguage(player.Id));\n // Will output (by default): en\n}"} {"page":"api/localization","section":"Set player language","lang":"csharp","code":"[Command(\"epicstuff.french\")]\nprivate void TestUpdateCommand(IPlayer player)\n{\n lang.SetLanguage(\"fr\", player.Id);\n Puts(\"Merci bien! Votre langue est le français\");\n}"} {"page":"api/localization","section":"Get plugin languages","lang":"csharp","code":"string[] languages = lang.GetLanguages(this);\n\nPuts($\"Supported languages for {Title}:\");\nforeach(string language in languages)\n{\n Puts(language);\n}"} {"page":"api/localization","section":"Get server language","lang":"csharp","code":"Puts(lang.GetServerLanguage()); // Will output (by default): en"} {"page":"api/localization","section":"Set server language","lang":"csharp","code":"lang.SetServerLanguage(\"fr\"); // Will set language to \"fr\""} {"page":"api/timers","section":"Single timer","lang":"csharp","code":"timer.Once(1f, () =>\n{\n Puts(\"Hello world!\");\n});"} {"page":"api/timers","section":"Continuous timer","lang":"csharp","code":"timer.Every(3f, () =>\n{\n Puts(\"Hello world!\");\n});"} {"page":"api/timers","section":"Repeating timer","lang":"csharp","code":"timer.Repeat(5f, 0, () =>\n{\n Puts(\"Hello world!\");\n});"} {"page":"api/timers","section":"Immediate timer","lang":"csharp","code":"NextFrame(() =>\n{\n Puts(\"Hello world!\");\n});"} {"page":"api/timers","section":"Destroying timer","lang":"csharp","code":"Timer myTimer = timer.Every(3f, () =>\n{\n Puts(\"Hello world!\");\n});\n\nmyTimer.Destroy();\nif (myTimer.Destroyed)\n{\n Puts(\"Timer destroyed!\");\n}"} {"page":"api/web-requests","section":"GET web request","lang":"csharp","code":"webrequest.Enqueue(\"http://www.google.com/search?q=umod\", null, (code, response) =>\n{\n if (code != 200 || response == null)\n {\n Puts($\"Couldn't get an answer from Google!\");\n return;\n }\n Puts($\"Google answered: {response}\");\n}, this, RequestMethod.GET);"} {"page":"api/web-requests","section":"Advanced GET request","lang":"csharp","code":"[Command(\"get\")]\nprivate void GetRequest(IPlayer player, string command, string[] args)\n{\n // Set a custom timeout (in milliseconds)\n float timeout = 200f;\n\n // Set some custom request headers (eg. for HTTP Basic Auth)\n Dictionary headers = new Dictionary { { \"header\", \"value\" } };\n\n webrequest.Enqueue(\"http://www.google.com/search?q=umod\", null, (code, response) =>\n GetCallback(code, response, player), this, RequestMethod.GET, headers, timeout);\n}\n\nprivate void GetCallback(int code, string response, IPlayer player)\n{\n if (response == null || code != 200)\n {\n Puts($\"Error: {code} - Couldn't get an answer from Google for {player.Name}\");\n return;\n }\n\n Puts($\"Google answered for {player.Name}: {response}\");\n}"} {"page":"api/web-requests","section":"POST web request","lang":"csharp","code":"webrequest.Enqueue(\"http://www.google.com/search?q=umod\", \"param1=value1\", (code, response) =>\n{\n if (code != 200 || response == null)\n {\n Puts($\"Couldn't get an answer from Google!\");\n return;\n }\n Puts($\"Google answered: {response}\");\n}, this, RequestMethod.POST);"} {"page":"api/web-requests","section":"PUT web request","lang":"csharp","code":"webrequest.Enqueue(\"http://www.google.com/search?q=umod\", null, (code, response) =>\n{\n if (code != 200 || response == null)\n {\n Puts($\"Couldn't get an answer from Google!\");\n return;\n }\n Puts($\"Google answered: {response}\");\n}, this, RequestMethod.PUT);"} {"page":"api/web-requests","section":"POST and PUT body","lang":"csharp","code":"Dictionary parameters = new Dictionary();\n\nparameters.Add(\"param1\", \"value1\");\nparameters.Add(\"param2\", \"value2\");\n\nstring[] body = string.Join(\"&\", parameters.Cast().Select(key => string.Format(\"{0}={1}\", key, source[key]));\nwebrequest.Enqueue(\"http://www.google.com/search?q=umod\", body, (code, response) =>\n{\n if (code != 200 || response == null)\n {\n Puts($\"Couldn't get an answer from Google!\");\n return;\n }\n Puts($\"Google answered: {response}\");\n}, this, RequestMethod.POST);"} {"page":"api/web-requests","section":"Using a method callback","lang":"csharp","code":"[Command(\"get\")]\nprivate void GetRequest(IPlayer player, string command, string[] args)\n{\n webrequest.EnqueueGet(\"http://www.google.com/search?q=umod\", (code, response) => GetCallback(code, response, player), this);\n}\n\nprivate void GetCallback(int code, string response, IPlayer player)\n{\n if (response == null || code != 200)\n {\n Puts($\"Error: {code} - Couldn't get an answer from Google for {player.Name}\");\n return;\n }\n\n Puts($\"Google answered for {player.Name}: {response}\");\n}"} {"page":"api/dependencies","section":"Basic plugin reference","lang":"csharp","code":"[PluginReference]\nprivate Plugin EpicStuff;\n\nprivate void Loaded()\n{\n if (EpicStuff != null)\n {\n EpicStuff.Call(\"SomeMethod\");\n }\n}"} {"page":"api/dependencies","section":"Required dependencies","lang":"csharp","code":"private void Loaded()\n{\n if (EpicStuff == null)\n {\n LogError(\"Epic Stuff is not loaded, get it at https://umod.org\");\n }\n}"} {"page":"api/dependencies","section":"Hard dependencies","lang":"csharp","code":"// Requires: EpicStuff"} {"page":"api/dependencies","section":"Hard dependencies","lang":"csharp","code":"// EpicStuff may now be referenced directly\nEpicStuff EpicStuff;\n\nprivate void Loaded()\n{\n EpicStuff = (EpicStuff)Manager.GetPlugin(\"EpicStuff\");\n}"} {"page":"api/integration","section":"Plugin dependencies","lang":"csharp","code":"[PluginReference]\nprivate Plugin EpicStuff;"} {"page":"api/integration","section":"Call method","lang":"csharp","code":"private void Loaded()\n{\n if (EpicStuff != null) // check if plugin is loaded\n {\n EpicStuff.Call(\"SomeMethod\", \"argument1\", \"argument2\");\n }\n}"} {"page":"api/integration","section":"Call method","lang":"csharp","code":"bool someResponse = EpicStuff.Call(\"SomeMethod\", \"argument1\", \"argument2\");\nif(someResponse)\n{\n Puts(\"SomeMethod Response: True\");\n}"} {"page":"api/integration","section":"Call method","lang":"csharp","code":"// In EpicStuff.cs\nprivate bool SomeMethod(string argument1, string argument2)\n{\n Puts($\"Do stuff: {argument1} {argument2}\");\n return true;\n}"} {"page":"api/integration","section":"Hook conflicts","lang":"csharp","code":"bool CanUserLogin (string name, string id, string ip)\n{\n if (EpicPlugin != null)\n {\n var result = EpicPlugin.Call (\"CanUserLogin\", name, id, ip);\n if (result is bool)\n {\n return (bool)result;\n }\n }\n\n Puts(\"No conflict, do plugin stuff here\");\n\n return true;\n}"} {"page":"api/integration","section":"Custom hooks","lang":"csharp","code":"bool result = Interface.Oxide.CallHook(\"CanCreateBackpack\", player);\nif (!result)\n{\n return;\n}\n\n// Create backpack"} {"page":"api/integration","section":"Custom hooks","lang":"csharp","code":"private object CanCreateBackpack(IPlayer player)\n{\n if (IsInArena(player))\n {\n return false;\n }\n\n return null;\n}"} {"page":"api/preprocessor-directives","section":"Basic usage","lang":"csharp","code":"private bool CanUserLogin(string name, string id, string ip)\n{\n#if RUST\n // Do Rust-specific code\n#elif HURTWORLD\n // Do Hurtworld-specific code\n#endif\n}"} {"page":"api/preprocessor-directives","section":"Example","lang":"csharp","code":"#if DEBUG\n Puts(\"Some test related info\");\n#endif"} {"page":"api/preprocessor-directives","section":"Example","lang":"csharp","code":"#define DEBUG\n\nusing System;"} {"page":"plugins/configuration","section":"Applying changes","lang":"text","code":"oxide.reload MyPlugin"} {"page":"plugins/permissions","section":"Grant a permission to an individual player","lang":"text","code":"oxide.grant user Wulf epicstuff.use"} {"page":"plugins/permissions","section":"Revoke a permission from an individual player","lang":"text","code":"oxide.revoke user Wulf epicstuff.use"} {"page":"plugins/permissions","section":"Show a player's permissions","lang":"text","code":"oxide.show user Wulf"} {"page":"plugins/permissions","section":"Showing which player or group has a permission","lang":"text","code":"oxide.show perm epicstuff.use"} {"page":"plugins/permissions","section":"Grant a permission to an entire group","lang":"text","code":"oxide.grant group admin epicstuff.use"} {"page":"plugins/permissions","section":"Revoke a permission from a group","lang":"text","code":"oxide.revoke group admin epicstuff.use"} {"page":"plugins/permissions","section":"Adding a player to an existing group","lang":"text","code":"oxide.usergroup add Wulf admin"} {"page":"plugins/permissions","section":"Removing a player from an existing group","lang":"text","code":"oxide.usergroup remove Wulf admin"} {"page":"plugins/permissions","section":"Adding an entirely new group","lang":"text","code":"oxide.group add vip"} {"page":"plugins/permissions","section":"Adding an entirely new group","lang":"text","code":"oxide.group add vip VIP 0"} {"page":"plugins/permissions","section":"Removing an existing group","lang":"text","code":"oxide.group remove vip"} {"page":"plugins/permissions","section":"Setting the title or rank of a group","lang":"text","code":"oxide.group set vip \"[VIP Member]\""} {"page":"plugins/permissions","section":"Setting the title or rank of a group","lang":"text","code":"oxide.group set vip \"[VIP Member]\" 1"} {"page":"plugins/permissions","section":"Setting the parent group of another group","lang":"text","code":"oxide.group parent admin default"} {"page":"plugins/permissions","section":"Showing a group's members and permissions","lang":"text","code":"oxide.show group admin"} {"page":"plugins/permissions","section":"Showing all groups or permissions","lang":"text","code":"oxide.show groups"} {"page":"plugins/permissions","section":"Showing all groups or permissions","lang":"text","code":"oxide.show perms"} {"page":"plugins/permissions","section":"Using wildcards","lang":"text","code":"oxide.grant group admin *"} {"page":"plugins/permissions","section":"Using wildcards","lang":"text","code":"oxide.grant user Wulf oxide.*"}