using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text.RegularExpressions; using MySql.Data.MySqlClient; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Oxide.Core; using Oxide.Core.Configuration; using Oxide.Core.Plugins; using Oxide.Core.Database; using Oxide.Core.Libraries.Covalence; using Oxide.Plugins.XPerienceEx; using Oxide.Game.Rust.Cui; using Rust; using UnityEngine; using Random = UnityEngine.Random; using WebSocketSharp; using ConVar; using Facepunch; using Facepunch.Math; using System.Reflection.Emit; using System.Net.NetworkInformation; namespace Oxide.Plugins { [Info("XPerience", "MACHIN3", "1.7.4")] [Description("Player level system with xp, stats, and skills")] public class XPerience : RustPlugin { #region Update Log /***************************************************** 【 𝓜𝓐𝓒𝓗𝓘𝓝𝓔 】 Website: https://www.rustlevels.com/XPerience/ Discord: http://discord.rustlevels.com/ *****************************************************/ #region version 1.7.3 /***************************************************** ---------------------- ✯ version 1.7.3 ---------------------- ✯ Added support for ItemRetriever plugin by WhiteThunder ✯ Changed Smithy skill production rate/amount to use OnOvenCook hook so Electric Furnace can now be effected ✯ Possible fix for Captaincy NRE errors with XP Boosts ✯ Possible fix for rare NRE error with OnEntityKill ✯ Can adjust global default maximum output of solar panels, small batteries, medium batteries, large batteries, and small generators ✯ Added API for Electrician skill for other mod support ✯ Fixed cooked meats burning due to smithy skill ✯ Fixed Rank level not using rank level color setting in profiles ✯ Top Level/XP page now shows Rank level, Rank XP, Base level, and Base XP for better understanding ✯ UI adjustments to fit new Electrician skill effects and settings ✯ Added rank settings check when players connect to ensure rank disable option is false when allow to disable setting is false ✯ Added option to show player avatars on profiles instead of XPerience icon if ranks disabled. ✯ Code cleanup New Electrician Skill: ✯ Increased Solar Panel Input (current energy from sun) ✯ Increased Solar Panel Max Output ✯ Increased Windmill Output (current energy from wind) ✯ Increased Windmill Max Output ✯ Increased Small Battery Max Output ✯ Increased Medium Battery Max Output ✯ Increased Large Battery Max Output ✯ Increased Small Generator Max Output ✯ Option to set a minimum solar panel output amount per electrician level (even durring night time) Notes: - Max Output popup will not show the actual updated max output but the usage and connections will. This is something that is being worked on but the effects will still work. - The solar panel input option will adjust the amount of energy it receives from the sun but cannot exceed the maximum output. This setting can make the solar panel produce more power than they can release based on the max output settings. That extra energy will be wasted in those cases. - The windmill output option will adjust the amount of energy it receives from the wind but cannot exceed the maximum output. This setting can make the windmill produce more power than they can release based on the max output settings. That extra energy will be wasted in those cases. - Due to the range of cook times with the smithy skill all cookable meats are unburnable as a global value. This means that no meat will ever burn even if the player doesn't have smithy leveled - Player avatars require ImageLibrary plugin and in the ImageLibrary config you must set ("Avatars - Store player avatars": true,) *****************************************************/ #endregion #region version 1.7.2 /***************************************************** ---------------------- ✯ version 1.7.2 ---------------------- ✯ Fix for BuildingGrades xp exploit using /up command ✯ Added missing XP reduction for downgrading buildings using /down command ✯ Added the delay xp option back to the upgrade feature when /up command used ✯ Added new option to enable or disable xp award when using /up command ✯ Fixed rank xp not reducing when players loose xp ✯ Fixed player profile results showing rank color increase when rank stat/skill boosts disabled ✯ Fixed miner UI layout issues in player profiles ✯ Fixed Scavenger random item drop amount calculations ✯ Fixed WoodCutter apple drop chance setting ✯ Removed WoodCutter apple drop chance when using chainsaw ✯ Possible fix for NRE error with Captaincy Stat ✯ Fixed Daily Reset timers not showing above 1 hour ✯ New special character ignore method for SQL usage New Mentality Ability: ✯ Now can lock Tech Tree with Mentality Stat ✯ Can set Mentality level requirement to unlock Tech Tree ✯ Can lock Tech Tree completely ✯ Shows Tech Tree status in player profile UIs New Smithy Ability: ✯ Smithy skill now increases production speed of cookable/smeltable items ✯ Can adjust % increase per smithy level ✯ Effected by rank skill boosts if enabled New Rank Settings: ✯ Can now enable/disable each ability rank boost can effect New Zone Manager Option: ✯ Can now set zone IDs for disabling all stat/skill effects on players within zones (list each zone ID in the config seperated by a , under disablestatsandskills = "") Current list of disabled stat/skill abilities: * Extra damage to NPCs * Dodge/Block * Extra health on revive/recovery and when using healing items * Extra Weapon durability * All Might attributes (armor, food, water, cold, heat, etc..) * Tea modifiers * Vehicle modifications (speed, fuel, damage) * Extra XP gains (in some cases will prevent XP gained completely) * Extra loot and Random item drops for Forager/Scavenger skills * All Fishing abilities (extra loot, higher chances, oxygen increases) * Increased ammo for wepaons (resets ammo of all weapons in zone to defaut max ammo amount on reload) NOTES: * Building Grades: With the new option to allow xp when using the /up command along with the xp delay and the xp reduction for using /down command there are several ways to adjust this to effect player usage. It is possible that a player can loose more xp using the /down command than they earned using the /up command. This can cause a large penalty and should be taken into account when using/adjusting these options. * Smithy Production Speed: Due to issues with instant cooking/smelting the max speed a resource can be cooked/smelted is 1 second. If settings display 100% or higher it will restrict the speeds to 1 second reguardless. * Rank Effects: All ability effects will automatically be enabled/disabled when you adjust the main Rank Stat/Skill boosts options. From there you can disable each ability you wish to be disabled or enabled. If Rank stat/skill boost options are disabled you will not see the options to enable each stat/skill effects. * Zone Stat and Skill disability: Weapons that have increased ammo when entering the zone will keep the ammo they have loaded but will default to max ammo amount once reloaded. Some XP will be prevented entirely within these listed zones but if XP is gained it will be the default amount without any boosts such as team and captaincy boosts. *****************************************************/ #endregion #region version 1.7.1 /***************************************************** ---------------------- ✯ version 1.7.1 ---------------------- ✯ Possible fix for OnHealingItemUse error ✯ Added 2 more alternate chat command options for showing player profile UI ✯ Changed smithy production rate setting from 10% to 1% adjustments ✯ Temp removed ImageLibray Ready Check for possible UI loading fix ✯ Added option to select reload weapon hook if issues appear when using default hook for weaponry max ammo stat ✯ New "My Settings" UI page for players: ✯ Moved LiveUI, Dashpanel, speedometer, and other player settings to new My Settings page within the profile UI ✯ Added ability for player's to turn on/off confirmation prompts ✯ Added ability for player's to turn on/off chat prompts ✯ Added ability for player's to turn on/off addon welcome panel *****************************************************/ #endregion #region version 1.7.0 /***************************************************** ---------------------- ✯ version 1.7.0 ---------------------- ✯ Fixed admin layout issues with new weaponry options ✯ Fixed admin xp settings not being able to change loot barrel values ✯ Added option to require building privlidge to get xp for building ✯ Added option to show economics balance in player profiles ✯ Added support for BuildingGrades V1.0.7 ✯ No longer gives XP when downgrading structures ✯ No longer refunds extra materials when downgrading structures ✯ Building XP delay now only available if BuildingGrades mod detected ✯ Added option to reduce XP by percentage % amount when using BuildingGrades /up command *****************************************************/ #endregion #region version 1.6.9 /***************************************************** ---------------------- ✯ version 1.6.9 ---------------------- ✯ Fixed not being able to disable/enable sound effect in admin UI ✯ Added null checks for GetFuel & GetSpeed hooks ✯ Fixed dailylimit not defaulting if special group had no daily limit value ✯ Fixed dailylimit timer not resetting ✯ Fixed NightZombies not giving XP ✯ Added Support for XPerience Addon Special Items Features ✯ Added option to prevent boost with bandages in Medic skill ✯ Added option to set max ammo increase by percentage % of weapon default max ammo ✯ Added option to prevent max ammo increase to skinned weapons from SkinBox mod due to exploits ✯ Fix for NRE error when using prompt confirmation ✯ Fix for not being able to reset stats when Economics & ServerRewards costs disabled ✯ More updates to support the Addon special items features ✯ Changes to Might stat and Cold/Heat tolerance abilities ✯ Changed number formats to show commas for proper numbers ✯ Added swords, spears, cleavers, pitchfork to might melee damage bonus Ranks: ✯ Added option to increase required xp per level per rank ✯ Option to set increase amount per level per rank - [LevelRequiredXP + (RankRequiredIncrease * Rank)] Admin Calculations Pages: ✯ Fixed calculations to be more accurate ✯ Separated Admin Calculations page into multiple pages - Levels/Ranks/Stats Points/Skills Points ✯ Added support for new rank xp requirement increase option ✯ Added XP required per rank calculations ✯ Added XP required per level calculations ✯ Fixed Calculations page not showing Tamer skill if using PersonalAnimals mod *****************************************************/ #endregion #region version 1.6.8 /***************************************************** ---------------------- ✯ version 1.6.8 ---------------------- ✯ Added player data to horse cache for reference ✯ Fixed players not able to reset stats/skills if single respec option is false ✯ Added Forager ability from XPerience Addon to player profiles (requires XPerience Addon V1.3.9+) ✯ Rank settings moved to it's own page in the admin panel ✯ Rearranged Level/XP page to fit more options for future additions ✯ Adjusted Admin Panel menu to fit more options and not overlap ✯ Fixed OnUnload error if ImageLibrary wasn't loaded properly ✯ Fixed levelup button showing when player doesn't have enough points ✯ Fixed language file issue with server rewards level up message ✯ Fixed weapon cache being cleared when server shuts down causing extra ammo bug ✯ Fixed Daily limit calculations ✯ Added min/max values for Daily limit hours (1/24) ✯ More edits to OnPlayerHealthChange hook to help prevent NRE error on server restart New Console/Chat Command for Admins to exclude specific players: (requires XPerience Addon v1.3.9+) ✯ For use to exclude specified player data from being sent to RustLevels through XPerience Addon ✯ Console Command (xpexcludeplayer ) ✯ Chat Command (/xpexcludeplayer ) New Sound Effect Options: ✯ Option to enable Level Up sound effect ✯ Option to enable Level Down sound effect ✯ Option to enable Rank Up sound effect ✯ Option to enable Stat Up sound effect ✯ Option to enable Skill Up sound effect ✯ Option to enable Stat Reset sound effect ✯ Option to enable Skill Reset sound effect ✯ Option to enable Scavenger Loot sound effect ✯ Option to enable Forager Item sound effect ✯ Options to set custom sound effect path for each New Seasonal XP Options: ✯ Option to set gift xp ✯ Option to set open small gift xp ✯ Option to set open medium gift xp ✯ Option to set open large gift xp ✯ Option to set upgrade to medium gift xp ✯ Option to set upgrade to large gift xp New Popup Confirmation Prompt For Resets/Level Ups ✯ Option to enable/disable confirmation prompt ✯ Shows prompt to confirm yes/no to reset stats and skill ✯ Shows prompt to confirm yes/no to level stats and skill ✯ Shows Economics cost and balance if used ✯ Shows Server Rewards cost and balance if used New Separate XP Options for Scientists Types: ✯ Scientiest Generic (undetected types) ✯ Scientiest Cargo ✯ Scientiest Full ✯ Scientiest Heavy ✯ Scientiest Junkpile ✯ Scientiest Oilrig ✯ Scientiest Patrol ✯ Scientiest Peacekeeper ✯ Scientiest Roam New Separate XP Options for Dweller Types: ✯ Dweller Generic (undetected types) ✯ Tunnel Dweller ✯ Underwater Dweller New Separate XP Options for Loot Container Types: ✯ General Loot Containers (undetected types) ✯ Loot Barrels ✯ Oil Barrels ✯ Normal Crates ✯ Elite Crates ✯ Tool Crates ✯ Food Crates ✯ Vehicle Parts New Separate XP Options for Ore Types: ✯ General Ore (undetected types) ✯ Metal Ore ✯ Sulfur Ore ✯ Stone Ore New Special Groups: ✯ Option for XP boost per group ✯ Option for daily limit increase per group (stat/skill resets and xp) ✯ Option to set group priority if players are in more than one group ✯ Can create as many groups as needed in config *****************************************************/ #endregion #region version 1.6.7 /***************************************************** ---------------------- ✯ version 1.6.7 ---------------------- ✯ Fixed fuel gauge bar reading past 500 when fuel stack modified ✯ Cleaned up dashpanel coding ✯ Possible Fix OnEntityDismounted error ✯ Possible Fix OnPlayerHealthChange error ✯ Fixed missing API for new backpacks version ✯ Moved "Fix Data" button from main admin menu to Reset Page ✯ Added support for speed boost to snowmobiles (controlled by vehicle settings and RELOAD key) ✯ Added DashPanel support for snowmobiles (shows engine KW and fuel amount) ✯ Added Fuel Reduction support for snowmobiles ✯ Fixed Stats & Skills not showing starting point cost when first leveling Stat or Skill ✯ Fixed stat & skill point calculations when player reaches max level and max rank ✯ Players now recieve stat & skill points when reaching max level ✯ Fixed players loosing any unspent stat/skill points when reaching next rank if reset option in ranks is false ✯ Fixed player profile effects not showing proper values when rank boosts enabled ✯ Added max level/rank value to Stat and Skill setting pages to show total effects at max level/rank ✯ Added color selection for Armor & XP bar on LiveStats UI on Other Settings page ✯ Fixed disable ranks option showing when ranks are not enabled ✯ Added more API for Addon data ✯ Added max ranks setting limit to prevent setting higher than number of ranks defined in config ✯ Added config check for invalid values New Daily Limit Page: ✯ Option to set hours till limits reset ✯ Can manually reset all player daily limits in admin panel or console command (xpdailyreset) ✯ Can manually reset a specific players daily limit with console command (xpdailyresetplayer ) ✯ Daily limit time setting control all daily limits ✯ Each players daily limits tracked seperatly Daily XP Limits ✯ Option to enabled daily XP limits ✯ Option to set default xp limit ✯ Option to set VIP xp limit ✯ Can set limits to 0 for unlimted daily ✯ Option to use percentage or multiplier limit increase per level ✯ Shows daily limits in player profiles Daily Stat & Skill Reset Limits ✯ Option to enabled daily reset limits ✯ Option to set default stat reset limit ✯ Option to set VIP stat reset limit ✯ Option to set default skill reset limit ✯ Option to set VIP skill reset limit ✯ Shows daily limits in player profiles New Calculations Page (BETA): For refernece only ✯ Shows required xp, total stat points, and total skill points earned at max level ✯ Shows required xp, total stat points, and total skill points earned at max rank ✯ Shows required stat points for each stat at max level and total required to max all stats ✯ Shows required skill points for each skill at max level and total required to max all skills New Personal Animal Support: ✯ Added support for Personal Animals mod ✯ Uses Tamer Skill settings on "Other Mod Settings" page ✯ Can enable/disable each animal type ✯ Can set Tamer level required to use each animal NOTE: Must have either Pets or Personal Animal mods installed and setup to use Tamer skill. Not recommended to use both at the same time as conflicts may occur. *****************************************************/ #endregion #region version 1.6.6 /***************************************************** ---------------------- ✯ version 1.6.6 ---------------------- ✯ Added admin option to enable/disable dash panel for all players ✯ Added option to enable/disable dash panel for players in profiles ✯ Rewrote dashpanel code and cleaned unused coding ✯ Added extra check for disabled ranks to make sure rank level equals normal level ✯ Added default return value of 0 for API instead of null ✯ Fixed OnEntityKill errors New XP boost options: ✯ Permission required to earn XP boost (xperience.xpboost) ✯ Option to enable/disable XP boost permission ✯ Option to set XP Boost Amount ✯ Option to set When XP boost applied (before or after all other boosts) Added support for Zone Manager (list each zone in config separated by ,) ✯ List zone IDs where XP cannot be gained ✯ List zone IDs where XP cannot be lost *****************************************************/ #endregion #region version 1.6.5 /***************************************************** ---------------------- ✯ version 1.6.5 ---------------------- ✯ Added support for row 8 in backpacks (requires Backpacks v3.8.0+) ✯ Removed dashpanel type 2, Now only uses single dashpanel for fuel and speed ✯ Fixed player reset command not checking rank and other mods installed ✯ Changes to OnPlayerHealthChange hook to help prevent errors New Console Commands: Can now use some console commands without being in game ✯ xpresetall - resets XPerience (full wipe) and reloads mod ✯ xpresetplayer - resets selected player data ✯ xpgive - gives xx amount of xp to player ✯ xptake - takes xx amount of xp from player *****************************************************/ #endregion #region version 1.6.4 /***************************************************** ---------------------- ✯ version 1.6.4 ---------------------- ✯ Fixed VIP reset timer not working properly ✯ Fixed skill reset timer not using seperate timer ✯ Added option to reset all data on new save (wipe) ✯ Fixed server rewards messages not working properly ✯ Possible fix with new hook for Weaponry Stat not working properly ✯ Fixed MySql exception errors ✯ Vehicle speed boost messages no longer appear when vehicle speed option set to 0 ✯ Fixed leaderboard showing rank level/xp when ranks are disabled ✯ Fixed rank level increasing when rank disabled and player reached max level ✯ Fixed OnCollectiblePickup hook changes *****************************************************/ #endregion #region version 1.6.3 /***************************************************** ---------------------- ✯ version 1.6.3 ---------------------- ✯ Fixed VIP reset timer not working properly ✯ Changed player online status coding to be more accurate ✯ Changed deprecated hook OnReloadWeapon to OnWeaponReload *****************************************************/ #endregion #region version 1.6.2 /***************************************************** ---------------------- ✯ version 1.6.2 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ New chat command for admins to give stat/skill points to players ✯ Fixed possible errors when using SQL due to rank names and sig ✯ Fixed horse speed boost not resetting when player mounts/dismounts ✯ Fixed weaponry reset not returning points ✯ Power tool setting now effect gathering from corpse when using jackhammer NOTES: Any points given with new command will be lost if the player uses the "Fix Data" feature or an admin does for everyone. The "Fix Data" feature resets all points and levels and recalculates the level and points based on the amount of experience a player has and so any extra points will be removed *****************************************************/ #endregion #region version 1.6.1 /***************************************************** ---------------------- ✯ version 1.6.1 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Added option to reset/keep all stats/skills each rank (level and experience will still reset) ✯ Added profile buttons for past raids (Raidable Bases & XPerience Addon v1.3.5+ Required) *****************************************************/ #endregion #region version 1.6.0 /***************************************************** ---------------------- ✯ version 1.6.0 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Fixed OnDispenserGather error when trying to create drops less than 1 ✯ Added radiation poison reduction within might to work with radition reduction ✯ Code cleanup ✯ NEW Option to allow respec of individual Stats/Skills ✯ Option to enable respec ability ✯ If enabled - bypasses reset restrictions and timers ✯ Added separate Econ/Server Rewards Costs for respec NOTES: New respec option allows players to respec individual stats and skills without timer restrictions. If econ or server rewards are used they have separate cost option for respec. *****************************************************/ #endregion #region version 1.5.9 /***************************************************** ---------------------- ✯ version 1.5.9 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Changed seed chance adjustment from 0.1 to 0.01 in Forager skill ✯ Changed grub/worm chance adjustment from 0.1 to 0.01 in Forager skill ✯ Changed all Random.Range(0, 100) to Random.Range(0, 101) as 100 was excluded ✯ Added description option for each rank (Displayed/Used by XPerience Addon Only) ✯ Changed hook OnReloadMagazine to OnReloadWeapon to prevent reloading issues ✯ More API for XPerience Addon *****************************************************/ #endregion #region version 1.5.8 /***************************************************** ---------------------- ✯ version 1.5.8 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ More API for XPerienceAddon *****************************************************/ #endregion #region version 1.5.7 /***************************************************** ---------------------- ✯ version 1.5.7 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Fixed rank groups being deleted if group name matched rank name ✯ Fixed version not detected in addon ✯ Added missing Addon abilities in other player profiles New Forager Ability ✯ Chance for Worms/Grubs drop *****************************************************/ #endregion #region version 1.5.6 /***************************************************** ---------------------- ✯ version 1.5.6 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Removed spaces in rank group permission name due to conflicts ✯ Added death records button for Addon features in profiles ✯ Added new API and support New Addon Welcome Panel feature *****************************************************/ #endregion #region version 1.5.5 /***************************************************** ---------------------- ✯ version 1.5.5 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Fixed console spam for UI dashboard issues ✯ Fixed dashboard getting stuck when vehicle is destroyed while player is mounted ✯ Added custom item name option to Forager/Scavenger Item lists ✯ Added Support for new XPerienceAddon Notes feature *****************************************************/ #endregion #region version 1.5.4 /***************************************************** ---------------------- ✯ version 1.5.4 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Added option to set SkinID to random list drops (Forager / Scavenger) ✯ Code cleanup *****************************************************/ #endregion #region version 1.5.3 /***************************************************** ---------------------- ✯ version 1.5.3 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Added option for all drops to go in player inventory instead of on the ground (true by default) * Forager Items * Scavenger Items * Apple drops * Metal fragments from miner * HQ metal from smithy ✯ Fixed random item lists never selecting 1st item on the lists *****************************************************/ #endregion #region version 1.5.2 /***************************************************** ---------------------- ✯ version 1.5.2 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Split skill effects into 2 colums for more room ✯ Added support for new Weaponry abilities from XPerience Addon ✯ Added support for new Scavenger abilities from XPerience Addon ✯ Added support for new Forager abilities from XPerience Addon New Weaponry Ability: Free Ammo Chance (XPerience Addon Required!) ✯ Option to fire free ammo from weapons ✯ Option to set free ammo chance per weaponry level New Scavenger Ability: Chance to get more items from vendors (XPerience Addon Required!) ✯ Chance to recieve more items from vendors ✯ Option to set percentage chance per scavenger level ✯ Option to set percentage amount per scavenger level New Forager Ability: Chance to recycle item multiple times (XPerience Addon Required!) ✯ Chance to for free recycle for items (gives materials but keeps item) ✯ Option to set percentage chance per forager level The new Weaponr, Scavenger, and Forager abilities require the XPerience Addon and is NOT included in XPerience! *****************************************************/ #endregion #region version 1.5.1 /***************************************************** ---------------------- ✯ version 1.5.1 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Added checks for XPerience Addon UIs ✯ Added support for new Miner abilities from XPerience Addon New Miner Ability: Quarry Production (XPerience Addon Required!) ✯ Option to increase quarry production by % per Miner level ✯ Option to set production duration ✯ Option to set cooldown duration The new Minor ability requires the XPerience Addon and is NOT included in XPerience! *****************************************************/ #endregion #region version 1.5.0 /***************************************************** ---------------------- ✯ version 1.5.0 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ fixed dash/speedometer default type being set to 0 instead of 1 when players first join ✯ fixed API errors when returned data is null ✯ Added support for the new Addon Notify UI features *****************************************************/ #endregion #region version 1.4.9 /***************************************************** ---------------------- ✯ version 1.4.9 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Updated profile UI to include DeathRecords button if XPerienceAddon installed ✯ Fixed LiveUI location options showing when diabled ✯ LiveUI location auto updates to default when player joins if allowed to move is disabled *****************************************************/ #endregion #region version 1.4.8 /***************************************************** ---------------------- ✯ version 1.4.8 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Updated Help page for showing Weaponry Stat and other abilties added ✯ Fixed speedometer showing -999 instead of N/A when speed not detected ✯ Fixed Dash Panel UI showing gap when option to show rank in LiveUI is disabled ✯ Fixed OnEntityDismounted error ✯ Fixed Dash Panel UI not disappearing when vehicle, mini, or boat destroyed with player inside ✯ Dash Panel speedometer now shows engine thrust for boats, and max rotor speed for minicopters ✯ Added MiniCopter maxrotor speed boost to dexterity stats ability (RELOAD button activates boost) *****************************************************/ #endregion #region version 1.4.7 /***************************************************** ---------------------- ✯ version 1.4.7 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Changed admin commands to include type (name or id) for xpgive, xptake, and xpresetplayer commands ✯ More adjustments to UIs ✯ Added more API for new Weaponry stat ability and Pets plugin ✯ Removed unused coding ✯ Moved taming effects to skill list where they should be in player profile UIs ✯ Rewrote admin setting values to show % instead of decimals for easier understanding ✯ Fixed other mod icons showing next to stats/skills when disabled ✯ Added a check to make sure player names are updated when joining in case they changed their name. ✯ Fixed stats/skills reset buttons showing timer when restrictions disabled ✯ Added xp option for Zombie Horde NPCs if plugin is installed ✯ Added option to show new Fuel Gauge UI with LiveStatsUI (boats, cars, minis) ✯ Added option to show new Speedometer UI with LiveStatsUI ✯ Added option to swich between MPH and KMH for players speedometer UI Pets Support: ✯ Added support for PolarBear pet update (must have Pets v0.6.5 or higher) ✯ Increased default max level for Tamer from 5 to 6 for Polar Bear taming NOTE: Must adjust Taming skill in admin panel for polar bear taming New Mentality Ability Added: ✯ Increased damage to NPCs (dwellers, scientists scarecrows, customnpcs, zombies) ✯ Option to adjust damage percentage increase to NPCs New Dexterity Ability Added: ✯ Increased horse speed (walking, trotting, running and max speed) ✯ Increased Boat speed ✯ Increase vehicle speed ✯ Reduced vehicle fuel consumption ✯ Option to adjust horse, boat and vehicle speed percentage per level ✯ Option to adjust vehicle reduced fuel consumption percentage per level ✯ Pressing the USE key while on a horse activates/deactivates speed boost ✯ Pressing the RELOAD key while on a boat or in a vehicle activates/deactivates speed boost New Stat: Weaponry ✯ Percentage Chance to reduce condition damage to tools, power tools, and weapons by percentage ✯ Percentage Increase to max ammo weapons can hold ✯ Option to adjust reduced condition percentage chance ✯ Option to adjust reduced percentage for tools ✯ Option to adjust reduced percentage for power tools ✯ Option to adjust reduced percentage for melee weapons ✯ Option to adjust reduced percentage for projectile weapons ✯ Option to set minimum damage taken ✯ Option to set max ammo percentage OTHER NOTES: Some of these new features are still experimental such as the Fuel gauge and Speedometer. If you have any issues please post in the RustLevels discord bug report channel so that it can be addresses asap! *****************************************************/ #endregion #region version 1.4.6 /***************************************************** ---------------------- ✯ version 1.4.6 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Changes to admin pages - Other mods now have their own settings page for easier adjustment and to make room for more mod support ✯ Fixed issues with manually setting hex color in config ✯ Added separate XP setting amount for twig building ✯ Added more API data for future Addon features ✯ Adjusted player profile UIs to better fit extra abilities from other mods ✯ Added option to allow XP gains after reaching max level/rank (no level up) ✯ Added option to set chance for xp when using power tools (chainsaw/jackhammer) ✯ Added option to give xp percentage when using power tools (chainsaw/jackhammer) ✯ Other mod icons now show next to stat/skill that controls them Live Stats UI Rewrite: ✯ Includes customizable icons in config ✯ LiveUI now scales with user scale settings ✯ New LiveUI progressive level icon option that changes the closer a player reaches next level ✯ Adjusted location 1 so that it no longer overlaps Backpack icon if Backpack plugin installed New Feature: Backpacks now can be assigned to stat or skill ✯ Option to set which stat or skill enables backpack usage ✯ Option to set number of backpack rows per stat/skill level NOTES: ✯ If ranks are enabled and a player opts out of them if allowed they will not earn xp once they reach max level even if allowed xp after max level is set to true. This prevents players from gaining xp then opting back in ranks to skip many levels. ✯ For new power tool xp options to work (chance/percentage), both the power tool xp disable option and one time xp option must be set to false. ✯ Backpack plugin must still be configured before XPerience can control it if enabled however, permissions to use and rows allowed will be fully controlled by XPerience settings. (conflicts may occur if using any other backpack control plugins) ✯ If Backpacks is already set to group usage such as default or any other group you must remove that usage permission within the Backpacks plugin so that XPerience can control permissions *****************************************************/ #endregion #region version 1.4.5 /***************************************************** ---------------------- ✯ version 1.4.5 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Minor change to admin addon details page ✯ Adjusted Other Mod Settings page to fit new support options More Economics Support: ✯ Option to set costs to level stats/skills ✯ Option to set multiplier cost per level More Server Rewards Support ✯ Option to set costs to level stats/skills ✯ Option to set multiplier cost per level *****************************************************/ #endregion #region version 1.4.4 /***************************************************** ---------------------- ✯ version 1.4.4 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Possible fix for OnEntityDeath error from turret kills ✯ Added new admin page for XPerienceAddon options and details ✯ New API for developers to return player info *****************************************************/ #endregion #region version 1.4.3 /***************************************************** ---------------------- ✯ version 1.4.3 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Added option to allow players to level Captaincy without being in a team ✯ Added support for other tech tree mods when OnTechTreeNodeUnlock hook is called ✯ XPerience now auto reloads Addon if detected when XPerience reloads ✯ Updated admin reset panel with new commands ✯ Admin reset panel now has KillRecords reset option ✯ Fixed SQL issues not creating Rank tables on first install ✯ Possible fix for OnPlayerHealthChange error ✯ Possible fix for OnLoseCondition error *****************************************************/ #endregion #region version 1.4.2 /***************************************************** ---------------------- ✯ version 1.4.2 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Quick update for missing Addon Features ✯ Added new chat command for admins to give xp to all players *****************************************************/ #endregion #region version 1.4.1 /***************************************************** ---------------------- ✯ version 1.4.1 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Added ScareCrow to xp gain list with option to set xp amount ✯ Fixed player chat not working and Ranks will not show in chat if ColouredChat plugin installed ✯ Fixed player status not being set on first join ✯ Added option to allow players to opt out of prestige ranks ✯ Added option to allow autoturrets to give owners xp and set amount given ✯ Added cooldown timer for crafting XP to prevent crafting XP spamming ✯ Added support for latest KillRecords tracking of scarecrows and turrets ✯ Code cleanup - removed unused coding and better handlers NOTE: If player opts out of prestige ranks they will not benefit from any rank boosts even if they currently have a rank. All rank benefits will be disabled for that player until they opt back in. No previous progress will be lost and no further progress will be granted after reaching max level. New Medic Ability: ✯ Healing teas now give % bonus health per Medic level ✯ Option to set bonus amount New Plugin Support: Archery Plugin: ✯ Enable - allows XPerience to grant/revoke permissions ✯ Option to require specific rank level to unlock ✯ Option to set the Stat or Skill Archery is assigned to ✯ Option to set required Stat/Skill level for Novice, Adept, and Master abilities ✯ Option to auto remove permissions on plugin unload Wizardry Plugin: ✯ Enable - allows XPerience to grant/revoke permissions ✯ Option to require specific rank level to unlock ✯ Option to set the Stat or Skill Wizardry is assigned to ✯ Option to set required Stat/Skill level for Novice, Adept, and Master abilities ✯ Option to auto remove permissions on plugin unload *****************************************************/ #endregion #region version 1.4.0 /***************************************************** ---------------------- ✯ version 1.4.0 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Added support for XPerienceAddon Discord Features ✯ Fixed permission issues for xperience.admin *****************************************************/ #endregion #region version 1.3.9 /***************************************************** ---------------------- ✯ version 1.3.9 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Fixed issues with group permissions ✯ Added field to ranks in config for custom group name ✯ Added option for players to keep previous rank groups ✯ Fixed armor reduction in Dexterity preventing damage to players ✯ Added additional page to Help UI for steam privacy agreement section 5.5 ✯ Fixed new players not being assign group when joining *****************************************************/ #endregion #region version 1.3.8 /***************************************************** ---------------------- ✯ version 1.3.8 ---------------------- ** MAJOR UPDATE ** DELETE LANG FILE BEFORE UPLOADING UPDATE! Bug Fixes / Changes: ✯ Another Fix for not changing online status if player was kicked or disconnected randomly ✯ Added support for the latest KillRecords harvest tracking to KillRecords page ✯ Added new harvest API for XPerienceAddon ✯ New SQL update method for creating new columns in existing SQL database ✯ Fixed player profile reset when admin uses /xpgive command to player ✯ Adjusted Top UI pages to fit new Ranks feature ✯ Changed main icon for profiles to show rank image if ranks enabled ✯ New API for Addon to include Ranks feature ✯ Admin givexp command now carries over remaining XP if enabled ✯ Expanded Captaincy Skill to effect more skills ✯ Admin can now give xp to any player in the records ✯ Admin/Player fixdata issues resolved and compensates for rank feature if enabled ✯ Fixed Apple chance and Metal chance when using power tools (disable power tool option must be true) ✯ Added support for BetterChat plugin when using Ranks and chat tags ✯ Added option to only give xp at the end of cutting trees or mining ore ✯ Fixed issues with smithy skill not giving higher production rates when max level or fuel reduction activates ✯ Armor asorbtion now rounded up to whole number New Ranks Feature: (custom ranks after reaching max level) ✯ Enable max level ranks reset feature ✯ Option to set max rank ✯ Option to allow remaining XP to carry over ✯ Set XP boost per rank ✯ Set Stats/Skills boost per rank ✯ Set Start Stat/Skill points per rank ✯ Set Additional Stat/Skill points per level per rank ✯ Option to show rank level ✯ Option to show rank xp ✯ Option to set rank name, level, xp colors ✯ Top ranked players page in Top UI ✯ Sends Rank, Name, Sig, ImageURL, Level, and XP to SQL if used ✯ Option to show Rank Tag(sig) in chat name ✯ Option to show Rank Name and Image in LiveUI ✯ Admin chat commands to reset level only and rank only for players or all records ✯ Stats/Skills effected by ranks show same color as rank level in player profile UIs ✯ Groups feature to use for other mods to grant/restrict features based on player rank ✯ Creates groups for each rank listed in the config and automatically assigns/revokes player group based on rank NOTE: Rank Boosts adds additional % per rank level to all stat/skill effects if rank boosts enabled! If Rank Stat/Skill boosts enabled you may need to adjust base stat/skill values to compensate for extra boosts to all effects! New Harvest Amount Tracking: ✯ Wood ✯ Stone ✯ Metal ✯ Sulfur ✯ Cactus ✯ Berries ✯ Potatos ✯ Pumpkins ✯ Mushrooms ✯ Corn ✯ Hemp ✯ Seeds ✯ Admin reset harvest command ✯ Harvest count resets on player reset ✯ Sends all harvest data to SQL if used Don't forget to check out the New XPerienceAddon mod! Check our discord for details on how and where to get it. Discord: discord.skilledsoldiers.net *****************************************************/ #endregion #region version 1.3.7 /***************************************************** ---------------------- ✯ version 1.3.7 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Added PolarBear to KillRecords page if plugin is installed ✯ Added building upgrade xp cooldown to building start ✯ Possible fix for rare OnResearchCostDetermine error ✯ Fix for ImageLibrary URLs Don't forget to check out the New XPerienceAddon mod! Check our discord for details on how and where to get it. Discord: discord.skilledsoldiers.net *****************************************************/ #endregion #region version 1.3.6 /***************************************************** ---------------------- ✯ version 1.3.6 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Fixed not changing online status if player was kicked or disconnected randomly ✯ Added support for new polar bear (xp amount, hunter skills, etc..) Don't forget to check out the New XPerienceAddon mod! Check our discord for details on how and where to get it. Discord: discord.skilledsoldiers.net *****************************************************/ #endregion #region version 1.3.5 /***************************************************** ---------------------- ✯ version 1.3.5 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Fixed Tamer link not working in Top Players UI ✯ Fixed online indicator not showing correctly for second column in top player UIs ✯ Added API needed for XPerienceAddon New Player Info Box: ✯ Can disable entire feature or each display option Player Data Shown: (since last spawn) ✯ Time Alive ✯ Time Sleeping ✯ Time Driving ✯ Time Boating ✯ Time Flying ✯ Time in Base ✯ Time in Monuments ✯ Time Swimming ✯ Meters Ran ✯ Meters Walked ✯ Last Damage Time ✯ Last Damage Source ✯ Last Attack Time ✯ Last Attack Source Don't forget to check out the New XPerienceAddon mod! Check our discord for details on how and where to get it. Discord: discord.skilledsoldiers.net *****************************************************/ #endregion #region version 1.3.4 /***************************************************** ---------------------- ✯ version 1.3.4 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Organized code cache for XPerienceAddon mod New Fisher Abilities ✯ Reduced oxygen tank usage ✯ Reduced oxygen usage without tanks before damage recieved New XPerienceAddon mod available! Check our discord for details on how and where to get it. Discord: discord.skilledsoldiers.net *****************************************************/ #endregion #region version 1.3.3 /***************************************************** ---------------------- ✯ version 1.3.3 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Additional TeaModifiers support implemented ✯ Fixed issues with drop in player health when resetting stats ✯ Fixed issues with wrong health values when player resets progress ✯ Fixed issues with wrong health values when Admin resets player progress ✯ Fixed issues with wrong health values when using FixData commands *****************************************************/ #endregion #region version 1.3.2 /***************************************************** ---------------------- ✯ version 1.3.2 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Adjusted extra armor calculations when using TeaModifiers plugin ✯ Fixed armor bar not showing properly when adjusting tea modifiers ✯ Fixed issues with using full reset commands ✯ Added API for retriving cache of XPerience (used for future addon) *****************************************************/ #endregion #region version 1.3.1 /***************************************************** ---------------------- ✯ version 1.3.1 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Fixed spent points total not showing correctly for Stats/Skills on profiles ✯ Fixed exploiting levels higher than max level set in Stats/Skills ✯ Fixed issues where LiveStatsUI would stack or replicate ✯ Fixed SQL errors due to player names *****************************************************/ #endregion #region version 1.3.0 /***************************************************** ---------------------- ✯ version 1.3.0 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Adjusted math calculations to prevent decimals in XP gains ✯ Fixed skill effects list not showing full values ✯ Crafter reduced repair cost ability now only works when condition chance activates ✯ Fixed XP exploit for opening containers for players without scavenger levels ✯ Fixed armor bar calculations with tea usage ✯ Teas now grant an extra armor boost based on tea type ✯ Added Tea boost, type, and time remaining to player profiles ✯ Notifacation cooldown setting now in seconds and effects more messages ✯ Added option to increase scientists loot in scavenger skill ✯ Fixed issue with armor and health reseting to default when plugins are reloaded New: Online Status Feature ✯ Shows online status if enabled on profile UIs and Top UIs ✯ Sends online status with SQL data for external use New: Permission Options ✯ Option to use permissions (disabled by default) ✯ Each Stat and Skill has it's own permission requirement ✯ Only Stats/Skills with permissions will be seen on profiles NOTE: If players already have stats/skills you must use Fix Player Data after setting permissions New: TeaModifiers Support ✯ Now supports TeaModifiers plugin to properly show armor stats *****************************************************/ #endregion #region version 1.2.9 /***************************************************** ---------------------- ✯ version 1.2.9 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Set max players per page in Top UI to 40 players ✯ Added second column for up to 40 players per page in top UI ✯ Fixed Economics issues when ressetting stats/skills ✯ Added ServerRewards cost options for resseting stats/skills ✯ Help chat commands now opens UI help page ✯ Code overhaul and rewrite for better performance ✯ Changed Medic mixing table speed setting from 0.1 to 0.01 ✯ Added option to allow players to reset their character back to 0 ✯ Added second column to skill effects list when effects reach more than 30 New Ability in Smithy Skill: ✯ Chance for high quality metal from mining ore ✯ Increased high quality metal amount per level New Ability in Miner Skill: ✯ Chance for metal fragments from mining ore ✯ Increased metal fragment amount per level New Custom Chat Commands Player/Admins: can set custom commands for: Players: ✯ Player stats UI ✯ Player stats chat display ✯ Top players UI ✯ Help page UI ✯ Player reset stats ✯ Player reset skills ✯ Player LiveStats Selection Admins: ✯ Admin Help commands ✯ Admin Panel UI ✯ Admin Give XP ✯ Admin Take XP ✯ Admin Player Reset ✯ Admin Full Reset ✯ Admin Fix All Data ✯ Admin Item condition and max condition change command *****************************************************/ #endregion #region version 1.2.8 /***************************************************** ---------------------- ✯ version 1.2.8 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Armor bar no longer shows if armor config set to 0 ✯ If Scavenger loot multiplier set to 0 it will not longer run extra loot hook ✯ Moved reset buttons for stats/skills next to labels on My Stats page ✯ Admin: stat settings now count by 0.01 instead of 0.1 (stats only) ✯ Admin: skills for fuel consumption settings now count by 0.01 instead of 0.1 ✯ Code cleanup and rewrite for performance New Fullscreen UI: Top Players ✯ Show top player for Levels, Stats, and Skills ✯ Option to set how many players per page *****************************************************/ #endregion #region version 1.2.7 /***************************************************** ---------------------- ✯ version 1.2.7 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ New Live Stats UI layouts ✯ Now anytime a config value for stats/skills is negative the perk values will turn red for players ✯ Fixed player profiles being seen from Online Players when player searching disabled *****************************************************/ #endregion #region version 1.2.6 /***************************************************** ---------------------- ✯ version 1.2.6 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ Added color option for stat/skill/effect labels in UI ✯ Fixed OnResearchCostDetermine errors ✯ Removed all old UI coding for cleanup ✯ Implemented required level option for custom item drops in Scavenger ✯ Added Option to randomize custom item drop amount ✯ Added option to set Chat/UI notify timers to prevent spamming ✯ Combined Save/Reload buttons in admin UI ✯ Fixed admins not being able to use playerfixdata on profile when admin bypass enabled ✯ Added option to show unused stats/skills ✯ Fixed exploit with container loot multiplier ✯ Fixed chance of more durability when crafting if option is disabled ✯ New fullscreen UI now used for showing other player stats ✯ UI will not show any stat/skill effects that are set to 0 ✯ Cleaned up UI for admin area and stats page ✯ Reset buttons no longer show if Hardcore mode enabled ✯ Reset buttons and fixdata button now show for admins if admin bypass enabled ✯ Cleaned code of any remaining Chemist stats ✯ Added option to delay in seconds giving XP on building to prevent exploits with other mods Added ImageLibrary Support: (requires ImageLibrary plugin) ✯ Default icon URLs included ✯ Can set custom icon URLs *****************************************************/ #endregion #region version 1.2.5 /***************************************************** ---------------------- ✯ version 1.2.5 ---------------------- DELETE LANG FILE BEFORE UPLOADING UPDATE! ✯ New Fullscreen UI for players (old UI will be removed in the future) ✯ Fixed issues with Medic points and Calculations ✯ Rewrote hooks to work with new scavenger skill ✯ Fixed player chat profile on connect not showing properly ✯ Removed unused code (more to come when old UI removed) ✯ Changed critical hit amount to round up to prevent 0 crital damage ✯ Fixed loot container IDs not saving causing exploits ✯ Fixed new players LiveStatsUI not being set to config default location ✯ Moved Tamer skill settings in admin panel to Other Mod settings page NEW SKILL: Scavenger ✯ Chance for more loot in Drops/Crates ✯ Loot Multiplier per level ✯ Option to set Extra loot to components only ✯ Custom item list in config to drop what items you want ✯ Custom item Multiplier per level x base item amount ✯ Option to set base amount per custom item ✯ Option to set max amount per custom item ✯ Option to enable/disable Drops & Different Crates NOTE: (required level in custom item list not implemented yet) New Fullscreen UI For Players: ✯ Smarter UI where users can edit everything in one page ✯ Displays points needed for next level for stats/skills ✯ Only shows active Stat/Skill abilities in a cleaner list ✯ Kill Records page so players can view their records inside XPerience (Kill Records plugin required) ✯ Auto close feature closes UI when player takes damage ✯ Quick link button for admins to go to admin panel and vise versa *****************************************************/ #endregion #region version 1.2.4 /***************************************************** ---------------------- ✯ version 1.2.4 ---------------------- ✯ Fixed repair skill in crafter ✯ Fixed Admin panel FixPlayerData button issues *****************************************************/ #endregion #region version 1.2.3 /***************************************************** ---------------------- ✯ version 1.2.3 ---------------------- ✯ Added individual player reset command for admins ✯ Fixed fixplayerdata not resetting all players ✯ Fixed Admin Give/Take XP command not working on sleepers/offline players ✯ Fixed Admin Give/Take XP not properly setting players levels ✯ Adjusted Captaincy Stat and XP gain now stacks on other gains (if enabled) *****************************************************/ #endregion #region version 1.2.2 /***************************************************** ---------------------- ✯ version 1.2.2 ---------------------- ✯ Added Teams support ✯ Added option to share XP gain and loss ✯ Added option to set team distance for gains/loss ✯ ADDED NEW STAT = Captaincy ✯ Requires Team of 2 or more players ✯ Give boosts to all other team member skills ✯ Optional boost to all other team member XP gains ✯ Increase effective distance of Captaincy per level ✯ Stacks with other members with Captancy stat *****************************************************/ #endregion #region version 1.2.1 /***************************************************** ---------------------- ✯ version 1.2.1 ---------------------- ✯ More fixes repair item issues in Crafting skill ✯ Added option to disabled players fix data option ✯ Added Hardcore No Reset Option - players cannot reset stats/skills ✯ Changed XP loss to % of current level XP instead of total XP *****************************************************/ #endregion #region version 1.2.0 /***************************************************** ---------------------- ✯ version 1.2.0 ---------------------- ✯ Added reset page to admin panel for resetting config and all players ✯ Fixed crafting and repair issue in Crafting skill ✯ Changed all crafting adjustments from 0.1 to 0.01 in Crafting skill ✯ Added repair cost decrease to Crafter skill ✯ Fixed XP from going negative ✯ Fixed LiveUI not updating when FixPlayerData used ✯ Fixed SQL error on server save ✯ Resetting XPerience now deletes all SQL data as well ✯ Moved all other mod support to a seperate admin page "Other Mod Settings" ✯ Added API (Hooks) for developers to add/take xp ✯ Added Server Rewards support: (requires Server Rewards plugin) ✯ Option to enable level up reward and amount ✯ Option to enable level down reduction and amount ✯ Added Clans support: (requires Clans plugin) ✯ Option to enable shared xp gain and amount ✯ Option to enable shared xp reduction and amount *****************************************************/ #endregion #region version 1.1.9 /***************************************************** ---------------------- ✯ version 1.1.9 ---------------------- ✯ Fixed power tool detection not working to disable xp ✯ Changed apple chance adjustment from 0.1 to 0.01 ✯ Fixed xp gain issue when upgrading buildings with Building Grades plugin ✯ Added Economics support: (requires Economics plugin) ✯ Option to enable level up reward and amount ✯ Option to enable level down reduction and amount ✯ Option to enable cost to reset stats and amount ✯ Option to enable cost to reset skills and amount *****************************************************/ #endregion #region version 1.1.8 /***************************************************** ---------------------- ✯ version 1.1.8 ---------------------- ✯ Added xp for reviving players ✯ Replaced Chemist Stat with Medic Skill ✯ Expanded UIs to fit new skill ✯ Changed LiveStats location label ✯ Added Fix My Data button to help page for players to fix their own data after server settings change ✯ Added timer on admin timer page for player fix data option ✯ Fixed level boost setting adjustment from 0.1 to 0.01 ✯ Fixed Armor bar display issues not showing correct values ✯ Changed OnFishCaught to OnFishCatch so fishing skill works again ✯ Changed Critical and Block display to round to whole numbers ✯ Added option to show KillRecords button on Player Control Panel ✯ Adjusted cold/heat tolerance detection - more work needed ✯ Added option to disable XP when using chainsaw or jackhammer ✯ Added New Skill (Medic): ✯ Reduced crafting time (mixing table) ✯ Revive players with more health ✯ Recover from wounded with higher health ✯ Get more health from some medical tools ✯ Added UINotify support: (requires UINotify plugin and user permissions) ✯ Option to disable default chat messages ✯ Show XP gain/loss in UINotify ✯ Show Level up/down in UInotify ✯ Show Dodge/Block notification in UINotify ✯ Show Critical Hit in UINotify ATTENTION - IF YOU HAVEN'T ALREADY DONE SO WITH PREVIOUS UPDATES YOU MUST RUN CHAT COMMAND /xpupdate THEN USE REPAIR ALL PLAYER DATA IN ADMIN PANEL! *****************************************************/ #endregion #region version 1.1.7 /***************************************************** ---------------------- ✯ version 1.1.7 ---------------------- ✯ Fixed gunpowder multiply issue when above level 5 crafter ATTENTION - IF YOU HAVEN'T ALREADY DONE SO WITH PREVIOUS UPDATES YOU MUST RUN CHAT COMMAND /xpupdate THEN USE REPAIR ALL PLAYER DATA IN ADMIN PANEL! *****************************************************/ #endregion #region version 1.1.6 /***************************************************** ---------------------- ✯ version 1.1.6 ---------------------- ✯ Fixed building repair issues ✯ Rewrote building repair to properly reduce costs and time ✯ Fixed item repair issues ATTENTION - IF YOU HAVEN'T ALREADY DONE SO WITH PREVIOUS UPDATES YOU MUST RUN CHAT COMMAND /xpupdate THEN USE REPAIR ALL PLAYER DATA IN ADMIN PANEL! *****************************************************/ #endregion #region version 1.1.5 /***************************************************** ---------------------- ✯ version 1.1.5 ---------------------- ✯ Changed some lang text ✯ Reordered admin panel menu ✯ Setting Stats/Skills to max level 0 will now disable them ✯ Fixed level percentage not showing correct value ✯ Fixed admin FixPlayerData button not working for server admins ✯ Added Missions Support: ✯ Option to set eperience reward amount ✯ Option to enable failed xp reduction ✯ Option to set failed xp reduction amount ATTENTION - IF YOU HAVEN'T ALREADY DONE SO WITH LAST UPDATE YOU MUST RUN CHAT COMMAND /xpupdate THEN USE REPAIR ALL PLAYER DATA IN ADMIN PANEL! *****************************************************/ #endregion #region version 1.1.4 /***************************************************** ---------------------- ✯ version 1.1.4 ---------------------- ✯ Added 5th location option for LiveUI stats ✯ Added Admin Control Panel for config changes in game ✯ Added Option to prevent players from changing LiveUI Location ✯ Added option to disable armor absorb chat messages ✯ Fixed tamer skill not giving permissions to use Pets mod ✯ Rewrote xp and level progression ✯ Added max level limit option (default 500) ✯ Added admin command to reset all player stats except experience ✯ Fixed OnPlayerHealthChange error ATTENTION - MUST RUN CHAT COMMAND /xpupdate THEN USE REPAIR ALL PLAYER DATA IN ADMIN PANEL! *****************************************************/ #endregion #region version 1.1.3 /***************************************************** ---------------------- ✯ version 1.1.3 ---------------------- ✯ Fixed level loss issue when admin removes more than 1 level of xp from a player *****************************************************/ #endregion #region version 1.1.2 /***************************************************** ---------------------- ✯ version 1.1.2 ---------------------- ✯ Fixed error from c4 on bradley ✯ Fixed point cost multipler to go off next level instead of current ✯ Added new pages to help UI that shows server settings ✯ Added new pages to help UI that explains all stats and skills ✯ Added Admin command for giving expience to players ✯ Added Admin command for taking expience from players ✯ Ingame Admin Panel Coming Soon *****************************************************/ #endregion #region version 1.1.1 /***************************************************** ---------------------- ✯ version 1.1.1 ---------------------- ✯ Fixed OnEntityTake Damage Error *****************************************************/ #endregion #region version 1.1.0 /***************************************************** ---------------------- ✯ version 1.1.0 ---------------------- ✯ Fixed building errors ✯ Fixed TC auth issues ✯ Fixed crafting cost issues ✯ Changed API hook - expects rarity cost as double ✯ Fixed OnEntityDeath errors ✯ Added VIP class for seperate reset timers *****************************************************/ #endregion #region version 1.0.9 /***************************************************** ---------------------- ✯ version 1.0.9 ---------------------- ✯ LiveUI selection within player control panel ✯ Added HELP button to control panel ✯ created HELP UI that will explain XPerience in more detail to players ✯ fixed OnPlayerDeath error ✯ fixed OnEntityTakeDamage error ✯ Fixed ResearchCostDetermain error ✯ Added API support for other Research mods ✯ Changed gather rate from multiple to addition ✯ Added option to use vanilla gather rates ✯ Fixed armor bar display when using tea ✯ Added Bradley / Helicopter XP gain options ✯ Added config list for randomchance items in forager *****************************************************/ #endregion #region version 1.0.8 /***************************************************** ---------------------- ✯ version 1.0.8 ---------------------- ✯ Added armor damage reduction - dexterity ✯ Changed Smithy skill to include % chance production increase ✯ Added option to allow admin class to bypass reset timers ✯ Added more items to random find in Forager ✯ Ability to search other player stats ✯ Top list names now link to player stats *****************************************************/ #endregion #region version 1.0.7 /***************************************************** ---------------------- ✯ version 1.0.7 ---------------------- ✯ Fixed research cost issues ✯ Added apple as random item on forager *****************************************************/ #endregion #region version 1.0.6 /***************************************************** ---------------------- ✯ version 1.0.6 ---------------------- ✯ Added reset restriction and timer option *****************************************************/ #endregion #region version 1.0.5 /***************************************************** ---------------------- ✯ version 1.0.5 ---------------------- ✯ fixed lang API spelling ✯ Added admin reset command ✯ fixed metabolism issues *****************************************************/ #endregion #region version prereleases /***************************************************** ---------------------- ✯ version 1.0.4 ---------------------- ✯ more lang API fixes ---------------------- ✯ version 1.0.3 ---------------------- ✯ full lang api addition ---------------------- ✯ version 1.0.2 ---------------------- ✯ fixed hooks and loading issues ---------------------- ✯ version 1.0.1 ---------------------- ✯ more language definitions ✯ fixed OnEntityTakeDamage error *****************************************************/ #endregion #endregion #region Refrences [PluginReference] private readonly Plugin XPerienceAddon, KillRecords, Pets, UINotify, Economics, ServerRewards, Clans, ImageLibrary, TeaModifiers, BetterChat, ColouredChat, Archery, Wizardry, Backpacks, RaidableBases, ZoneManager, PersonalAnimal, SkinBox, BuildingGrades, ItemRetriever; #endregion #region Fields public const string version = "1.7.3"; private XPData _xpData; private DailyData _dailyData; private LootData _lootData; private CorpseData _corpseData; private HorseData _horseData; private WeaponData _weaponData; private BoatData _boatData; private VehicleData _vehicleData; private MinicopterData _minicopterData; private SnowmobData _snowmobData; private SmithyData _smithyData; private ElectricianData _electricianData; private DynamicConfigFile _XPerienceData; private DynamicConfigFile _DailyXPerienceData; private DynamicConfigFile _LootContainData; private DynamicConfigFile _CorpseContainData; private DynamicConfigFile _HorseData; private DynamicConfigFile _WeaponData; private DynamicConfigFile _BoatData; private DynamicConfigFile _VehicleData; private DynamicConfigFile _MinicopterData; private DynamicConfigFile _SnowmobData; private DynamicConfigFile _SmithyData; private DynamicConfigFile _ElectricianData; private Dictionary _xperienceCache; private Dictionary _dailyxperienceCache; private Dictionary _lootCache; private Dictionary _corpseCache; private Dictionary _horseCache; private Dictionary _weaponCache; private Dictionary _boatCache; private Dictionary _vehicleCache; private Dictionary _minicopterCache; private Dictionary _snowmobCache; private Dictionary _smithyCache; private Dictionary _electricianCache; private Configuration config; private static readonly RNGCryptoServiceProvider _generator = new RNGCryptoServiceProvider(); private const string Admin = "xperience.admin"; private const string VIP = "xperience.vip"; private const string PermMentality = "xperience.mentality"; private const string PermDexterity = "xperience.dexterity"; private const string PermMight = "xperience.might"; private const string PermCaptaincy = "xperience.captaincy"; private const string PermWeaponry = "xperience.weaponry"; private const string PermWoodCutter = "xperience.woodcutter"; private const string PermSmithy = "xperience.smithy"; private const string PermMiner = "xperience.miner"; private const string PermForager = "xperience.forager"; private const string PermHunter = "xperience.hunter"; private const string PermFisher = "xperience.fisher"; private const string PermCrafter = "xperience.crafter"; private const string PermFramer = "xperience.framer"; private const string PermMedic = "xperience.medic"; private const string PermScavenger = "xperience.scavenger"; private const string PermElectrician = "xperience.electrician"; private const string PermTamer = "xperience.tamer"; private const string PermXPBoost = "xperience.xpboost"; private readonly Hash _notifyCooldowns = new Hash(); private readonly Hash _buildCooldowns = new Hash(); private readonly Hash _craftCooldowns = new Hash(); private readonly Hash _TopUIPage = new Hash(); private Timer DashPanelTimer; private double CurrentTime => DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds; private bool _isXPReady; private bool _isRestart = true; private int _imageLibraryCheck = 0; private Dictionary _xperienceImageList; #endregion #region Config private class Configuration : SerializableConfiguration { [JsonProperty("Player Chat Commands")] public PlayerChatCommands playerchatCommands = new PlayerChatCommands(); [JsonProperty("Admin Chat Commands")] public AdminChatCommands adminchatCommands = new AdminChatCommands(); [JsonProperty("Player Info Box")] public PlayerInfoBoxSettings playerinfoBoxsettings = new PlayerInfoBoxSettings(); [JsonProperty("Default Options")] public DefaultOptions defaultOptions = new DefaultOptions(); [JsonProperty("Sound Effects")] public SoundEffects soundEffects = new SoundEffects(); [JsonProperty("UI Text Colors")] public UITextColor uitextColor = new UITextColor(); [JsonProperty("Image Icons")] public ImageIcons imageicons = new ImageIcons(); [JsonProperty("UI Notify (requires UINotify plugin)")] public UINotifier UiNotifier = new UINotifier(); [JsonProperty("XP - Level Config")] public XpLevel xpLevel = new XpLevel(); [JsonProperty("Daily Timer Config")] public DailyTimer dailytimer = new DailyTimer(); [JsonProperty("Daily XP Limit Config")] public DailyXpLimit dailyxpLimit = new DailyXpLimit(); [JsonProperty("Daily Reset Limit Config")] public DailyResetLimit dailyresetLimit = new DailyResetLimit(); [JsonProperty("XP - Level Ranks")] public XpLevelRanks xpLevelRanks = new XpLevelRanks(); [JsonProperty("Rank Boosts")] public RankBoostsSettings Rankboostssettings = new RankBoostsSettings(); [JsonProperty("Special Groups")] public SpecialGroups specialGroups = new SpecialGroups(); [JsonProperty("XP - Night Bonus")] public NightBonus nightBonus = new NightBonus(); [JsonProperty("XP - Gain Amounts")] public XpGain xpGain = new XpGain(); [JsonProperty("XP - Gather Amounts")] public XpGather xpGather = new XpGather(); [JsonProperty("XP - Building Amounts")] public XpBuilding xpBuilding = new XpBuilding(); [JsonProperty("XP - Teams")] public XpTeams xpTeams = new XpTeams(); [JsonProperty("XP - Mission Amounts")] public XpMissions xpMissions = new XpMissions(); [JsonProperty("XP - Reducer Amounts")] public XpReducer xpReducer = new XpReducer(); [JsonProperty("BonusXP - Bonus Amounts (requires KillRecords plugin)")] public XpBonus xpBonus = new XpBonus(); [JsonProperty("Economics Rewards (requires Economics plugin)")] public XpEcon xpEcon = new XpEcon(); [JsonProperty("Server Rewards (requires ServerRewards plugin)")] public SRewards sRewards = new SRewards(); [JsonProperty("Mentality Stat")] public Mentality mentality = new Mentality(); [JsonProperty("Dexterity Stat")] public Dexterity dexterity = new Dexterity(); [JsonProperty("Might Stat")] public Might might = new Might(); [JsonProperty("Captaincy Stat")] public Captaincy captaincy = new Captaincy(); [JsonProperty("Weaponry Stat")] public Weaponry weaponry = new Weaponry(); [JsonProperty("WoodCutter Skill")] public Woodcutter woodcutter = new Woodcutter(); [JsonProperty("Smithy Skill")] public Smithy smithy = new Smithy(); [JsonProperty("Miner Skill")] public Miner miner = new Miner(); [JsonProperty("Forager Skill")] public Forager forager = new Forager(); [JsonProperty("Hunter Skill")] public Hunter hunter = new Hunter(); [JsonProperty("Fisher Skill")] public Fisher fisher = new Fisher(); [JsonProperty("Crafter Skill")] public Crafter crafter = new Crafter(); [JsonProperty("Framer Skill")] public Framer framer = new Framer(); [JsonProperty("Medic Skill")] public Medic medic = new Medic(); [JsonProperty("Scavenger Skill")] public Scavenger scavenger = new Scavenger(); [JsonProperty("Electrician Skill")] public Electrician electrician = new Electrician(); [JsonProperty("Tamer Skill")] public Tamer tamer = new Tamer(); [JsonProperty("Clans (requires Clans plugin)")] public XpClans xpclans = new XpClans(); [JsonProperty("SQL Info")] public SQL sql = new SQL(); [JsonProperty("Archery Mod")] public ArcheryMod archerymod = new ArcheryMod(); [JsonProperty("Wizardry Mod")] public WizardryMod wizardrymod = new WizardryMod(); [JsonProperty("Backpacks Mod")] public BackpacksMod backpacksmod = new BackpacksMod(); [JsonProperty("ZoneManager Mod")] public ZoneManagerMod zonemanagermod = new ZoneManagerMod(); } public class PlayerChatCommands { public string openplayerstats = "xpstats"; public string openplayerstats2 = "xpprofile"; public string openplayerstats3 = "xpinfo"; public string showplayerstatschat = "xpstatschat"; public string opentopplayers = "xptop"; public string playeraddstat = "xpaddstat"; public string playeraddskill = "xpaddskill"; public string playerresetstats = "xpresetstats"; public string playerresetskills = "xpresetskills"; public string playerresetall = "xprestart"; public string playerliveuichange = "xpliveui"; public string openhelp = "xphelp"; } public class AdminChatCommands { public string showadminhelp = "xpadminhelp"; public string openadminpanel = "xpconfig"; public string adminresetxperience = "xpresetall"; public string adminxpgive = "xpgive"; public string adminxpgiveall = "xpgiveall"; public string adminpointsgive = "xpgivepoints"; public string adminxptake = "xptake"; public string adminresetplayer = "xpresetplayer"; public string adminfixdata = "xpfix"; public string adminitemchange = "itemchange"; public string adminresetharvest = "resetharvest"; public string adminresetlevelonly = "resetlevel"; public string adminresetrankonly = "resetrank"; public string adminresetlevelonlyall = "resetalllevels"; public string adminresetrankonlyall = "resetallranks"; public string adminexcludeplayer = "xpexcludeplayer"; public string admingiveitem = "xpitem"; } public class PlayerInfoBoxSettings { public bool showinfobox = true; public bool alivetime = true; public bool sleepingtime = true; public bool swimingtime = true; public bool drivingtime = true; public bool flyingtime = true; public bool boatingtime = true; public bool basetime = true; public bool monumenttime = true; public bool wildernesstime = true; public bool metersran = true; public bool meterswalked = true; public bool lastdmgrec = true; public bool lastdmgrecby = true; public bool lastdmgdelt = true; public bool lastdmgdeltto = true; } public class DefaultOptions { public bool userpermissions = false; public int liveuistatslocation = 1; public bool liveuistatslocationmoveable = true; public bool showchatprofileonconnect = true; public bool showunusedeffects = false; public int NotifcationCooldown = 2; public bool restristresets = true; public bool allowrespec = true; public int resetminsstats = 60; public int resetminsskills = 60; public bool bypassadminreset = true; public int vipresetminstats = 30; public int vipresetminsskills = 30; public int playerfixdatatimer = 60; public bool disableplayerfixdata = false; public bool disablearmorchat = false; public bool hardcorenoreset = false; public bool allowplayersearch = true; public bool allowplayerreset = false; public int topplayersperpage = 20; public bool showonlinestatus = true; public bool useprogressivelevelicons = true; public bool showfuelguage = true; public bool showspeedometer = true; public int speedometertype = 1; public bool dropsgotoplayerinventory = true; public bool wipedataonnewsave = false; public bool enabledashpanel = true; public bool enableconfirmationprompt = true; public bool showchatnotifications = true; public bool useplayeravatar = true; } public class SoundEffects { public bool levelup = true; public bool leveldown = true; public bool rankup = true; public bool statup = true; public bool skillup = true; public bool statreset = true; public bool skillreset = true; public bool scavengerloot = true; public bool foragerloot = true; public string levelupeffect = "assets/prefabs/misc/halloween/lootbag/effects/silver_open.prefab"; public string leveldowneffect = "assets/bundled/prefabs/fx/player/howl.prefab"; public string rankupeffect = "assets/prefabs/misc/halloween/lootbag/effects/gold_open.prefab"; public string statupeffect = "assets/prefabs/misc/halloween/lootbag/effects/bronze_open.prefab"; public string skillupeffect = "assets/prefabs/misc/halloween/lootbag/effects/bronze_open.prefab"; public string statreseteffect = "assets/bundled/prefabs/fx/player/fall-damage.prefab"; public string skillreseteffect = "assets/bundled/prefabs/fx/player/fall-damage.prefab"; public string scavengerlooteffect = "assets/prefabs/misc/halloween/lootbag/effects/loot_bag_upgrade.prefab"; public string foragerlooteffect = "assets/prefabs/misc/halloween/lootbag/effects/loot_bag_upgrade.prefab"; } public class UITextColor { public string defaultcolor = "white"; public string level = "green"; public string ranklevel = "blue"; public string rankxp = "blue"; public string rankname = "magenta"; public string experience = "green"; public string nextlevel = "yellow"; public string remainingxp = "cyan"; public string statskilllevels = "yellow"; public string perks = "green"; public string unspentpoints = "green"; public string spentpoints = "red"; public string pets = "cyan"; public string mentality = "white"; public string dexterity = "white"; public string might = "white"; public string captaincy = "white"; public string weaponry = "white"; public string woodcutter = "white"; public string smithy = "white"; public string miner = "white"; public string forager = "white"; public string hunter = "white"; public string fisher = "white"; public string crafter = "white"; public string framer = "white"; public string medic = "white"; public string scavenger = "white"; public string electrician = "white"; public string tamer = "white"; public string xpbar = "green"; public string armorbar = "red"; } public class ImageIcons { public string mainicon = "https://i.imgur.com/JUwd2a8.png"; public string mentality = "https://i.imgur.com/dR7Hcif.png"; public string dexterity = "https://i.imgur.com/u9BSoMI.png"; public string might = "https://i.imgur.com/BXCVcKb.png"; public string captaincy = "https://i.imgur.com/6y5Yha1.png"; public string weaponry = "https://i.imgur.com/k6jGA6F.png"; public string woodcutter = "https://i.imgur.com/3teb5s2.png"; public string smithy = "https://i.imgur.com/uz8szzL.png"; public string miner = "https://i.imgur.com/lFkLUv0.png"; public string forager = "https://i.imgur.com/SSdZZ8O.png"; public string hunter = "https://i.imgur.com/UwASeQs.png"; public string fisher = "https://i.imgur.com/QU76hi1.png"; public string crafter = "https://i.imgur.com/IiywcbI.png"; public string framer = "https://i.imgur.com/M3VgQic.png"; public string medic = "https://i.imgur.com/mXp3Mrh.png"; public string scavenger = "https://i.imgur.com/g3S4XKW.png"; public string electrician = "https://i.imgur.com/BZJYvmX.png"; public string tamer = "https://i.imgur.com/DatpWzL.png"; public string chicken = "https://i.imgur.com/qJYzAZ6.png"; public string boar = "https://i.imgur.com/ou1DgxE.png"; public string stag = "https://i.imgur.com/CwACyuG.png"; public string wolf = "https://i.imgur.com/J18C2Je.png"; public string bear = "https://i.imgur.com/kTbD3B1.png"; public string polarbear = "https://i.imgur.com/Shk1sza.png"; public string archery = "https://i.imgur.com/qdm8AWg.png"; public string wizardry = "https://i.imgur.com/aNuEdni.png"; public string online = "https://i.imgur.com/WafMLkk.png"; public string offline = "https://i.imgur.com/QtbFqQz.png"; public string backpack = "https://i.imgur.com/zJbJpwx.png"; public string xp = "https://i.imgur.com/u46vNfo.png"; public string level = "https://i.imgur.com/2ouaBoh.png"; public string armor = "https://i.imgur.com/mEr59mA.png"; public string level0 = "https://i.imgur.com/7KTHgTa.png"; public string level2 = "https://i.imgur.com/GocRCM1.png"; public string level4 = "https://i.imgur.com/KxxRouB.png"; public string level6 = "https://i.imgur.com/Dgy9X9P.png"; public string level8 = "https://i.imgur.com/IYloCuJ.png"; public string level10 = "https://i.imgur.com/Xz9ZgZ4.png"; public string fuelguage = "https://i.imgur.com/NhhE3qm.png"; public string speedometer = "https://i.imgur.com/Q1Kqsfz.png"; public string dash = "https://i.imgur.com/LLKCN1n.png"; public string dmgindicator = "https://i.imgur.com/XzoMdbI.png"; } public class UINotifier { public bool useuinotify = false; public bool disablechats = false; public bool xpgainloss = true; public int xpgainlosstype = 0; public bool levelupdown = true; public int levelupdowntype = 0; public bool dodgeblock = true; public int dodgeblocktype = 0; public bool criticalhit = true; public int criticalhittype = 0; } public class XpLevel { public double levelstart = 25; public double levelmultiplier = 50; public int maxlevel = 500; public double levelxpboost = 0.05; public int statpointsperlvl = 1; public int skillpointsperlvl = 2; public bool alwaysearnxp = false; } public class XpLevelRanks { public bool enableresetranks = false; public bool resetallstatsskills = true; public bool allowplayerdisable = false; public bool increaselevelmultiplier = false; public double levelmultiplierincrease = 10; public int maxresetrank = 13; public bool enablerankxpboost = false; public double rankxpboost = 0.01; public bool rankstatboost = false; public double rankstatboostamount = 0.01; public int rankstatpointstart = 1; public int rankstatpointincrease = 1; public bool rankskillboost = false; public double rankskillboostamount = 0.01; public int rankskillpointstart = 2; public int rankskillpointincrease = 1; public bool keepremainingxp = true; public bool showtruelevelprofile = true; public bool showrankinchat = true; public bool showtruexpprofile = true; public bool showrankinliveui = true; public bool keepgrouponrank = true; public Dictionary ranks = new Dictionary { [0] = new Ranks { name = "Newbie", sig = "", image = "https://i.imgur.com/i6M4ZmV.png", group = "Newbies", description = "" }, [1] = new Ranks { name = "Airman", sig = "〘AMN〙", image = "https://i.imgur.com/E0NeO2R.png", group = "Airmans", description = "" }, [2] = new Ranks { name = "Airman First Class", sig = "〘A1C〙", image = "https://i.imgur.com/wYL15FW.png", group = "AirmanFirstClass", description = "" }, [3] = new Ranks { name = "Senior Airman", sig = "〘SRA〙", image = "https://i.imgur.com/egqFVW5.png", group = "SeniorAirman", description = "" }, [4] = new Ranks { name = "Staff Sergeant", sig = "〘SSGT〙", image = "https://i.imgur.com/pL6jbXM.png", group = "StaffSergeant", description = "" }, [5] = new Ranks { name = "Technical Sergeant", sig = "〘TSGT〙", image = "https://i.imgur.com/XrtmWAn.png", group = "TechnicalSergeant", description = "" }, [6] = new Ranks { name = "Master Sergeant", sig = "〘MSGT〙", image = "https://i.imgur.com/muYU6lf.png", group = "MasterSergeant", description = "" }, [7] = new Ranks { name = "First Sergeant", sig = "〘1stSGT〙", image = "https://i.imgur.com/1OJ2zso.png", group = "FirstSergeant", description = "" }, [8] = new Ranks { name = "Senior Master Sergeant", sig = "〘SMSGT〙", image = "https://i.imgur.com/zmNiE20.png", group = "SeniorMasterSergeant", description = "" }, [9] = new Ranks { name = "Senior First Sergeant", sig = "〘S1stSGT〙", image = "https://i.imgur.com/1S7Z0cO.png", group = "SeniorFirstSergeant", description = "" }, [10] = new Ranks { name = "Chief Master Sergeant", sig = "〘CMSGT〙", image = "https://i.imgur.com/V6dQMJL.png", group = "ChiefMasterSergeant", description = "" }, [11] = new Ranks { name = "Chief First Sergeant", sig = "〘C1stSGT〙", image = "https://i.imgur.com/Dm6B08J.png", group = "ChiefFirstSergeant", description = "" }, [12] = new Ranks { name = "Command Chief Master Sergeant", sig = "〘CCMSGT〙", image = "https://i.imgur.com/wE5C1w8.png", group = "CommandChiefMasterSergeant", description = "" }, [13] = new Ranks { name = "Chief Master Sergeant of the Server", sig = "〘CMSGTS〙", image = "https://i.imgur.com/UdqLO7a.png", group = "ChiefMasterSergeantoftheServer", description = "" } }; } public class RankBoostsSettings { // Stats #region Stats // Mentality public bool researchcost = true; public bool researchspeed = true; // Dexterity public bool block = true; public bool armor = true; // Captaincy public bool distance = true; //Might public bool meleedmg = true; public bool metabolism = true; #endregion // Skills #region Skills // WoodCutter public bool woodcuttergr = true; public bool woodcutterbonus = true; // Smithy public bool smithypr = true; public bool smithyps = true; public bool smithyfc = true; public bool smithyhqmc = true; public bool smithyhqma = true; // Miner public bool minergr = true; public bool minerbonus = true; public bool minermfc = true; public bool minerfuel = true; public bool minermfa = true; // Fisher public bool fisherfa = true; public bool fisheria = true; public bool fisherotr = true; // Forager public bool foragergr = true; public bool foragergwa = true; public bool foragerric = true; // Hunter public bool huntergr = true; public bool hunterbonus = true; public bool hunterdmg = true; public bool hunterndmg = true; // Crafter public bool crafterspeed = true; public bool craftercost = true; public bool crafterri = true; public bool crafterrc = true; public bool craftercc = true; public bool crafterca = true; // Framer public bool framerucost = true; public bool framerrcost = true; // Medic public bool medicrevivala = true; public bool medicrecovera = true; public bool medictools = true; // Scavenger public bool scavelc = true; public bool scavelm = true; public bool scavcic = true; public bool scavcim = true; #endregion } public class Ranks { public string name; public string sig; public string image; public string group; public string description; } public class SpecialGroups { public Dictionary specialgroups = new Dictionary { [0] = new Specialgroups { groupname = "Player XP Boost", permissionname = "PlayerXPBoost", grouppriority = 1, xpboost = 0.10, dailyxplimit = 0, dailystatlimitboost = 0, dailyskilllimitboost = 0 }, [1] = new Specialgroups { groupname = "Player Daily Limits 01", permissionname = "PlayerDailyLimits01", grouppriority = 2, xpboost = 0, dailyxplimit = 1000, dailystatlimitboost = 2, dailyskilllimitboost = 2 }, [2] = new Specialgroups { groupname = "Player Daily Limits 02", permissionname = "PlayerDailyLimits02", grouppriority = 3, xpboost = 0, dailyxplimit = 2000, dailystatlimitboost = 4, dailyskilllimitboost = 4 }, }; } public class Specialgroups { public string groupname; public string permissionname; public int grouppriority; public double xpboost; public int dailyxplimit; public int dailystatlimitboost; public int dailyskilllimitboost; } public class DailyTimer { public int dailyresettimerhours = 24; public DateTime lastdailyreset = DateTime.Now; } public class DailyXpLimit { public bool enabledailyxplimit = false; public int dailyxplimit = 5000; public int dailyxplimitvip = 7500; public int limitmultipliertype = 1; public int limitmultiplier = 2; public double limitpercentage = 0.10; } public class DailyResetLimit { public bool enabledailyresetlimit = false; public int dailystatlimit = 5; public int dailystatlimitvip = 10; public int dailyskilllimit = 5; public int dailyskilllimitvip = 10; } public class NightBonus { public bool Enable = true; public int StartTime = 19; public int EndTime = 5; public double Bonus = 0.10; public bool enableskillboosts = true; } public class XpGain { public double chickenxp = 5; public double fishxp = 5; public double boarxp = 10; public double stagxp = 15; public double wolfxp = 20; public double bearxp = 25; public double polarbearxp = 25; public double sharkxp = 30; public double horsexp = 20; public double scientistxp = 25; public double sc_full = 25; public double sc_heavy = 25; public double sc_cargo = 25; public double sc_junkpile = 25; public double sc_oilrig = 25; public double sc_patrol = 25; public double sc_peacekeeper = 25; public double sc_roam = 25; public double dwellerxp = 25; public double tunneldwellerxp = 25; public double underwaterdwellerxp = 25; public double scarecrownpc = 25; public double customnpc = 25; public double zombienpc = 25; public double playerxp = 25; public double lootcontainerxp = 5; public double lootbarrel = 5; public double oilbarrel = 5; public double vehicleparts = 5; public double toolcrate = 5; public double normalcrate = 5; public double elitecrate = 5; public double foodcrate = 5; public double medicalcrate = 5; public double animalharvestxp = 5; public double corpseharvestxp = 5; public double underwaterlootcontainerxp = 10; public double lockedcratexp = 25; public double hackablecratexp = 50; public double craftingxp = 5; public bool craftingxpdelay = true; public double craftingxpdelayseconds = 10; public double bradley = 25; public double patrolhelicopter = 30; public double turretxp = 5; public bool allowturretxp = false; public double playerrevive = 5; public bool enablexpboost = false; public double xpboostamount = 0.05; public int xpboostorder = 1; public double gifts = 5; public double opengifts = 5; public double opengiftsmed = 10; public double opengiftslarge = 15; public double upgradegiftsmed = 10; public double upgradegiftslarge = 15; } public class XpGather { public double treexp = 5; public double orexp = 5; public double metalorexp = 7; public double stoneorexp = 5; public double sulfurorexp = 6; public double harvestxp = 5; public double plantxp = 5; public bool noxptools = true; public bool onetimexp = false; public double toolxpchance = 0.20; public double toolxppercent = 0.10; } public class XpBuilding { public double twigstructure = 2; public double woodstructure = 5; public double stonestructure = 10; public double metalstructure = 15; public double armoredstructure = 20; public bool preventBGxp = false; public bool buildxpdelay = false; public bool requirebuildingprivlidge = true; public int buildxpdelayseconds = 2; public bool reducexp = false; public double buildxpreduction = 0.25; } public class XpTeams { public bool enableteamxpgain = true; public bool enableteamxploss = true; public double teamxpgainamount = 0.10; public double teamxplossamount = 0.05; public float teamdistance = 50f; } public class XpMissions { public double missionsucceededxp = 50; public bool missionfailed = false; public double missionfailedxp = 10; } public class XpReducer { public bool suicidereduce = true; public double suicidereduceamount = 0.05; public bool deathreduce = true; public double deathreduceamount = 0.05; } public class XpBonus { public bool showkrbutton = false; public bool enablebonus = false; public int requiredkills = 10; public double bonusxp = 5; public int endbonus = 500; public bool multibonus = true; public string multibonustype = "fixed"; } public class XpEcon { public bool showbalanceprofile = true; public bool econlevelup = false; public bool econleveldown = false; public bool econresetstats = false; public bool econresetskills = false; public bool econresetstat = false; public bool econresetskill = false; public double econlevelreward = 50; public double econlevelreduction = 25; public double econresetstatscost = 100; public double econresetskillscost = 100; public double econresetstatcost = 50; public double econresetskillcost = 50; public bool econstatlevelcost = false; public bool econskilllevelcost = false; public double econstatlevelcostmultiplier = 0; public double econskilllevelcostmultiplier = 0; public double econmentality = 100; public double econdexterity = 100; public double econmight = 100; public double econcaptaincy = 100; public double econweaponry = 100; public double econwoodcutter = 100; public double econsmithy = 100; public double econminer = 100; public double econforager = 100; public double econhunter = 100; public double econfisher = 100; public double econcrafter = 100; public double econframer = 100; public double econmedic = 100; public double econscavenger = 100; public double econelectrician = 100; public double econtamer = 100; } public class SRewards { public bool srewardlevelup = false; public bool srewardleveldown = false; public bool srewardresetstats = false; public bool srewardresetskills = false; public bool srewardresetstat = false; public bool srewardresetskill = false; public int srewardlevelupamt = 5; public int srewardleveldownamt = 5; public int srewardresetstatscost = 50; public int srewardresetskillscost = 50; public int srewardresetstatcost = 25; public int srewardresetskillcost = 25; public bool srewardstatlevelcost = false; public bool srewardskilllevelcost = false; public int srewardstatlevelcostmultiplier = 0; public int srewardskilllevelcostmultiplier = 0; public int srewardmentality = 50; public int srewarddexterity = 50; public int srewardmight = 50; public int srewardcaptaincy = 50; public int srewardweaponry = 50; public int srewardwoodcutter = 50; public int srewardsmithy = 50; public int srewardminer = 50; public int srewardforager = 50; public int srewardhunter = 50; public int srewardfisher = 50; public int srewardcrafter = 50; public int srewardframer = 50; public int srewardmedic = 50; public int srewardscavenger = 50; public int srewardelectrician = 50; public int srewardtamer = 50; } public class Mentality { public int maxlvl = 10; public int pointcoststart = 2; public int costmultiplier = 2; public double researchcost = 0.10; public double researchspeed = 0.10; public double criticalchance = 0.05; public double damageincrease = 0.01; public bool useotherresearchmod = false; public bool locktechtree = false; public int unlocktechtreelevel = 5; } public class Dexterity { public int maxlvl = 10; public int pointcoststart = 2; public int costmultiplier = 2; public double blockchance = 0.05; public double blockamount = 0.10; public double dodgechance = 0.05; public double reducearmordmg = 0.05; public double horsespeed = 0.05; public double boatspeed = 0.05; public double vehiclespeed = 0.05; public double fuelreduce = 0.05; } public class Might { public int maxlvl = 10; public int pointcoststart = 2; public int costmultiplier = 2; public double armor = 0.10; public double meleedmg = 0.05; public double metabolism = 0.02; public double bleedreduction = 0.05; public double radreduction = 0.05; public double heattolerance = 0.05; public double coldtolerance = 0.05; //public bool enablestacking = false; //public int stackmultiplier = 2; } public class Captaincy { public int maxlvl = 10; public int pointcoststart = 4; public int costmultiplier = 4; public bool allownoteam = false; public double skillboost = 0.05; public bool enablexpboost = false; public double xpboost = 0.05; public float captaincydistance = 10f; } public class Weaponry { public int maxlvl = 10; public int pointcoststart = 4; public int costmultiplier = 4; public double reductionchance = 0.10; public double tool = 0.05; public double powertools = 0.03; public double meleeweapons = 0.05; public double projectileweapons = 0.02; public double mindamage = 0.10; public double maxammo = 0.10; public double maxammolimit = 2; public bool skinboxdisable = true; public string reloadhook = "OnMagazineReload"; } public class Woodcutter { public int maxlvl = 10; public int pointcoststart = 2; public int costmultiplier = 2; public double gatherrate = 0.5; public double bonusincrease = 0.10; public double applechance = 0.10; } public class Smithy { public int maxlvl = 10; public int pointcoststart = 2; public int costmultiplier = 2; public double productionrate = 0.10; public double productionspeed = 0.10; public double fuelconsumption = 0.10; public double metalchance = 0.05; public int metalamount = 1; } public class Miner { public int maxlvl = 10; public int pointcoststart = 2; public int costmultiplier = 2; public double gatherrate = 0.5; public double bonusincrease = 0.10; public double fuelconsumption = 0.10; public double metalchance = 0.10; public int metalamount = 1; } public class Forager { public int maxlvl = 10; public int pointcoststart = 2; public int costmultiplier = 2; public double gatherrate = 0.3; public double chanceincrease = 0.10; public double grubwormincrease = 0.10; public double randomchance = 0.05; public Dictionary randomChanceList = new Dictionary { [0] = new RandomChanceList { shortname = "apple", displayname = "", SkinID = 0, amount = 1 }, [1] = new RandomChanceList { shortname = "bandage", displayname = "", SkinID = 0, amount = 1 }, [2] = new RandomChanceList { shortname = "scrap", displayname = "", SkinID = 0, amount = 1 }, [3] = new RandomChanceList { shortname = "bucket.water", displayname = "", SkinID = 0, amount = 1 }, [4] = new RandomChanceList { shortname = "metal.fragments", displayname = "", SkinID = 0, amount = 1 } }; } public class RandomChanceList { public string shortname = ""; public string displayname = ""; public ulong SkinID = 0; public int amount = 1; } public class Hunter { public int maxlvl = 10; public int pointcoststart = 2; public int costmultiplier = 2; public double gatherrate = 0.3; public double bonusincrease = 0.10; public double damageincrease = 0.05; public double nightdmgincrease = 0.01; } public class Fisher { public int maxlvl = 10; public int pointcoststart = 2; public int costmultiplier = 2; public double fishamountincrease = 0.75; public double itemamountincrease = 0.25; public double oxygenreduction = 0.04; public double oxygentankreduction = 0.05; } public class Crafter { public int maxlvl = 10; public int pointcoststart = 2; public int costmultiplier = 2; public double craftspeed = 0.10; public double craftcost = 0.05; public double repairincrease = 0.07; public double repaircost = 0.05; public double conditionchance = 0.07; public double conditionamount = 0.10; } public class Framer { public int maxlvl = 10; public int pointcoststart = 2; public int costmultiplier = 2; public double upgradecost = 0.05; public double repaircost = 0.05; public double repairtime = 0.10; } public class Electrician { public int maxlvl = 10; public int pointcoststart = 2; public int costmultiplier = 2; public int solarpaneldefault = 20; public int smallbatterydefault = 10; public int mediumbatterydefault = 50; public int largebatterydefault = 100; public int smallgeneratordefault = 40; public int electricwindmilldefault = 150; public double solarpanelinputincrease = 0.10; public double solarpanelmaxincrease = 0.10; public double smallbatterymaxincrease = 0.10; public double mediumbatterymaxincrease = 0.10; public double largebatterymaxincrease = 0.10; public double smallgeneratormaxincrease = 0.10; public double electricwindmillincrease = 0.10; public double electricwindmillmaxincrease = 0.10; public bool allowminsolarinput = false; public int minsolarinput = 1; } public class Medic { public int maxlvl = 10; public int pointcoststart = 2; public int costmultiplier = 2; public double revivehp = 5; public double recoverhp = 5; public double crafttime = 0.10; public double tools = 2; public double teas = 0.02; public bool preventbandageboost = false; } public class Scavenger { public int maxlvl = 10; public int pointcoststart = 2; public int costmultiplier = 2; public double scavlootchance = 0.10; public double scavchance = 0.05; public double scavmultiplier = 1.0; public double customscavmultiplier = 0.5; public bool customscavrandom = true; public bool usecustomscavlist = false; public bool drops = true; public bool crates = true; public bool uncrates = true; public bool lockedcrates = true; public bool hackcrates = true; public bool scientists = true; public bool componentsonly = true; public Dictionary scavChanceList = new Dictionary { [0] = new ScavChanceList { shortname = "scrap", displayname = "", SkinID = 0, amount = 1, maxamount = 10, requiredlevel = 1 }, [1] = new ScavChanceList { shortname = "metal.fragments", displayname = "", SkinID = 0, amount = 1, maxamount = 10, requiredlevel = 5 } }; } public class ScavChanceList { public string shortname = ""; public string displayname = ""; public ulong SkinID = 0; public int amount = 1; public int maxamount = 10; public int requiredlevel = 1; } public class Tamer { public bool enabletame = false; public int maxlvl = 6; public int pointcoststart = 2; public int costmultiplier = 2; public bool tamechicken = true; public bool tameboar = true; public bool tamestag = true; public bool tamewolf = true; public bool tamebear = true; public bool tamepolarbear = true; //public bool rideablepets = false; //public double petdamage = 0.05; public int chickenlevel = 1; public int boarlevel = 2; public int staglevel = 3; public int wolflevel = 4; public int bearlevel = 5; public int polarbearlevel = 6; } public class XpClans { public bool enableclanbonus = false; public bool enableclanreduction = false; public double clanbonusamount = 0.10; public double clanreductionamount = 0.02; } public class SQL { public bool enablesql = false; public string SQLhost = "localhost"; public int SQLport = 3306; public string SQLdatabase = "databasename"; public string SQLusername = "username"; public string SQLpassword = "password"; } public class ArcheryMod { public bool enablearchery = false; public bool rankrequired = false; public int ranklevel = 0; public string statorskill = "Hunter"; public int novicelevel = 1; public int adeptlevel = 5; public int masterlevel = 10; public bool removeonunload = true; } public class WizardryMod { public bool enablewizardry = false; public bool rankrequired = false; public int ranklevel = 0; public string statorskill = "Mentality"; public int novicelevel = 1; public int adeptlevel = 5; public int masterlevel = 10; public bool removeonunload = true; } public class BackpacksMod { public bool enablebackpacks = false; public string statorskill = "Might"; public int backpackrow1 = 1; public int backpackrow2 = 2; public int backpackrow3 = 3; public int backpackrow4 = 4; public int backpackrow5 = 5; public int backpackrow6 = 6; public int backpackrow7 = 7; public int backpackrow8 = 8; public bool removeonunload = true; } public class ZoneManagerMod { public string noxpgain = ""; public string noxploss = ""; public string disablestatsandskills = ""; } protected override void LoadDefaultConfig() => config = new Configuration(); protected override void LoadConfig() { base.LoadConfig(); try { config = Config.ReadObject(); if (config == null) { throw new JsonException(); } if (MaybeUpdateConfig(config)) { PrintWarning("Configuration appears to be outdated; updating and saving"); SaveConfig(); } } catch { PrintWarning($"Configuration file {Name}.json is invalid; using defaults"); LoadDefaultConfig(); } } protected override void SaveConfig() { PrintWarning($"Configuration changes saved to {Name}.json"); Config.WriteObject(config, true); } #region UpdateChecker internal class SerializableConfiguration { public string ToJson() => JsonConvert.SerializeObject(this); public Dictionary ToDictionary() => JsonHelper.Deserialize(ToJson()) as Dictionary; } private static class JsonHelper { public static object Deserialize(string json) => ToObject(JToken.Parse(json)); private static object ToObject(JToken token) { switch (token.Type) { case JTokenType.Object: return token.Children().ToDictionary(prop => prop.Name, prop => ToObject(prop.Value)); case JTokenType.Array: return token.Select(ToObject).ToList(); default: return ((JValue)token).Value; } } } private bool MaybeUpdateConfig(SerializableConfiguration config) { var currentWithDefaults = config.ToDictionary(); var currentRaw = Config.ToDictionary(x => x.Key, x => x.Value); return MaybeUpdateConfigDict(currentWithDefaults, currentRaw); } private bool MaybeUpdateConfigDict(Dictionary currentWithDefaults, Dictionary currentRaw) { bool changed = false; foreach (var key in currentWithDefaults.Keys) { object currentRawValue; if (currentRaw.TryGetValue(key, out currentRawValue)) { var defaultDictValue = currentWithDefaults[key] as Dictionary; var currentDictValue = currentRawValue as Dictionary; if (defaultDictValue != null) { if (currentDictValue == null) { currentRaw[key] = currentWithDefaults[key]; changed = true; } else if (MaybeUpdateConfigDict(defaultDictValue, currentDictValue)) changed = true; } } else { currentRaw[key] = currentWithDefaults[key]; changed = true; } } return changed; } #endregion public static class RandomNumber { private static readonly RNGCryptoServiceProvider _generator = new RNGCryptoServiceProvider(); public static int Between(int minimumValue, int maximumValue) { byte[] randomNumber = new byte[1]; _generator.GetBytes(randomNumber); double asciiValueOfRandomCharacter = Convert.ToDouble(randomNumber[0]); double multiplier = Math.Max(0, (asciiValueOfRandomCharacter / 255d) - 0.00000000001d); int range = maximumValue - minimumValue + 1; double randomValueInRange = Math.Floor(multiplier * range); return (int)(minimumValue + randomValueInRange); } } #endregion #region Storage private void SaveData() { if (_xpData != null) { _xpData.XPerience = _xperienceCache; _XPerienceData.WriteObject(_xpData); } if (_dailyData != null) { _dailyData.DailyXPerience = _dailyxperienceCache; _DailyXPerienceData.WriteObject(_dailyData); } } private void SaveLoot() { if (_lootData != null) { _lootData.LootRecords = _lootCache; _LootContainData.WriteObject(_lootData); } } private void SaveCorpse() { if (_corpseData != null) { _corpseData.CorpseRecords = _corpseCache; _CorpseContainData.WriteObject(_corpseData); } } private void SaveHorse() { if (_horseData != null) { _horseData.HorseRecords = _horseCache; _HorseData.WriteObject(_horseData); } } private void SaveWeapon() { if (_weaponData != null) { _weaponData.WeaponRecords = _weaponCache; _WeaponData.WriteObject(_weaponData); } } private void SaveBoat() { if (_boatData != null) { _boatData.BoatRecords = _boatCache; _BoatData.WriteObject(_boatData); } } private void SaveVehicle() { if (_vehicleData != null) { _vehicleData.VehicleRecords = _vehicleCache; _VehicleData.WriteObject(_vehicleData); } } private void SaveMinicopter() { if (_minicopterData != null) { _minicopterData.MinicopterRecords = _minicopterCache; _MinicopterData.WriteObject(_minicopterData); } } private void SaveSnowmob() { if (_snowmobData != null) { _snowmobData.SnowmobRecords = _snowmobCache; _SnowmobData.WriteObject(_snowmobData); } } private void SaveSmithyData() { if (_smithyData != null) { _smithyData.SmithyRecords = _smithyCache; _SmithyData.WriteObject(_smithyData); } } private void SaveElectricianData() { if (_electricianData != null) { _electricianData.ElectricianRecords = _electricianCache; _ElectricianData.WriteObject(_electricianData); } } private void LoadData() { try { _xpData = _XPerienceData.ReadObject(); _xperienceCache = _xpData.XPerience; } catch { _xpData = new XPData(); } try { _dailyData = _DailyXPerienceData.ReadObject(); _dailyxperienceCache = _dailyData.DailyXPerience; } catch { _dailyData = new DailyData(); } try { _lootData = _LootContainData.ReadObject(); _lootCache = _lootData.LootRecords; } catch { _lootData = new LootData(); } try { _corpseData = _CorpseContainData.ReadObject(); _corpseCache = _corpseData.CorpseRecords; } catch { _corpseData = new CorpseData(); } try { _horseData = _HorseData.ReadObject(); _horseCache = _horseData.HorseRecords; } catch { _horseData = new HorseData(); } try { _weaponData = _WeaponData.ReadObject(); _weaponCache = _weaponData.WeaponRecords; } catch { _weaponData = new WeaponData(); } try { _boatData = _BoatData.ReadObject(); _boatCache = _boatData.BoatRecords; } catch { _boatData = new BoatData(); } try { _vehicleData = _VehicleData.ReadObject(); _vehicleCache = _vehicleData.VehicleRecords; } catch { _vehicleData = new VehicleData(); } try { _minicopterData = _MinicopterData.ReadObject(); _minicopterCache = _minicopterData.MinicopterRecords; } catch { _minicopterData = new MinicopterData(); } try { _snowmobData = _SnowmobData.ReadObject(); _snowmobCache = _snowmobData.SnowmobRecords; } catch { _snowmobData = new SnowmobData(); } try { _smithyData = _SmithyData.ReadObject(); _smithyCache = _smithyData.SmithyRecords; } catch { _smithyData = new SmithyData(); } try { _electricianData = _ElectricianData.ReadObject(); _electricianCache = _electricianData.ElectricianRecords; } catch { _electricianData = new ElectricianData(); } } private class XPData { public Dictionary XPerience = new Dictionary(); } private class XPRecord { public int rank; public int truelevel; public int trueexperience; public double level; public double experience; public double requiredxp; public int statpoint; public int skillpoint; public int Mentality; public int MentalityP; public int Dexterity; public int DexterityP; public int Might; public int MightP; public int Captaincy; public int CaptaincyP; public int Weaponry; public int WeaponryP; public int WoodCutter; public int WoodCutterP; public int Smithy; public int SmithyP; public int Miner; public int MinerP; public int Forager; public int ForagerP; public int Hunter; public int HunterP; public int Fisher; public int FisherP; public int Crafter; public int CrafterP; public int Framer; public int FramerP; public int Electrician; public int ElectricianP; public int Medic; public int MedicP; public int Scavenger; public int ScavengerP; public int Tamer; public int TamerP; public int Wood; public int Stone; public int Metal; public int Sulfur; public int Cactus; public int Berries; public int Pumpkin; public int Potato; public int Corn; public int Mushroom; public int Hemp; public int Seed; public bool Status; public bool DisableRank; public int UILocation; public string teatype; public double teacooldown; public DateTime resettimerstats; public DateTime resettimerskills; public DateTime playerfixdata; public int dash; public bool fuelgauge; public bool speedometer; public int speedometertype; public bool enableconfirmationprompt; public bool showchatnotifications; public bool showchatprofileonconnect; public bool showwelcomepanel; public bool exclude; public string displayname; public string id; } private class DailyData { public Dictionary DailyXPerience = new Dictionary(); } private class DailyRecord { public double dailyexperience; public int dailystatresets; public int dailyskillresets; public DateTime lastexperiencereset; public DateTime laststatreset; public DateTime lastskillreset; } private class LootData { public Dictionary LootRecords = new Dictionary(); } private class Loot { public NetworkableId lootcontainer; public List id; } private class CorpseData { public Dictionary CorpseRecords = new Dictionary(); } private class Corpse { public NetworkableId corpsecontainer; public List id; } private class HorseData { public Dictionary HorseRecords = new Dictionary(); } private class Horse { public NetworkableId horse; public float maxSpeed; public float runSpeed; public float walkSpeed; public float trotSpeed; public ulong player; } private class WeaponData { public Dictionary WeaponRecords = new Dictionary(); } private class Weapon { public NetworkableId weapon; public int defaultammo; public int maxammo; public ulong player; } private class BoatData { public Dictionary BoatRecords = new Dictionary(); } private class Boat { public NetworkableId boat; public float defaultSpeed; public ulong player; } private class VehicleData { public Dictionary VehicleRecords = new Dictionary(); } private class Vehicle { public NetworkableId vehicle; public float maxDriveSlip; public float reversePercentSpeed; public float driveForceToMaxSlip; public ulong player; } private class MinicopterData { public Dictionary MinicopterRecords = new Dictionary(); } private class Minicopter { public NetworkableId minicopter; public float maxRotorSpeed; public ulong player; } private class SnowmobData { public Dictionary SnowmobRecords = new Dictionary(); } private class Snowmob { public NetworkableId snowmob; public float terrain; public double engineKW; public ulong player; } private class SmithyData { public Dictionary SmithyRecords = new Dictionary(); } private class SmithyD { public string resource; public float time; } private class ElectricianData { public Dictionary ElectricianRecords = new Dictionary(); } private class ElectricianD { public NetworkableId id; public string type; public int defaultmaxoutput; public int newmaxoutput; public ulong owner; } #endregion #region SQL private readonly Core.MySql.Libraries.MySql sqlLibrary = Interface.Oxide.GetLibrary(); Connection sqlConnection; private string RemoveSpecialCharacters(string name) { string newname = Regex.Replace(name, @"[^0-9a-zA-Z]+", ""); return newname; } private void CreatSQLTable() { sqlLibrary.Insert(Sql.Builder.Append($"CREATE TABLE IF NOT EXISTS XPerience (" + $" `id` BIGINT(255) NOT NULL AUTO_INCREMENT," + $" `steamid` BIGINT(255) NOT NULL," + $" `displayname` VARCHAR(255) NOT NULL," + $" `Rank` BIGINT(255) NOT NULL," + $" `RankName` VARCHAR(255) NOT NULL," + $" `RankSig` VARCHAR(255) NOT NULL," + $" `RankImg` VARCHAR(255) NOT NULL," + $" `RankLevel` BIGINT(255) NOT NULL," + $" `RankXP` BIGINT(255) NOT NULL," + $" `level` BIGINT(255) NOT NULL," + $" `experience` BIGINT(255) NOT NULL," + $" `requiredxp` BIGINT(255) NOT NULL," + $" `statpoint` BIGINT(255) NOT NULL," + $" `skillpoint` BIGINT(255) NOT NULL," + $" `Mentality` BIGINT(255) NOT NULL," + $" `MentalityP` BIGINT(255) NOT NULL," + $" `Dexterity` BIGINT(255) NOT NULL," + $" `DexterityP` BIGINT(255) NOT NULL," + $" `Might` BIGINT(255) NOT NULL," + $" `MightP` BIGINT(255) NOT NULL," + $" `Captaincy` BIGINT(255) NOT NULL," + $" `CaptaincyP` BIGINT(255) NOT NULL," + $" `Weaponry` BIGINT(255) NOT NULL," + $" `WeaponryP` BIGINT(255) NOT NULL," + $" `WoodCutter` BIGINT(255) NOT NULL," + $" `WoodCutterP` BIGINT(255) NOT NULL," + $" `Smithy` BIGINT(255) NOT NULL," + $" `SmithyP` BIGINT(255) NOT NULL," + $" `Miner` BIGINT(255) NOT NULL," + $" `MinerP` BIGINT(255) NOT NULL," + $" `Forager` BIGINT(255) NOT NULL," + $" `ForagerP` BIGINT(255) NOT NULL," + $" `Hunter` BIGINT(255) NOT NULL," + $" `HunterP` BIGINT(255) NOT NULL," + $" `Fisher` BIGINT(255) NOT NULL," + $" `FisherP` BIGINT(255) NOT NULL," + $" `Crafter` BIGINT(255) NOT NULL," + $" `CrafterP` BIGINT(255) NOT NULL," + $" `Framer` BIGINT(255) NOT NULL," + $" `FramerP` BIGINT(255) NOT NULL," + $" `Medic` BIGINT(255) NOT NULL," + $" `MedicP` BIGINT(255) NOT NULL," + $" `Scavenger` BIGINT(255) NOT NULL," + $" `ScavengerP` BIGINT(255) NOT NULL," + $" `Tamer` BIGINT(255) NOT NULL," + $" `TamerP` BIGINT(255) NOT NULL," + $" `Wood` BIGINT(255) NOT NULL," + $" `Stone` BIGINT(255) NOT NULL," + $" `Metal` BIGINT(255) NOT NULL," + $" `Sulfur` BIGINT(255) NOT NULL," + $" `Cactus` BIGINT(255) NOT NULL," + $" `Berries` BIGINT(255) NOT NULL," + $" `Pumpkin` BIGINT(255) NOT NULL," + $" `Potato` BIGINT(255) NOT NULL," + $" `Corn` BIGINT(255) NOT NULL," + $" `Mushroom` BIGINT(255) NOT NULL," + $" `Hemp` BIGINT(255) NOT NULL," + $" `Seed` BIGINT(255) NOT NULL," + $" `Status` VARCHAR(255) NOT NULL," + $"PRIMARY KEY (id)" + $" )ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;"), sqlConnection); } private void UpdateSQLTable() { try { bool rank = false; bool rankname = false; bool ranksig = false; bool rankimg = false; bool ranklevel = false; bool rankxp = false; bool wood = false; bool stone = false; bool metal = false; bool sulfur = false; bool cactus = false; bool berries = false; bool pumpkin = false; bool potato = false; bool corn = false; bool mushroom = false; bool hemp = false; bool seed = false; bool status = false; bool chemist = false; bool chemistp = false; bool scavenger = false; bool scavengerp = false; bool captaincy = false; bool captaincyp = false; bool weaponry = false; bool weaponryp = false; bool medic = false; bool medicp = false; sqlLibrary.Query(Sql.Builder.Append($"SELECT * FROM XPerience"), sqlConnection, list => { foreach (var entry in list) { if (!entry.ContainsKey("Rank")) { rank = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Rank` BIGINT(255) NOT NULL AFTER displayname"), sqlConnection); if (!entry.ContainsKey("RankName")) { rankname = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `RankName` BIGINT(255) NOT NULL AFTER TamerP"), sqlConnection); if (!entry.ContainsKey("RankSig")) { ranksig = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `RankSig` BIGINT(255) NOT NULL AFTER TamerP"), sqlConnection); if (!entry.ContainsKey("RankImg")) { rankimg = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `RankImg` BIGINT(255) NOT NULL AFTER TamerP"), sqlConnection); if (!entry.ContainsKey("RankLevel")) { ranklevel = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `RankLevel` BIGINT(255) NOT NULL AFTER TamerP"), sqlConnection); if (!entry.ContainsKey("RankXP")) { rankxp = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `RankXP` BIGINT(255) NOT NULL AFTER TamerP"), sqlConnection); if (!entry.ContainsKey("Wood")) { wood = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Wood` BIGINT(255) NOT NULL AFTER TamerP"), sqlConnection); if (!entry.ContainsKey("Stone")) { stone = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Stone` BIGINT(255) NOT NULL AFTER Wood"), sqlConnection); if (!entry.ContainsKey("Metal")) { metal = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Metal` BIGINT(255) NOT NULL AFTER Stone"), sqlConnection); if (!entry.ContainsKey("Sulfur")) { sulfur = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Sulfur` BIGINT(255) NOT NULL AFTER Metal"), sqlConnection); if (!entry.ContainsKey("Cactus")) { cactus = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Cactus` BIGINT(255) NOT NULL AFTER Sulfur"), sqlConnection); if (!entry.ContainsKey("Berries")) { berries = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Berries` BIGINT(255) NOT NULL AFTER Cactus"), sqlConnection); if (!entry.ContainsKey("Pumpkin")) { pumpkin = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Pumpkin` BIGINT(255) NOT NULL AFTER Berries"), sqlConnection); if (!entry.ContainsKey("Potato")) { potato = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Potato` BIGINT(255) NOT NULL AFTER Pumpkin"), sqlConnection); if (!entry.ContainsKey("Corn")) { corn = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Corn` BIGINT(255) NOT NULL AFTER Potato"), sqlConnection); if (!entry.ContainsKey("Mushroom")) { mushroom = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Mushroom` BIGINT(255) NOT NULL AFTER Corn"), sqlConnection); if (!entry.ContainsKey("Hemp")) { hemp = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Hemp` BIGINT(255) NOT NULL AFTER Mushroom"), sqlConnection); if (!entry.ContainsKey("Seed")) { seed = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Seed` BIGINT(255) NOT NULL AFTER Hemp"), sqlConnection); if (!entry.ContainsKey("Status")) { status = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Status` VARCHAR(255) NOT NULL AFTER Seed"), sqlConnection); } if (entry.ContainsKey("Chemist")) { chemist = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience DROP COLUMN `Chemist`"), sqlConnection); } if (entry.ContainsKey("ChemistP")) { chemistp = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience DROP COLUMN `ChemistP`"), sqlConnection); } if (!entry.ContainsKey("Scavenger")) { scavenger = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Scavenger` BIGINT(255) NOT NULL DEFAULT '0' AFTER MedicP"), sqlConnection); } if (!entry.ContainsKey("ScavengerP")) { scavenger = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `ScavengerP` BIGINT(255) NOT NULL DEFAULT '0' AFTER Scavenger"), sqlConnection); } if (!entry.ContainsKey("Captaincy")) { captaincy = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Captaincy` BIGINT(255) NOT NULL DEFAULT '0' AFTER MightP"), sqlConnection); } if (!entry.ContainsKey("CaptaincyP")) { captaincyp = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `CaptaincyP` BIGINT(255) NOT NULL DEFAULT '0' AFTER Captaincy"), sqlConnection); } if (!entry.ContainsKey("Weaponry")) { weaponry = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Captaincy` BIGINT(255) NOT NULL DEFAULT '0' AFTER MightP"), sqlConnection); } if (!entry.ContainsKey("WeaponryP")) { weaponryp = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `CaptaincyP` BIGINT(255) NOT NULL DEFAULT '0' AFTER Captaincy"), sqlConnection); } if (!entry.ContainsKey("Medic")) { medic = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Medic` BIGINT(255) NOT NULL DEFAULT '0' AFTER FramerP"), sqlConnection); } if (!entry.ContainsKey("MedicP")) { medicp = true; } // sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `MedicP` BIGINT(255) NOT NULL DEFAULT '0' AFTER Medic"), sqlConnection); } } if (rank) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Rank` BIGINT(255) NOT NULL AFTER displayname"), sqlConnection); } if (rankname) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `RankName` VARCHAR(255) NOT NULL AFTER Rank"), sqlConnection); } if (ranksig) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `RankSig` VARCHAR(255) NOT NULL AFTER RankName"), sqlConnection); } if (rankimg) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `RankImg` VARCHAR(255) NOT NULL AFTER RankSig"), sqlConnection); } if (ranklevel) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `RankLevel` BIGINT(255) NOT NULL AFTER RankImg"), sqlConnection); } if (rankxp) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `RankXP` BIGINT(255) NOT NULL AFTER RankLevel"), sqlConnection); } if (wood) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Wood` BIGINT(255) NOT NULL AFTER TamerP"), sqlConnection); } if (stone) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Stone` BIGINT(255) NOT NULL AFTER Wood"), sqlConnection); } if (metal) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Metal` BIGINT(255) NOT NULL AFTER Stone"), sqlConnection); } if (sulfur) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Sulfur` BIGINT(255) NOT NULL AFTER Metal"), sqlConnection); } if (cactus) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Cactus` BIGINT(255) NOT NULL AFTER Sulfur"), sqlConnection); } if (berries) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Berries` BIGINT(255) NOT NULL AFTER Cactus"), sqlConnection); } if (pumpkin) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Pumpkin` BIGINT(255) NOT NULL AFTER Berries"), sqlConnection); } if (potato) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Potato` BIGINT(255) NOT NULL AFTER Pumpkin"), sqlConnection); } if (corn) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Corn` BIGINT(255) NOT NULL AFTER Potato"), sqlConnection); } if (mushroom) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Mushroom` BIGINT(255) NOT NULL AFTER Corn"), sqlConnection); } if (hemp) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Hemp` BIGINT(255) NOT NULL AFTER Mushroom"), sqlConnection); } if (seed) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Seed` BIGINT(255) NOT NULL AFTER Hemp"), sqlConnection); } if (status) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Status` VARCHAR(255) NOT NULL AFTER Seed"), sqlConnection); } if (chemist) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience DROP COLUMN `Chemist`"), sqlConnection); } if (chemistp) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience DROP COLUMN `ChemistP`"), sqlConnection); } if (scavenger) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Scavenger` BIGINT(255) NOT NULL DEFAULT '0' AFTER MedicP"), sqlConnection); } if (scavengerp) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `ScavengerP` BIGINT(255) NOT NULL DEFAULT '0' AFTER Scavenger"), sqlConnection); } if (captaincy) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Captaincy` BIGINT(255) NOT NULL DEFAULT '0' AFTER MightP"), sqlConnection); } if (captaincyp) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `CaptaincyP` BIGINT(255) NOT NULL DEFAULT '0' AFTER Captaincy"), sqlConnection); } if (weaponry) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Weaponry` BIGINT(255) NOT NULL DEFAULT '0' AFTER CaptaincyP"), sqlConnection); } if (weaponryp) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `WeaponryP` BIGINT(255) NOT NULL DEFAULT '0' AFTER Weaponry"), sqlConnection); } if (medic) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `Medic` BIGINT(255) NOT NULL DEFAULT '0' AFTER FramerP"), sqlConnection); } if (medicp) { sqlLibrary.Insert(Sql.Builder.Append($"ALTER TABLE XPerience ADD COLUMN `MedicP` BIGINT(255) NOT NULL DEFAULT '0' AFTER Medic"), sqlConnection); } }); } catch (MySqlException e) { PrintError("Failed to Update Table (" + e.Message + ")"); } } private void CreatePlayerDataSQL(BasePlayer player) { XPRecord xprecord = GetXPRecord(player); Ranks rank = GetXPRank(xprecord.rank); // Remove special characters in names to prevent injection //string removespecials = "(['^$.|?*+%;@#()&{}\\\\])"; //string replacename = "\\$1"; //Regex rgx = new Regex(removespecials); //var playername = rgx.Replace(xprecord.displayname, replacename); //var rankname = rgx.Replace(rank.name, replacename); //var ranksig = rgx.Replace(rank.sig, replacename); sqlLibrary.Insert(Sql.Builder.Append("INSERT XPerience (steamid, displayname, Rank, RankName, RankSig, RankImg, RankLevel, RankXP, level, experience, requiredxp, statpoint, skillpoint, Mentality, MentalityP, Dexterity, DexterityP, Might, MightP, Captaincy, CaptaincyP, Weaponry, WeaponryP, WoodCutter, WoodCutterP, Smithy, SmithyP, Miner, MinerP, Forager, ForagerP, Hunter, HunterP, Fisher, FisherP, Crafter, CrafterP, Framer, FramerP, Medic, MedicP, Scavenger, ScavengerP, Tamer, TamerP, Wood, Stone, Metal, Sulfur, Cactus, Berries, Pumpkin, Potato, Corn, Mushroom, Hemp, Seed, Status) " + "VALUES (" + $"'{xprecord.id}', " + $"'{RemoveSpecialCharacters(xprecord.displayname)}', " + $"'{xprecord.rank}', " + $"'{RemoveSpecialCharacters(rank.name)}', " + $"'{RemoveSpecialCharacters(rank.sig)}', " + $"'{rank.image}', " + $"'{xprecord.truelevel}', " + $"'{xprecord.trueexperience}', " + $"'{xprecord.level}', " + $"'{xprecord.experience}', " + $"'{xprecord.requiredxp}', " + $"'{xprecord.statpoint}', " + $"'{xprecord.skillpoint}', " + $"'{xprecord.Mentality}', " + $"'{xprecord.MentalityP}', " + $"'{xprecord.Dexterity}', " + $"'{xprecord.DexterityP}', " + $"'{xprecord.Might}', " + $"'{xprecord.MightP}', " + $"'{xprecord.Captaincy}', " + $"'{xprecord.CaptaincyP}', " + $"'{xprecord.Weaponry}', " + $"'{xprecord.WeaponryP}', " + $"'{xprecord.WoodCutter}', " + $"'{xprecord.WoodCutterP}', " + $"'{xprecord.Smithy}', " + $"'{xprecord.SmithyP}', " + $"'{xprecord.Miner}', " + $"'{xprecord.MinerP}', " + $"'{xprecord.Forager}', " + $"'{xprecord.ForagerP}', " + $"'{xprecord.Hunter}', " + $"'{xprecord.HunterP}', " + $"'{xprecord.Fisher}', " + $"'{xprecord.FisherP}', " + $"'{xprecord.Crafter}', " + $"'{xprecord.CrafterP}', " + $"'{xprecord.Framer}', " + $"'{xprecord.FramerP}', " + $"'{xprecord.Medic}', " + $"'{xprecord.MedicP}', " + $"'{xprecord.Scavenger}', " + $"'{xprecord.ScavengerP}', " + $"'{xprecord.Tamer}', " + $"'{xprecord.TamerP}', " + $"'{xprecord.Wood}', " + $"'{xprecord.Stone}', " + $"'{xprecord.Metal}', " + $"'{xprecord.Sulfur}', " + $"'{xprecord.Cactus}', " + $"'{xprecord.Berries}', " + $"'{xprecord.Pumpkin}', " + $"'{xprecord.Potato}', " + $"'{xprecord.Corn}', " + $"'{xprecord.Mushroom}', " + $"'{xprecord.Hemp}', " + $"'{xprecord.Seed}', " + $"'{xprecord.Status}');"), sqlConnection); } private void UpdatePlayersDataSQL() { foreach (var r in _xperienceCache) { // Remove special characters in names to prevent injection //string removespecials = "(['^$.|?*+%@#;()&{}\\\\])"; //string replacename = "\\$1"; //Regex rgx = new Regex(removespecials); //var playername = rgx.Replace(r.Value.displayname, replacename); Ranks rank = GetXPRank(r.Value.rank); //var rankname = rgx.Replace(rank.name, replacename); //var ranksig = rgx.Replace(rank.sig, replacename); sqlLibrary.Update(Sql.Builder.Append($"UPDATE XPerience SET " + $"steamid='{r.Value.id}', " + $"displayname='{RemoveSpecialCharacters(r.Value.displayname)}', " + $"Rank='{r.Value.rank}', " + $"RankName='{RemoveSpecialCharacters(rank.name)}', " + $"RankSig='{RemoveSpecialCharacters(rank.sig)}', " + $"RankImg='{rank.image}', " + $"RankLevel='{r.Value.truelevel}', " + $"RankXP='{r.Value.trueexperience}', " + $"level='{r.Value.level}', " + $"experience='{r.Value.experience}', " + $"requiredxp='{r.Value.requiredxp}', " + $"statpoint='{r.Value.statpoint}', " + $"skillpoint='{r.Value.skillpoint}', " + $"Mentality='{r.Value.Mentality}', " + $"MentalityP='{r.Value.MentalityP}', " + $"Dexterity='{r.Value.Dexterity}', " + $"DexterityP='{r.Value.DexterityP}', " + $"Might='{r.Value.Might}', " + $"MightP='{r.Value.MightP}', " + $"Captaincy='{r.Value.Captaincy}', " + $"CaptaincyP='{r.Value.CaptaincyP}', " + $"Weaponry='{r.Value.Weaponry}', " + $"WeaponryP='{r.Value.WeaponryP}', " + $"WoodCutter='{r.Value.WoodCutter}', " + $"WoodCutterP='{r.Value.WoodCutterP}', " + $"Smithy='{r.Value.Smithy}', " + $"SmithyP='{r.Value.SmithyP}', " + $"Miner='{r.Value.Miner}', " + $"MinerP='{r.Value.MinerP}', " + $"Forager='{r.Value.Forager}', " + $"ForagerP='{r.Value.ForagerP}', " + $"Hunter='{r.Value.Hunter}', " + $"HunterP='{r.Value.HunterP}', " + $"Fisher='{r.Value.Fisher}', " + $"FisherP='{r.Value.FisherP}', " + $"Crafter='{r.Value.Crafter}', " + $"CrafterP='{r.Value.CrafterP}', " + $"Framer='{r.Value.Framer}', " + $"FramerP='{r.Value.FramerP}', " + $"Medic='{r.Value.Medic}', " + $"MedicP='{r.Value.MedicP}', " + $"Scavenger='{r.Value.Scavenger}', " + $"ScavengerP='{r.Value.ScavengerP}', " + $"Tamer='{r.Value.Tamer}', " + $"TamerP='{r.Value.TamerP}', " + $"Wood='{r.Value.Wood}', " + $"Stone='{r.Value.Stone}', " + $"Metal='{r.Value.Metal}', " + $"Sulfur='{r.Value.Sulfur}', " + $"Cactus='{r.Value.Cactus}', " + $"Berries='{r.Value.Berries}', " + $"Pumpkin='{r.Value.Pumpkin}', " + $"Potato='{r.Value.Potato}', " + $"Corn='{r.Value.Corn}', " + $"Mushroom='{r.Value.Mushroom}', " + $"Hemp='{r.Value.Hemp}', " + $"Seed='{r.Value.Seed}', " + $"Status='{r.Value.Status}' " + $"WHERE steamid = '{r.Key}';"), sqlConnection); } } private void UpdatePlayerDataSQL(BasePlayer player) { XPRecord xprecord = GetXPRecord(player); // Remove special characters in names to prevent injection //string removespecials = "(['^$.|?*+%@#;()&{}\\\\])"; //string replacename = "\\$1"; //Regex rgx = new Regex(removespecials); //var playername = rgx.Replace(xprecord.displayname, replacename); Ranks rank = GetXPRank(xprecord.rank); //var rankname = rgx.Replace(rank.name, replacename); //var ranksig = rgx.Replace(rank.sig, replacename); sqlLibrary.Update(Sql.Builder.Append($"UPDATE XPerience SET " + $"steamid='{xprecord.id}', " + $"displayname='{RemoveSpecialCharacters(xprecord.displayname)}', " + $"Rank='{xprecord.rank}', " + $"RankName='{RemoveSpecialCharacters(rank.name)}', " + $"RankSig='{RemoveSpecialCharacters(rank.sig)}', " + $"RankImg='{rank.image}', " + $"RankLevel='{xprecord.truelevel}', " + $"RankXP='{xprecord.trueexperience}', " + $"level='{xprecord.level}', " + $"experience='{xprecord.experience}', " + $"requiredxp='{xprecord.requiredxp}', " + $"statpoint='{xprecord.statpoint}', " + $"skillpoint='{xprecord.skillpoint}', " + $"Mentality='{xprecord.Mentality}', " + $"MentalityP='{xprecord.MentalityP}', " + $"Dexterity='{xprecord.Dexterity}', " + $"DexterityP='{xprecord.DexterityP}', " + $"Might='{xprecord.Might}', " + $"MightP='{xprecord.MightP}', " + $"Captaincy='{xprecord.Captaincy}', " + $"CaptaincyP='{xprecord.CaptaincyP}', " + $"Weaponry='{xprecord.Weaponry}', " + $"WeaponryP='{xprecord.WeaponryP}', " + $"WoodCutter='{xprecord.WoodCutter}', " + $"WoodCutterP='{xprecord.WoodCutterP}', " + $"Smithy='{xprecord.Smithy}', " + $"SmithyP='{xprecord.SmithyP}', " + $"Miner='{xprecord.Miner}', " + $"MinerP='{xprecord.MinerP}', " + $"Forager='{xprecord.Forager}', " + $"ForagerP='{xprecord.ForagerP}', " + $"Hunter='{xprecord.Hunter}', " + $"HunterP='{xprecord.HunterP}', " + $"Fisher='{xprecord.Fisher}', " + $"FisherP='{xprecord.FisherP}', " + $"Crafter='{xprecord.Crafter}', " + $"CrafterP='{xprecord.CrafterP}', " + $"Framer='{xprecord.Framer}', " + $"FramerP='{xprecord.FramerP}', " + $"Medic='{xprecord.Medic}', " + $"MedicP='{xprecord.MedicP}', " + $"Scavenger='{xprecord.Scavenger}', " + $"ScavengerP='{xprecord.ScavengerP}', " + $"Tamer='{xprecord.Tamer}', " + $"TamerP='{xprecord.TamerP}', " + $"Wood='{xprecord.Wood}', " + $"Stone='{xprecord.Stone}', " + $"Metal='{xprecord.Metal}', " + $"Sulfur='{xprecord.Sulfur}', " + $"Cactus='{xprecord.Cactus}', " + $"Berries='{xprecord.Berries}', " + $"Pumpkin='{xprecord.Pumpkin}', " + $"Potato='{xprecord.Potato}', " + $"Corn='{xprecord.Corn}', " + $"Mushroom='{xprecord.Mushroom}', " + $"Hemp='{xprecord.Hemp}', " + $"Seed='{xprecord.Seed}', " + $"Status='{xprecord.Status}' " + $"WHERE steamid = '{player.UserIDString}';"), sqlConnection); } private void CheckPlayerDataSQL(BasePlayer player) { bool newplayer = true; sqlLibrary.Query(Sql.Builder.Append($"SELECT steamid FROM XPerience"), sqlConnection, list => { foreach (var entry in list) { if (entry["steamid"].ToString() == player.UserIDString) { UpdatePlayerDataSQL(player); newplayer = false; } } if (newplayer) { CreatePlayerDataSQL(player); } }); } private void DeleteSQL() { sqlLibrary.Delete(Sql.Builder.Append($"DELETE FROM XPerience;"), sqlConnection); } #endregion #region Load/Save private void Init() { Unsubscribe(nameof(OnRunPlayerMetabolism)); Unsubscribe(nameof(OnPlayerDeath)); Unsubscribe(nameof(OnResearchCostDetermine)); Unsubscribe(nameof(CanUnlockTechTreeNode)); Unsubscribe(nameof(OnTechTreeNodeUnlock)); Unsubscribe(nameof(OnItemResearch)); _xperienceCache = new Dictionary(); _dailyxperienceCache = new Dictionary(); _lootCache = new Dictionary(); _corpseCache = new Dictionary(); _horseCache = new Dictionary(); _weaponCache = new Dictionary(); _boatCache = new Dictionary(); _vehicleCache = new Dictionary(); _minicopterCache = new Dictionary(); _snowmobCache = new Dictionary(); _smithyCache = new Dictionary(); _electricianCache = new Dictionary(); ChangeImageURLs(); } private void OnServerInitialized() { cmd.AddChatCommand(config.playerchatCommands.openplayerstats, this, Openplayerstats); cmd.AddChatCommand(config.playerchatCommands.openplayerstats2, this, Openplayerstats); cmd.AddChatCommand(config.playerchatCommands.openplayerstats3, this, Openplayerstats); cmd.AddChatCommand(config.playerchatCommands.opentopplayers, this, Opentopplayers); cmd.AddChatCommand(config.playerchatCommands.openhelp, this, Openhelp); cmd.AddChatCommand(config.playerchatCommands.showplayerstatschat, this, Showplayerstatschat); cmd.AddChatCommand(config.playerchatCommands.playeraddstat, this, Playeraddstat); cmd.AddChatCommand(config.playerchatCommands.playeraddskill, this, Playeraddskill); cmd.AddChatCommand(config.playerchatCommands.playerresetstats, this, Playerresetstats); cmd.AddChatCommand(config.playerchatCommands.playerresetskills, this, Playerresetskills); cmd.AddChatCommand(config.playerchatCommands.playerresetall, this, Playerresetall); cmd.AddChatCommand(config.playerchatCommands.playerliveuichange, this, Playerliveuichange); cmd.AddChatCommand(config.adminchatCommands.showadminhelp, this, Showadminhelp); cmd.AddChatCommand(config.adminchatCommands.openadminpanel, this, Openadminpanel); cmd.AddChatCommand(config.adminchatCommands.adminresetxperience, this, Adminresetxperience); cmd.AddChatCommand(config.adminchatCommands.adminxpgive, this, Adminxpgive); cmd.AddChatCommand(config.adminchatCommands.adminxpgiveall, this, Adminxpgiveall); cmd.AddChatCommand(config.adminchatCommands.adminpointsgive, this, Adminpointsgive); cmd.AddChatCommand(config.adminchatCommands.adminxptake, this, Adminxptake); cmd.AddChatCommand(config.adminchatCommands.adminresetplayer, this, Adminxpresetplayer); cmd.AddChatCommand(config.adminchatCommands.adminfixdata, this, Adminfixdata); cmd.AddChatCommand(config.adminchatCommands.adminitemchange, this, Adminitemchange); cmd.AddChatCommand(config.adminchatCommands.adminresetharvest, this, AdminHarvestReset); cmd.AddChatCommand(config.adminchatCommands.adminresetlevelonly, this, AdminLevelReset); cmd.AddChatCommand(config.adminchatCommands.adminresetrankonly, this, AdminRankReset); cmd.AddChatCommand(config.adminchatCommands.adminresetlevelonlyall, this, AdminLevelResetAll); cmd.AddChatCommand(config.adminchatCommands.adminresetrankonlyall, this, AdminRankResetAll); cmd.AddChatCommand(config.adminchatCommands.adminexcludeplayer, this, AdminExcludePlayer); cmd.AddChatCommand(config.adminchatCommands.admingiveitem, this, AdminGiveItem); _XPerienceData = Interface.Oxide.DataFileSystem.GetFile(nameof(XPerience) + "/XPerience"); _DailyXPerienceData = Interface.Oxide.DataFileSystem.GetFile(nameof(XPerience) + "/DailyXPerience"); _LootContainData = Interface.Oxide.DataFileSystem.GetFile(nameof(XPerience) + "/XPLootData"); _CorpseContainData = Interface.Oxide.DataFileSystem.GetFile(nameof(XPerience) + "/XPCorpseData"); _HorseData = Interface.Oxide.DataFileSystem.GetFile(nameof(XPerience) + "/XPHorseData"); _WeaponData = Interface.Oxide.DataFileSystem.GetFile(nameof(XPerience) + "/XPWeaponData"); _BoatData = Interface.Oxide.DataFileSystem.GetFile(nameof(XPerience) + "/XPBoatData"); _VehicleData = Interface.Oxide.DataFileSystem.GetFile(nameof(XPerience) + "/XPVehicleData"); _MinicopterData = Interface.Oxide.DataFileSystem.GetFile(nameof(XPerience) + "/XPMinicopterData"); _SnowmobData = Interface.Oxide.DataFileSystem.GetFile(nameof(XPerience) + "/XPSnowmobileData"); _SmithyData = Interface.Oxide.DataFileSystem.GetFile(nameof(XPerience) + "/XPSmithyData"); _ElectricianData = Interface.Oxide.DataFileSystem.GetFile(nameof(XPerience) + "/XPElectricianData"); LoadData(); SaveData(); SaveLoot(); SaveCorpse(); SaveHorse(); SaveWeapon(); SaveBoat(); SaveVehicle(); SaveMinicopter(); SaveSnowmob(); SaveSmithyData(); SaveElectricianData(); if (config.xpReducer.deathreduce) { Subscribe(nameof(OnPlayerDeath)); } permission.RegisterPermission(Admin, this); permission.RegisterPermission(VIP, this); permission.RegisterPermission(PermMentality, this); permission.RegisterPermission(PermDexterity, this); permission.RegisterPermission(PermMight, this); permission.RegisterPermission(PermCaptaincy, this); permission.RegisterPermission(PermWeaponry, this); permission.RegisterPermission(PermWoodCutter, this); permission.RegisterPermission(PermSmithy, this); permission.RegisterPermission(PermMiner, this); permission.RegisterPermission(PermForager, this); permission.RegisterPermission(PermHunter, this); permission.RegisterPermission(PermFisher, this); permission.RegisterPermission(PermCrafter, this); permission.RegisterPermission(PermFramer, this); permission.RegisterPermission(PermMedic, this); permission.RegisterPermission(PermScavenger, this); permission.RegisterPermission(PermElectrician, this); permission.RegisterPermission(PermTamer, this); permission.RegisterPermission(PermXPBoost, this); if (config.xpLevelRanks.enableresetranks) { foreach (var rank in config.xpLevelRanks.ranks) { permission.CreateGroup(rank.Value.group, rank.Value.sig, rank.Key); } } foreach (var specialgroup in config.specialGroups.specialgroups) { permission.CreateGroup(specialgroup.Value.permissionname, specialgroup.Value.groupname, specialgroup.Key); } Subscribe(nameof(OnRunPlayerMetabolism)); CheckOnlineStatus(); Timer checkonlinestatus = timer.Every(600f, () => { CheckOnlineStatus(); }); LibraryCheck(); BasePlayer.activePlayerList.ToList().ForEach(OnPlayerConnected); if (config.sql.enablesql) { sqlConnection = sqlLibrary.OpenDb(config.sql.SQLhost, config.sql.SQLport, config.sql.SQLdatabase, config.sql.SQLusername, config.sql.SQLpassword, this); CreatSQLTable(); UpdateSQLTable(); } if (!config.mentality.useotherresearchmod) { Subscribe(nameof(OnResearchCostDetermine)); Subscribe(nameof(CanUnlockTechTreeNode)); Subscribe(nameof(OnTechTreeNodeUnlock)); Subscribe(nameof(OnItemResearch)); } CheckConfigValues(); // SkinBox if (SkinBox != null) { Puts("SkinBox mod detected. Known conflict/exploit with SkinBox Skinned weapons and Weaponry stat. You can disable increase ammo due to exloits in weapnry settings."); } // BuildGrades if(BuildingGrades != null) { config.xpBuilding.buildxpdelay = true; } else { config.xpBuilding.buildxpdelay = false; config.xpBuilding.buildxpdelayseconds = 0; } // Website Help Puts("For Help Installing and Setting up XPerience check out https://www.rustlevels.com/XPerience/"); // Prevent Burnt Cookables foreach (var shortname in CookedItems) { var cookable = GetCookables(shortname); if (cookable == null) continue; lowTemps.Add(shortname, cookable.lowTemp); highTemps.Add(shortname, cookable.highTemp); cookable.lowTemp = -1; cookable.highTemp = -1; } } private void OnNewSave() { if (config.defaultOptions.wipedataonnewsave) { _xperienceCache.Clear(); _lootCache.Clear(); _XPerienceData.Clear(); _LootContainData.Clear(); _corpseCache.Clear(); _CorpseContainData.Clear(); SaveData(); SaveLoot(); SaveCorpse(); SaveElectricianData(); if (config.sql.enablesql) { DeleteSQL(); } } } private void OnPluginLoaded(Plugin name) { if (ImageLibrary != null && name.Name == ImageLibrary.Name && !_isRestart) { _imageLibraryCheck = 0; LibraryCheck(); } } private void Unload() { foreach (var player in BasePlayer.activePlayerList) { DestroyUi(player, XPerienceLivePrimary); DestroyUi(player, XPerienceLiveFuel); DestroyUi(player, XPerienceLiveSpeed); DestroyUi(player, XPeriencePlayerControlPrimary); DestroyUi(player, XPerienceTopMain); DestroyUi(player, XPerienceAdminPanelMain); DestroyUi(player, XPeriencePlayerControlFullMain); DestroyUi(player, XPeriencePlayerInfoBox); DestroyUi(player, XPerienceLiveDashPanel); DestroyUi(player, XPeriencePlayerControlPrompt); DestroyUi(player, XPerienceAdminPanelElectricianSettings); ClearPlayerUIs(player); if (config.backpacksmod.removeonunload) { if (permission.UserHasPermission(player.UserIDString, Backpack1)) { permission.RevokeUserPermission(player.UserIDString, Backpack1); } if (permission.UserHasPermission(player.UserIDString, Backpack2)) { permission.RevokeUserPermission(player.UserIDString, Backpack2); } if (permission.UserHasPermission(player.UserIDString, Backpack3)) { permission.RevokeUserPermission(player.UserIDString, Backpack3); } if (permission.UserHasPermission(player.UserIDString, Backpack4)) { permission.RevokeUserPermission(player.UserIDString, Backpack4); } if (permission.UserHasPermission(player.UserIDString, Backpack5)) { permission.RevokeUserPermission(player.UserIDString, Backpack5); } if (permission.UserHasPermission(player.UserIDString, Backpack6)) { permission.RevokeUserPermission(player.UserIDString, Backpack6); } if (permission.UserHasPermission(player.UserIDString, Backpack7)) { permission.RevokeUserPermission(player.UserIDString, Backpack7); } } if (config.archerymod.removeonunload) { if (permission.UserHasPermission(player.UserIDString, ArcheryNovice)) { permission.RevokeUserPermission(player.UserIDString, ArcheryNovice); } if (permission.UserHasPermission(player.UserIDString, ArcheryAdept)) { permission.RevokeUserPermission(player.UserIDString, ArcheryAdept); } if (permission.UserHasPermission(player.UserIDString, ArcheryMaster)) { permission.RevokeUserPermission(player.UserIDString, ArcheryMaster); } } if (config.wizardrymod.removeonunload) { if (permission.UserHasPermission(player.UserIDString, WizardryNovice)) { permission.RevokeUserPermission(player.UserIDString, WizardryNovice); } if (permission.UserHasPermission(player.UserIDString, WizardryAdept)) { permission.RevokeUserPermission(player.UserIDString, WizardryAdept); } if (permission.UserHasPermission(player.UserIDString, WizardryMaster)) { permission.RevokeUserPermission(player.UserIDString, WizardryMaster); } } } SaveData(); SaveLoot(); SaveCorpse(); SaveHorse(); SaveWeapon(); SaveBoat(); SaveVehicle(); SaveMinicopter(); SaveElectricianData(); if (config.sql.enablesql) { UpdatePlayersDataSQL(); sqlLibrary.CloseDb(sqlConnection); } _xperienceImageList?.Clear(); // Remove Burnable Cookables foreach (KeyValuePair item in lowTemps) { var cookable = GetCookables(item.Key); if (cookable == null) continue; cookable.lowTemp = item.Value; cookable.highTemp = highTemps[item.Key]; } } private void OnServerShutdown() { //_weaponCache.Clear(); //_WeaponData.Clear(); _lootCache.Clear(); _LootContainData.Clear(); _corpseCache.Clear(); _CorpseContainData.Clear(); _horseCache.Clear(); _HorseData.Clear(); _boatCache.Clear(); _BoatData.Clear(); _vehicleCache.Clear(); _VehicleData.Clear(); _minicopterCache.Clear(); _MinicopterData.Clear(); SaveData(); SaveLoot(); SaveCorpse(); SaveHorse(); SaveWeapon(); SaveBoat(); SaveVehicle(); SaveMinicopter(); SaveElectricianData(); if (config.sql.enablesql) { UpdatePlayersDataSQL(); sqlLibrary.CloseDb(sqlConnection); } } private void OnServerSave() { CheckOnlineStatus(); SaveData(); SaveLoot(); SaveCorpse(); SaveHorse(); SaveWeapon(); SaveBoat(); SaveVehicle(); SaveMinicopter(); SaveSnowmob(); SaveSmithyData(); SaveElectricianData(); if (config.sql.enablesql) { foreach (var player in BasePlayer.allPlayerList) { CheckPlayerDataSQL(player); } UpdatePlayersDataSQL(); } } private void OnPlayerConnected(BasePlayer player) { if (player == null || !player.userID.IsSteamId()) return; UpdateDisplayName(player); GetXPRecord(player); XPRecord xprecord = GetXPRecord(player); DailyLimitPlayer(player); PlayerArmor(player); MightAttributes(player); if (!config.defaultOptions.liveuistatslocationmoveable) { _xperienceCache[player.UserIDString].UILocation = config.defaultOptions.liveuistatslocation; } LiveStats(player, true); if (config.defaultOptions.showchatprofileonconnect && xprecord.showchatprofileonconnect) { PlayerStatsChat(player); } _xperienceCache[player.UserIDString].Status = true; if (_xperienceCache[player.UserIDString].dash == 0 || _xperienceCache[player.UserIDString].dash == 2) { _xperienceCache[player.UserIDString].dash = 1; } if (_xperienceCache[player.UserIDString].speedometertype == 0) { _xperienceCache[player.UserIDString].speedometertype = 1; } if (config.xpLevelRanks.enableresetranks) { if(!config.xpLevelRanks.allowplayerdisable) { _xperienceCache[player.UserIDString].DisableRank = false; } RankCheck(player); } // Backpack Check if (Backpacks != null && config.backpacksmod.enablebackpacks) { BackPackChecks(player, config.backpacksmod.statorskill, false); } // Archery Check if (Archery != null && config.archerymod.enablearchery) { ArcheryChecks(player, config.archerymod.statorskill, false); } // Wizardry Check if (Wizardry != null && config.wizardrymod.enablewizardry) { WizardryChecks(player, config.wizardrymod.statorskill, false); } // Tamer if (Pets != null || PersonalAnimal != null) { PetChecks(player); } } private void OnPlayerDisconnected(BasePlayer player) { DestroyUi(player, XPerienceLivePrimary); DestroyUi(player, XPerienceLiveFuel); DestroyUi(player, XPeriencePlayerControlPrimary); DestroyUi(player, XPerienceTopMain); DestroyUi(player, XPerienceAdminPanelMain); DestroyUi(player, XPeriencePlayerControlFullMain); DestroyUi(player, XPeriencePlayerInfoBox); DestroyUi(player, XPerienceLiveSpeed); DestroyUi(player, XPerienceLiveDashPanel); DestroyUi(player, XPeriencePlayerControlPrompt); if (config.sql.enablesql) { CheckPlayerDataSQL(player); } _xperienceCache[player.UserIDString].Status = false; } private void OnPlayerRespawn(BasePlayer player) { if (player == null) return; LiveStats(player, true); } private void OnPlayerRespawned(BasePlayer player) { if (player == null || !player.userID.IsSteamId()) return; PlayerArmor(player); MightAttributes(player); LiveStats(player, true); } private void OnPlayerKicked(BasePlayer player) { _xperienceCache[player.UserIDString].Status = false; } private void CheckConfigValues() { Puts("Checking Config for invalid settings.."); bool configchanged = false; int maxranks = config.xpLevelRanks.ranks.Count - 1; if (config.xpLevelRanks.maxresetrank > maxranks) { config.xpLevelRanks.maxresetrank = maxranks; configchanged = true; } Puts("Config Check Complete"); if (configchanged) { Puts("Some settings in your config were invalid and put back to default. Please check your settings and make sure they are within valid range!"); SaveConfig(); Interface.Oxide.ReloadPlugin("XPerience"); } } #endregion #region ImageLibrary private void LibraryCheck() { // Image Library Missing if (ImageLibrary == null) { PrintWarning($"ImageLibrary appears to be missing. XPerience Icons will not appear until you install ImageLibrary!"); return; } // Image Library Not Loaded if (!ImageLibrary.IsLoaded) { _imageLibraryCheck++; timer.In(60, LibraryCheck); PrintWarning("if ImageLibrary is installed, then it appears to be occupied or not loaded, will check again in 1 minute"); return; } // Image Library Not Ready if (!ImageLibrary.Call("IsReady")) { _imageLibraryCheck++; timer.In(60, LibraryCheck); PrintWarning("ImageLibrary appears to be occupied, will check again in 1 minute. Some icons may not appear until loaded."); return; } LoadImages(); } private void LoadImages() { _isRestart = false; _xperienceImageList = new Dictionary(); _xperienceImageList.Add(XPerienceicon, config.imageicons.mainicon); _xperienceImageList.Add(XPeriencementality, config.imageicons.mentality); _xperienceImageList.Add(XPeriencedexterity, config.imageicons.dexterity); _xperienceImageList.Add(XPeriencemight, config.imageicons.might); _xperienceImageList.Add(XPeriencecaptaincy, config.imageicons.captaincy); _xperienceImageList.Add(XPerienceweaponry, config.imageicons.weaponry); _xperienceImageList.Add(XPeriencewoodcutter, config.imageicons.woodcutter); _xperienceImageList.Add(XPeriencesmithy, config.imageicons.smithy); _xperienceImageList.Add(XPerienceminer, config.imageicons.miner); _xperienceImageList.Add(XPerienceforager, config.imageicons.forager); _xperienceImageList.Add(XPeriencehunter, config.imageicons.hunter); _xperienceImageList.Add(XPeriencefisher, config.imageicons.fisher); _xperienceImageList.Add(XPeriencecrafter, config.imageicons.crafter); _xperienceImageList.Add(XPerienceframer, config.imageicons.framer); _xperienceImageList.Add(XPeriencemedic, config.imageicons.medic); _xperienceImageList.Add(XPeriencescavenger, config.imageicons.scavenger); _xperienceImageList.Add(XPerienceelectrician, config.imageicons.electrician); _xperienceImageList.Add(XPeriencetamer, config.imageicons.tamer); _xperienceImageList.Add(XPeriencechicken, config.imageicons.chicken); _xperienceImageList.Add(XPerienceboar, config.imageicons.boar); _xperienceImageList.Add(XPeriencestag, config.imageicons.stag); _xperienceImageList.Add(XPeriencewolf, config.imageicons.wolf); _xperienceImageList.Add(XPeriencebear, config.imageicons.bear); _xperienceImageList.Add(XPeriencepolarbear, config.imageicons.polarbear); _xperienceImageList.Add(XPeriencearchery, config.imageicons.archery); _xperienceImageList.Add(XPeriencewizardry, config.imageicons.wizardry); _xperienceImageList.Add(XPerienceonline, config.imageicons.online); _xperienceImageList.Add(XPerienceoffline, config.imageicons.offline); _xperienceImageList.Add(XPeriencebackpack, config.imageicons.backpack); _xperienceImageList.Add(XPeriencelevel, config.imageicons.level); _xperienceImageList.Add(XPeriencelevel0, config.imageicons.level0); _xperienceImageList.Add(XPeriencelevel2, config.imageicons.level2); _xperienceImageList.Add(XPeriencelevel4, config.imageicons.level4); _xperienceImageList.Add(XPeriencelevel6, config.imageicons.level6); _xperienceImageList.Add(XPeriencelevel8, config.imageicons.level8); _xperienceImageList.Add(XPeriencelevel10, config.imageicons.level10); _xperienceImageList.Add(XPeriencefuelguage, config.imageicons.fuelguage); _xperienceImageList.Add(XPeriencespeedometer, config.imageicons.speedometer); _xperienceImageList.Add(XPeriencedash, config.imageicons.dash); _xperienceImageList.Add(XPeriencexp, config.imageicons.xp); _xperienceImageList.Add(XPeriencearmor, config.imageicons.armor); _xperienceImageList.Add(XPeriencelogo, "https://i.imgur.com/d16zkJk.png"); foreach (var rank in config.xpLevelRanks.ranks) { if (!rank.Value.image.IsNullOrEmpty() && !_xperienceImageList.ContainsKey(rank.Value.image)) { _xperienceImageList.Add(rank.Value.name, rank.Value.image); } } ImageLibrary?.Call("ImportImageList", Name, _xperienceImageList, 0UL, true, new Action(Ready)); } private void Ready() { _isXPReady = true; _xperienceImageList.Clear(); } private void ChangeImageURLs() { bool changesmade = false; if (config.imageicons.speedometer == "https://i.imgur.com/fO1YfUz.png") { config.imageicons.speedometer = "https://i.imgur.com/Q1Kqsfz.png"; changesmade = true; } if (changesmade) { SaveConfig(); } } #endregion #region PlayerData private XPRecord GetXPRecord(BasePlayer player) { if (player == null || !player.userID.IsSteamId()) return null; XPRecord xprecord; if (_xperienceCache.TryGetValue(player.UserIDString, out xprecord)) { return xprecord; } if (!_xperienceCache.TryGetValue(player.UserIDString, out xprecord)) { _xperienceCache[player.UserIDString] = xprecord = new XPRecord { rank = 0, truelevel = 0, trueexperience = 0, level = 0, experience = 0, requiredxp = config.xpLevel.levelstart, statpoint = 0, skillpoint = 0, Mentality = 0, MentalityP = 0, Dexterity = 0, DexterityP = 0, Might = 0, MightP = 0, Captaincy = 0, CaptaincyP = 0, Weaponry = 0, WeaponryP = 0, WoodCutter = 0, WoodCutterP = 0, Smithy = 0, SmithyP = 0, Miner = 0, MinerP = 0, Forager = 0, ForagerP = 0, Hunter = 0, HunterP = 0, Fisher = 0, FisherP = 0, Crafter = 0, CrafterP = 0, Framer = 0, FramerP = 0, Electrician = 0, ElectricianP = 0, Medic = 0, MedicP = 0, Tamer = 0, TamerP = 0, Wood = 0, Stone = 0, Metal = 0, Sulfur = 0, Cactus = 0, Berries = 0, Pumpkin = 0, Potato = 0, Corn = 0, Mushroom = 0, Hemp = 0, Seed = 0, Status = true, DisableRank = false, UILocation = config.defaultOptions.liveuistatslocation, teatype = "none", teacooldown = 0, resettimerstats = DateTime.Now, resettimerskills = DateTime.Now, playerfixdata = DateTime.Now, dash = 1, fuelgauge = true, speedometer = true, speedometertype = config.defaultOptions.speedometertype, enableconfirmationprompt = config.defaultOptions.enableconfirmationprompt, showchatnotifications = config.defaultOptions.showchatnotifications, showchatprofileonconnect = config.defaultOptions.showchatprofileonconnect, showwelcomepanel = true, exclude = false, }; xprecord.id = player.UserIDString; xprecord.displayname = player.displayName; } return xprecord; } private DailyRecord GetDailyRecord(BasePlayer player) { if (player == null || !player.userID.IsSteamId()) return null; DailyRecord dailyrecord; if (_dailyxperienceCache.TryGetValue(player.UserIDString, out dailyrecord)) { return dailyrecord; } if (!_dailyxperienceCache.TryGetValue(player.UserIDString, out dailyrecord)) { _dailyxperienceCache[player.UserIDString] = dailyrecord = new DailyRecord { dailyexperience = 0, dailystatresets = 0, dailyskillresets = 0, lastexperiencereset = DateTime.Now, laststatreset = DateTime.Now, lastskillreset = DateTime.Now }; } return dailyrecord; } private XPRecord GetPlayerRecord(string player) { if (player == null) return null; XPRecord xprecord; if (_xperienceCache.TryGetValue(player, out xprecord)) { return xprecord; } return xprecord; } private DailyRecord GetPlayerDailyRecord(string player) { if (player == null) return null; DailyRecord dailyrecord; if (_dailyxperienceCache.TryGetValue(player, out dailyrecord)) { return dailyrecord; } return dailyrecord; } private Ranks GetXPRank(int rank) { Ranks ranks; if (config.xpLevelRanks.ranks.TryGetValue(rank, out ranks)) { return ranks; } return ranks; } private static BasePlayer FindPlayer(string playerid) { foreach (var activePlayer in BasePlayer.activePlayerList) { if (activePlayer.UserIDString == playerid) return activePlayer; } foreach (var sleepingPlayer in BasePlayer.sleepingPlayerList) { if (sleepingPlayer.UserIDString == playerid) return sleepingPlayer; } return null; } private void CheckOnlineStatus() { foreach (var player in _xperienceCache) { player.Value.Status = false; foreach (var online in BasePlayer.activePlayerList) { if (player.Key == online.UserIDString) { player.Value.Status = true; } } foreach (var offline in BasePlayer.sleepingPlayerList) { if (player.Key == offline.UserIDString) { player.Value.Status = false; } } } } private void UpdateDisplayName(BasePlayer player) { XPRecord xprecord = GetXPRecord(player); if (xprecord.displayname != player.displayName) xprecord.displayname = player.displayName; } private void AddLootData(BasePlayer player, LootContainer lootcontainer) { Loot loot; if (!_lootCache.TryGetValue(lootcontainer.net.ID, out loot)) { _lootCache.Add(lootcontainer.net.ID, loot = new Loot { lootcontainer = lootcontainer.net.ID, id = new List(), }); } if (!loot.id.Contains(player.UserIDString)) { loot.id.Add(player.UserIDString); } } private void AddHorseData(BasePlayer player, RidableHorse horse) { Horse defaulthorse; if (!_horseCache.TryGetValue(horse.net.ID, out defaulthorse)) { _horseCache.Add(horse.net.ID, new Horse { horse = horse.net.ID, maxSpeed = horse.maxSpeed, runSpeed = horse.runSpeed, trotSpeed = horse.trotSpeed, walkSpeed = horse.walkSpeed, player = player.userID }); } } private void AddBoatData(BasePlayer player, BaseBoat boat) { Boat defaultboat; if (!_boatCache.TryGetValue(boat.net.ID, out defaultboat)) { _boatCache.Add(boat.net.ID, new Boat { boat = boat.net.ID, defaultSpeed = boat.engineThrust, player = player.userID }); } } private void AddVehicleData(BasePlayer player, ModularCar car) { Vehicle vehicle; if (!_vehicleCache.TryGetValue(car.net.ID, out vehicle)) { _vehicleCache.Add(car.net.ID, new Vehicle { vehicle = car.net.ID, maxDriveSlip = car.carSettings.maxDriveSlip, reversePercentSpeed = car.carSettings.reversePercentSpeed, driveForceToMaxSlip = car.carSettings.driveForceToMaxSlip, player = player.userID }); } } private void AddMiniCopterData(BasePlayer player, MiniCopter mini) { Minicopter minicopter; if (!_minicopterCache.TryGetValue(mini.net.ID, out minicopter)) { _minicopterCache.Add(mini.net.ID, new Minicopter { minicopter = mini.net.ID, maxRotorSpeed = mini.maxRotorSpeed, player = player.userID }); } } private void AddSnowMobData(BasePlayer player, Snowmobile snowmob) { Snowmob getsnowmob; if (!_snowmobCache.TryGetValue(snowmob.net.ID, out getsnowmob)) { _snowmobCache.Add(snowmob.net.ID, new Snowmob { snowmob = snowmob.net.ID, terrain = snowmob.badTerrainDrag, engineKW = snowmob.engineKW, player = player.userID }); } } private void AddWeaponData(BasePlayer player, BaseProjectile projectile, int defaultammo, int maxammo) { Weapon weapon; if (!_weaponCache.TryGetValue(projectile.net.ID, out weapon)) { _weaponCache.Add(projectile.net.ID, new Weapon { weapon = projectile.net.ID, defaultammo = defaultammo, maxammo = maxammo, player = player.userID }); } } private void AddCorpseData(BasePlayer player, LootableCorpse corpse) { Corpse corpseid; if (!_corpseCache.TryGetValue(corpse.net.ID, out corpseid)) { _corpseCache.Add(corpse.net.ID, corpseid = new Corpse { corpsecontainer = corpse.net.ID, id = new List(), }); } if (!corpseid.id.Contains(player.UserIDString)) { corpseid.id.Add(player.UserIDString); } } private void AddSmithyData(string resource, float time) { SmithyD getsmithyd; if (!_smithyCache.TryGetValue(resource, out getsmithyd)) { _smithyCache.Add(resource, new SmithyD { resource = resource, time = time }); } } private void AddElectricianData(NetworkableId id, string type, int defaultmaxoutput, int newmaxoutput, ulong owner) { ElectricianD getid; if (!_electricianCache.TryGetValue(id, out getid)) { _electricianCache.Add(id, new ElectricianD { id = id, type = type, defaultmaxoutput = defaultmaxoutput, newmaxoutput = newmaxoutput, owner = owner }); } } private double GetPlayerCooldown(ulong userID, string type) { double playerCooldown; double currentTime = CurrentTime; double gettime = 0; switch (type) { case "build": if (_buildCooldowns.TryGetValue(userID, out playerCooldown)) gettime = currentTime > playerCooldown ? 0 : playerCooldown - CurrentTime; break; case "craft": if (_craftCooldowns.TryGetValue(userID, out playerCooldown)) gettime = currentTime > playerCooldown ? 0 : playerCooldown - CurrentTime; break; case "notify": if (_notifyCooldowns.TryGetValue(userID, out playerCooldown)) gettime = currentTime > playerCooldown ? 0 : playerCooldown - CurrentTime; break; } return gettime; } private double GetTeaCooldown(BasePlayer player) { XPRecord xprecord = GetXPRecord(player); if (xprecord.teacooldown == 0) return 0; double currentTime = CurrentTime; return currentTime > xprecord.teacooldown ? 0 : xprecord.teacooldown - CurrentTime; } private string GetTeaTypes(BasePlayer player) { XPRecord xprecord = GetXPRecord(player); if (xprecord.teatype == "none") return "none"; return xprecord.teatype; } private object OnPlayerChat(BasePlayer player, string message, Chat.ChatChannel channel) { if (!config.xpLevelRanks.showrankinchat || BetterChatActv() || ColouredChatAct()) return null; if (player == null || message == null) return null; XPRecord xprecord = GetXPRecord(player); Ranks rank = GetXPRank(xprecord.rank); string color = ColorConverter(config.uitextColor.rankname).ToString(); OverrideChatMessage(player, color, rank.sig, player.displayName, message, channel); return true; } private object OverrideChatMessage(BasePlayer player, string color, string ranksig, string displayname, string message, Chat.ChatChannel channel) { RCon.Broadcast(RCon.LogType.Chat, new Chat.ChatEntry { Channel = channel, Message = new Regex("<[^>]*>").Replace(string.Join(" ", message), ""), UserId = player.UserIDString, Username = player.displayName, Color = color, Time = Epoch.Current }); switch ((int)channel) { // Global case 0: var newglobalchat = ArrayPool.Get(3); newglobalchat[0] = (int)channel; newglobalchat[1] = player.UserIDString; foreach (BasePlayer p in BasePlayer.activePlayerList.Where(p => p.IsValid() == true)) { newglobalchat[2] = $"{ranksig}{displayname}: {message}"; p.SendConsoleCommand("chat.add", newglobalchat); } ArrayPool.Free(newglobalchat); break; // Teams case 1: var newteamchat = ArrayPool.Get(3); newteamchat[0] = (int)channel; newteamchat[1] = player.UserIDString; foreach (BasePlayer p in BasePlayer.activePlayerList.Where(p => p.Team != null && player.Team != null && p.Team.teamID == player.Team.teamID && p.IsValid() == true)) { newteamchat[2] = $"{ranksig}{displayname}: {message}"; p.SendConsoleCommand("chat.add", newteamchat); } ArrayPool.Free(newteamchat); break; default: break; } return true; } // Check for BetterChat/ColouredChat plugins private bool BetterChatActv() => (BetterChat != null && BetterChat.IsLoaded); private bool ColouredChatAct() => (ColouredChat != null && ColouredChat.IsLoaded); private object OnBetterChat(Dictionary chat) { if (config.xpLevelRanks.showrankinchat && BetterChatActv()) { var player = (chat["Player"] as IPlayer).Object as BasePlayer; if (player == null) return null; XPRecord xprecord = GetXPRecord(player); Ranks rank = GetXPRank(xprecord.rank); string color = ColorConverter(config.uitextColor.rankname).ToString(); chat["Username"] = $"{rank.sig}{player.displayName}"; return chat; } return null; } // Prevent ranks in chat if ColouredChat installed /* private void OnColouredChat() { if (ColouredChatAct() && config.xpLevelRanks.showrankinchat) { Puts("ColouredChat plugin detected, Rank titles for XPerience will not show with this pluign installed. Remove ColouredChat or disable Ranks in chat option in XPerience."); } } */ #endregion #region Level/XP/Stat/Skill Control private void DailyLimit(bool reset = false) { if (reset) { _dailyxperienceCache.Clear(); SaveData(); foreach (var player in BasePlayer.activePlayerList) { DailyLimitPlayer(player); player.ChatMessage(XPLang("dailylimitreset", player.UserIDString, config.dailytimer.dailyresettimerhours)); } } } private void DailyLimitPlayer(BasePlayer player, bool reset = false) { DailyRecord dailyrecord = GetDailyRecord(player); // Reset Timers if (reset) { dailyrecord.dailyexperience = 0; dailyrecord.dailystatresets = 0; dailyrecord.dailyskillresets = 0; dailyrecord.lastexperiencereset = DateTime.Now; dailyrecord.laststatreset = DateTime.Now; dailyrecord.lastskillreset = DateTime.Now; player.ChatMessage(XPLang("dailylimitreset", player.UserIDString, config.dailytimer.dailyresettimerhours)); return; } // Check XP Timers var getlastxpreset = dailyrecord.lastexperiencereset - DateTime.Now; double lastxpresethours = double.Parse(getlastxpreset.Hours.ToString()); double lastxpresetmins = double.Parse(getlastxpreset.Minutes.ToString()); if ((lastxpresethours < 0 && lastxpresetmins < 0) || (lastxpresethours == 0 && lastxpresetmins < 0)) { dailyrecord.dailyexperience = 0; dailyrecord.lastexperiencereset = DateTime.Now.AddHours(config.dailytimer.dailyresettimerhours); } // Check Stat timer var getlaststatreset = dailyrecord.laststatreset - DateTime.Now; double laststatresethours = double.Parse(getlaststatreset.Hours.ToString()); double laststatresetmins = double.Parse(getlaststatreset.Minutes.ToString()); if ((laststatresethours < 0 && laststatresetmins < 0) || (laststatresethours == 0 && laststatresetmins < 0)) { dailyrecord.dailystatresets = 0; dailyrecord.laststatreset = DateTime.Now.AddHours(config.dailytimer.dailyresettimerhours); } // Check Skill Timer var getlastskillreset = dailyrecord.lastskillreset - DateTime.Now; double lastskillresethours = double.Parse(getlastskillreset.Hours.ToString()); double lastskillresetmins = double.Parse(getlastskillreset.Minutes.ToString()); if ((lastskillresethours < 0 && lastskillresetmins < 0) || (lastskillresethours == 0 && lastskillresetmins < 0)) { dailyrecord.dailyskillresets = 0; dailyrecord.lastskillreset = DateTime.Now.AddHours(config.dailytimer.dailyresettimerhours); } } public void GainExp(BasePlayer player, double e) { if (player == null || !player.userID.IsSteamId()) return; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.noxpgain.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return; } } XPRecord xprecord = GetXPRecord(player); double xplimit = 0; switch (config.dailyxpLimit.limitmultipliertype) { case 1: xplimit += config.dailyxpLimit.dailyxplimit + ((config.dailyxpLimit.dailyxplimit * config.dailyxpLimit.limitpercentage) * xprecord.level); break; case 2: xplimit += config.dailyxpLimit.dailyxplimit + ((config.dailyxpLimit.dailyxplimit * config.dailyxpLimit.limitmultiplier) * xprecord.level); break; } bool UserHasSpecialGroup = false; // Check Special Groups var highestpriority = config.specialGroups.specialgroups.Values.Max(i => i.grouppriority); var getgrouplist = config.specialGroups.specialgroups.Values.OrderByDescending(i => i.grouppriority); restart: foreach (var specialgroup in getgrouplist) { UserHasSpecialGroup = permission.UserHasGroup(player.UserIDString, specialgroup.permissionname); if (UserHasSpecialGroup && specialgroup.grouppriority == highestpriority) { double groupboost = e * specialgroup.xpboost; e += groupboost; if (specialgroup.dailyxplimit != 0) { switch (config.dailyxpLimit.limitmultipliertype) { case 1: xplimit = specialgroup.dailyxplimit + ((specialgroup.dailyxplimit * config.dailyxpLimit.limitpercentage) * xprecord.level); break; case 2: xplimit = specialgroup.dailyxplimit + ((specialgroup.dailyxplimit * config.dailyxpLimit.limitmultiplier) * xprecord.level); break; } } break; } else if (UserHasSpecialGroup && specialgroup.grouppriority != highestpriority) { highestpriority--; goto restart; } } // Check Daily XP Limits DailyLimitPlayer(player); DailyRecord dailyrecord = GetDailyRecord(player); if (config.dailyxpLimit.enabledailyxplimit) { // Check Limit and Record if (dailyrecord.dailyexperience >= xplimit && xplimit != 0) { return; } } // Check True Level if (xprecord.truelevel <= 0 || xprecord.truelevel < xprecord.level) { xprecord.truelevel = (int)xprecord.level; } // Make sure XP and True XP are not 0 and are correct if (xprecord.experience <= 0) { xprecord.experience = 0; } if (xprecord.trueexperience <= 0 || xprecord.trueexperience < xprecord.experience) { xprecord.trueexperience = (int)xprecord.experience; } // XP Boost (First) if (config.xpGain.enablexpboost && config.xpGain.xpboostorder == 1 && permission.UserHasPermission(player.UserIDString, PermXPBoost) && !UserHasSpecialGroup) { double xpboost = e * config.xpGain.xpboostamount; e += xpboost; } // Night Bonus if (IsNight() && config.nightBonus.Enable) { double timebonus = e * config.nightBonus.Bonus; e += timebonus; } // Level Bonus if (xprecord.level > 0) { e += (config.xpLevel.levelxpboost * xprecord.level) * e; } // Teams if (config.xpTeams.enableteamxpgain && e != 0) { XPTeams(player, e, "addxp"); } // Captaincy if (config.captaincy.enablexpboost && e != 0) { double captaincyboost = Math.Ceiling(e * (double)CaptaincyTeamXPBoost(player)); e += captaincyboost; } // Clans if (Clans != null && config.xpclans.enableclanbonus && e != 0) { XPClans(player, e, "addxp"); } // Ranks if (config.xpLevelRanks.enableresetranks && !xprecord.DisableRank && config.xpLevelRanks.enablerankxpboost && xprecord.rank > 0) { e += (e * config.xpLevelRanks.rankxpboost) * xprecord.rank; } // XP Boost (Last) if (config.xpGain.enablexpboost && config.xpGain.xpboostorder == 2 && permission.UserHasPermission(player.UserIDString, PermXPBoost) && !UserHasSpecialGroup) { double xpboost = e * config.xpGain.xpboostamount; e += xpboost; } // Addon Booster if (XPerienceAddon != null) { double addonbooster = e * XPerienceAddon.Call("GetBoostersAmount", player); e += addonbooster; } // Check for max rank or level and prevent level up but still award XP if allowed if ((xprecord.level >= config.xpLevel.maxlevel && !config.xpLevelRanks.enableresetranks) || (xprecord.level >= config.xpLevel.maxlevel && xprecord.rank >= config.xpLevelRanks.maxresetrank) || (xprecord.DisableRank && xprecord.level >= config.xpLevel.maxlevel)) { xprecord.level = config.xpLevel.maxlevel; if (xprecord.DisableRank && xprecord.rank < config.xpLevelRanks.maxresetrank) { return; } if (!config.xpLevelRanks.enableresetranks) { xprecord.truelevel = (int)xprecord.level; } if (config.xpLevel.alwaysearnxp) { xprecord.experience += Math.Ceiling(e); xprecord.trueexperience += (int)Math.Ceiling(e); xprecord.requiredxp = xprecord.experience; LiveStats(player, true); // UINotify if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.xpgainloss && e != 0) { if (GetPlayerCooldown(player.userID, "notify") == 0) { UINotify.Call("SendNotify", player, config.UiNotifier.xpgainlosstype, XPLang("uinotify_xpgain", player.UserIDString, Math.Round(e))); _notifyCooldowns[player.userID] = CurrentTime + config.defaultOptions.NotifcationCooldown; } } } else { xprecord.experience = xprecord.requiredxp; } return; } // Give the calculated XP and Update Player xprecord.experience += Math.Ceiling(e); xprecord.trueexperience += (int)Math.Ceiling(e); dailyrecord.dailyexperience += (int)Math.Ceiling(e); LiveStats(player, true); // Addon if (XPerienceAddon != null) { XPerienceAddon.Call("PlayerNotes", player, "xp", (int)Math.Ceiling(e), "XP"); } // UINotify if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.xpgainloss && e != 0) { if (GetPlayerCooldown(player.userID, "notify") == 0) { UINotify.Call("SendNotify", player, config.UiNotifier.xpgainlosstype, XPLang("uinotify_xpgain", player.UserIDString, Math.Round(e))); _notifyCooldowns[player.userID] = CurrentTime + config.defaultOptions.NotifcationCooldown; } } // Level Up if (xprecord.experience >= xprecord.requiredxp) { LvlUp(player, 0, 0); } } private void GainExpAdmin(BasePlayer player, double e, int truexp = 0, bool reset = false) { if (player == null || !player.userID.IsSteamId()) return; XPRecord xprecord = GetXPRecord(player); if (reset) { xprecord.trueexperience = truexp; } // Check True Level if (xprecord.truelevel <= 0 || xprecord.truelevel < xprecord.level) { xprecord.truelevel = (int)xprecord.level; } // Check for max rank or level and prevent level up but still award XP if allowed if ((xprecord.level >= config.xpLevel.maxlevel && !config.xpLevelRanks.enableresetranks) || (xprecord.level >= config.xpLevel.maxlevel && xprecord.rank >= config.xpLevelRanks.maxresetrank)) { xprecord.level = config.xpLevel.maxlevel; if (config.xpLevel.alwaysearnxp) { xprecord.experience += Math.Ceiling(e); xprecord.trueexperience += (int)Math.Ceiling(e); xprecord.requiredxp = xprecord.experience; LiveStats(player, true); // UINotify if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.xpgainloss && e != 0) { if (GetPlayerCooldown(player.userID, "notify") == 0) { UINotify.Call("SendNotify", player, config.UiNotifier.xpgainlosstype, XPLang("uinotify_xpgain", player.UserIDString, Math.Round(e))); _notifyCooldowns[player.userID] = CurrentTime + config.defaultOptions.NotifcationCooldown; } } } else { xprecord.experience = xprecord.requiredxp; } return; } // Make sure XP and True XP are not 0 and are correct if (xprecord.experience <= 0) { xprecord.experience = 0; } if (xprecord.trueexperience <= 0 || xprecord.trueexperience < xprecord.experience) { xprecord.trueexperience = (int)xprecord.experience; } // Give XP and Update Player xprecord.experience += e; if (!reset) { xprecord.trueexperience += (int)e; } LiveStats(player, true); if (xprecord.experience >= xprecord.requiredxp) { LvlUp(player, 0, 0); } } private void GivePoints(BasePlayer player, string type, int amount) { if (player == null || !player.userID.IsSteamId()) return; XPRecord xprecord = GetXPRecord(player); if (amount <= 0) return; switch (type) { case "stat": xprecord.statpoint += amount; break; case "skill": xprecord.skillpoint += amount; break; } } private void GivePointsOther(string player, string type, int amount) { if (player == null) return; XPRecord xprecord = GetPlayerRecord(player); if (amount <= 0) return; switch (type) { case "stat": xprecord.statpoint += amount; break; case "skill": xprecord.skillpoint += amount; break; } } private void GainExpAdminFix(string player, double e, int truexp = 0, bool reset = false) { if (player == null) return; XPRecord xprecord = GetPlayerRecord(player); if (reset) { xprecord.trueexperience = truexp; } // Check True Level if (xprecord.truelevel <= 0 || xprecord.truelevel < xprecord.level) { xprecord.truelevel = (int)xprecord.level; } // If max level and ranks disabled return if (xprecord.level >= config.xpLevel.maxlevel && !config.xpLevelRanks.enableresetranks) return; // Make sure XP and True XP are not 0 and are correct if (xprecord.experience <= 0) { xprecord.experience = 0; } if (xprecord.trueexperience <= 0 || xprecord.trueexperience < xprecord.experience) { xprecord.trueexperience = (int)xprecord.experience; } // Give XP and Update Player xprecord.experience += e; if (!reset) { xprecord.trueexperience += (int)e; } if (xprecord.experience >= xprecord.requiredxp) { LvlUpFix(player); } } private void LvlUp(BasePlayer player, int chatstatpoint, int chatskillpoint, bool reset = false) { XPRecord xprecord = GetXPRecord(player); xprecord.level++; xprecord.truelevel++; if ((xprecord.level >= config.xpLevel.maxlevel && !config.xpLevelRanks.enableresetranks) || (xprecord.level >= config.xpLevel.maxlevel && xprecord.rank >= config.xpLevelRanks.maxresetrank)) { xprecord.level = config.xpLevel.maxlevel; if (!config.xpLevelRanks.enableresetranks) { xprecord.statpoint += config.xpLevel.statpointsperlvl; xprecord.skillpoint += config.xpLevel.skillpointsperlvl; chatstatpoint += config.xpLevel.statpointsperlvl; chatskillpoint += config.xpLevel.skillpointsperlvl; } else { xprecord.statpoint += config.xpLevel.statpointsperlvl + (config.xpLevelRanks.rankstatpointincrease * xprecord.rank); xprecord.skillpoint += config.xpLevel.skillpointsperlvl + (config.xpLevelRanks.rankskillpointincrease * xprecord.rank); chatstatpoint += config.xpLevel.statpointsperlvl + (config.xpLevelRanks.rankstatpointincrease * xprecord.rank); chatskillpoint += config.xpLevel.skillpointsperlvl + (config.xpLevelRanks.rankskillpointincrease * xprecord.rank); } if (!config.xpLevelRanks.enableresetranks || xprecord.DisableRank) { xprecord.truelevel = (int)xprecord.level; } xprecord.experience = xprecord.requiredxp; // UINotify if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.levelupdown) { UINotify.Call("SendNotify", player, config.UiNotifier.levelupdowntype, XPLang("levelup", player.UserIDString, xprecord.level, chatstatpoint, chatskillpoint)); } // Normal Chat Notify if (!config.UiNotifier.disablechats) { player.ChatMessage(XPLang("levelup", player.UserIDString, xprecord.level, chatstatpoint, chatskillpoint)); } // Econ if (Economics != null && config.xpEcon.econlevelup && !reset) { Economics.Call("Deposit", player.UserIDString, config.xpEcon.econlevelreward); player.ChatMessage(XPLang("econdeposit", player.UserIDString, config.xpEcon.econlevelreward)); } // Server Rewards if (ServerRewards != null && config.sRewards.srewardlevelup && !reset) { ServerRewards?.Call("AddPoints", player.userID, config.sRewards.srewardlevelupamt); player.ChatMessage(XPLang("srewardsup", player.UserIDString, config.sRewards.srewardlevelupamt)); } LiveStats(player, true); return; } if (config.xpLevelRanks.enableresetranks && !xprecord.DisableRank) { if (xprecord.rank <= 0) { xprecord.statpoint += config.xpLevel.statpointsperlvl; xprecord.skillpoint += config.xpLevel.skillpointsperlvl; chatstatpoint += config.xpLevel.statpointsperlvl; chatskillpoint += config.xpLevel.skillpointsperlvl; } else { xprecord.statpoint += config.xpLevel.statpointsperlvl + (config.xpLevelRanks.rankstatpointincrease * xprecord.rank); xprecord.skillpoint += config.xpLevel.skillpointsperlvl + (config.xpLevelRanks.rankskillpointincrease * xprecord.rank); chatstatpoint += config.xpLevel.statpointsperlvl + (config.xpLevelRanks.rankstatpointincrease * xprecord.rank); chatskillpoint += config.xpLevel.skillpointsperlvl + (config.xpLevelRanks.rankskillpointincrease * xprecord.rank); } if (xprecord.level >= config.xpLevel.maxlevel && config.xpLevelRanks.enableresetranks) { double remainingxp = xprecord.experience - xprecord.requiredxp; RankUp(player, remainingxp); return; } } else { xprecord.statpoint += config.xpLevel.statpointsperlvl; xprecord.skillpoint += config.xpLevel.skillpointsperlvl; chatstatpoint += config.xpLevel.statpointsperlvl; chatskillpoint += config.xpLevel.skillpointsperlvl; } if (xprecord.level >= config.xpLevel.maxlevel) { if (xprecord.level >= config.xpLevel.maxlevel && xprecord.DisableRank) { xprecord.requiredxp = xprecord.experience; } else { xprecord.requiredxp = config.xpLevel.levelstart; } } else { if (config.xpLevelRanks.increaselevelmultiplier) { double rankreqincrease = config.xpLevel.levelmultiplier + (config.xpLevelRanks.levelmultiplierincrease * xprecord.rank); xprecord.requiredxp = Math.Round(xprecord.requiredxp + (xprecord.level * rankreqincrease)); } else { xprecord.requiredxp = Math.Round(xprecord.requiredxp + (xprecord.level * config.xpLevel.levelmultiplier)); } } MightAttributes(player); if (xprecord.experience > xprecord.requiredxp) { LvlUp(player, chatstatpoint, chatskillpoint); return; } // UINotify if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.levelupdown) { UINotify.Call("SendNotify", player, config.UiNotifier.levelupdowntype, XPLang("levelup", player.UserIDString, xprecord.level, chatstatpoint, chatskillpoint)); } // Normal Chat Notify if (!config.UiNotifier.disablechats) { player.ChatMessage(XPLang("levelup", player.UserIDString, xprecord.level, chatstatpoint, chatskillpoint)); } // Econ if (Economics != null && config.xpEcon.econlevelup && !reset) { Economics.Call("Deposit", player.UserIDString, config.xpEcon.econlevelreward); player.ChatMessage(XPLang("econdeposit", player.UserIDString, config.xpEcon.econlevelreward)); } // Server Rewards if (ServerRewards != null && config.sRewards.srewardlevelup && !reset) { ServerRewards?.Call("AddPoints", player.userID, config.sRewards.srewardlevelupamt); player.ChatMessage(XPLang("srewardsup", player.UserIDString, config.sRewards.srewardlevelupamt)); } LiveStats(player, true); // Addon if (XPerienceAddon != null) { XPerienceAddon.Call("PlayerNotes", player, "level", (int)xprecord.level, "Level Reached"); XPerienceAddon?.Call("AddonDiscordLevel", player, xprecord.level); XPerienceAddon?.Call("NotifyUIBar", player, "level", "level", (int)xprecord.level); XPerienceAddon?.Call("NotifyUIBarGlobal", player, "level", "level", (int)xprecord.level); } if (config.soundEffects.levelup) { player.RunEffect($"{config.soundEffects.levelupeffect}"); } } private void LvlUpFix(string player) { XPRecord xprecord = GetPlayerRecord(player); xprecord.level++; xprecord.truelevel++; if (xprecord.level >= config.xpLevel.maxlevel && !config.xpLevelRanks.enableresetranks) return; if (config.xpLevelRanks.enableresetranks && !xprecord.DisableRank) { if (xprecord.rank <= 0) { xprecord.statpoint += config.xpLevel.statpointsperlvl; xprecord.skillpoint += config.xpLevel.skillpointsperlvl; } else { xprecord.statpoint += config.xpLevel.statpointsperlvl + (config.xpLevelRanks.rankstatpointincrease * xprecord.rank); xprecord.skillpoint += config.xpLevel.skillpointsperlvl + (config.xpLevelRanks.rankskillpointincrease * xprecord.rank); } if (xprecord.level >= config.xpLevel.maxlevel && config.xpLevelRanks.enableresetranks) { double remainingxp = xprecord.experience - xprecord.requiredxp; RankUpFix(player, remainingxp); return; } } else { xprecord.statpoint += config.xpLevel.statpointsperlvl; xprecord.skillpoint += config.xpLevel.skillpointsperlvl; } if (xprecord.level >= config.xpLevel.maxlevel) { xprecord.requiredxp = config.xpLevel.levelstart; } else { xprecord.requiredxp = Math.Round(xprecord.requiredxp + (xprecord.level * config.xpLevel.levelmultiplier)); } if (xprecord.experience > xprecord.requiredxp) { LvlUpFix(player); return; } } private void RankUp(BasePlayer player, double remainingxp) { XPRecord xprecord = GetXPRecord(player); if (xprecord.rank >= config.xpLevelRanks.maxresetrank) return; xprecord.rank++; Ranks rank = GetXPRank(xprecord.rank); // Reset Level, Required XP xprecord.level = 0; if (remainingxp == 0) { remainingxp = 0; } if (config.xpLevelRanks.keepremainingxp) { xprecord.experience = remainingxp; } else { xprecord.experience = 0; } xprecord.requiredxp = config.xpLevel.levelstart; if (!config.xpLevelRanks.resetallstatsskills) { xprecord.statpoint += config.xpLevelRanks.rankstatpointstart * xprecord.rank; xprecord.skillpoint += config.xpLevelRanks.rankskillpointstart * xprecord.rank; } else { xprecord.statpoint = config.xpLevelRanks.rankstatpointstart * xprecord.rank; xprecord.skillpoint = config.xpLevelRanks.rankskillpointstart * xprecord.rank; } if (config.xpLevelRanks.resetallstatsskills) { // Reset health if needed before removing points if (xprecord.Might >= 1) { // Max Health double armor = (xprecord.Might * config.might.armor) * 100; double newmaxhealth = player._maxHealth - armor; // Change Max Health if (newmaxhealth < 100) { player._maxHealth = 100; } else { player._maxHealth = (float)newmaxhealth; } // Player Current Health double defaulthealth = 100; double teahealth = 100; bool teamodified = false; double healthdifference = 0; if (GetTeaCooldown(player) != 0) { // Check for Tea Modifier if (TeaModifiers != null && xprecord.teatype != "none") { teahealth = defaulthealth + TeaModifiers.Call("GetTeaValue", player, xprecord.teatype, Modifier.ModifierType.Max_Health) * 100; teamodified = true; } switch (GetTeaTypes(player)) { case "maxhealthtea": if (!teamodified) { teahealth = defaulthealth + 5; } break; case "maxhealthtea.advanced": if (!teamodified) { teahealth = defaulthealth + 12.5; } break; case "maxhealthtea.pure": if (!teamodified) { teahealth = defaulthealth + 20; } break; } } if (player._health > teahealth) { healthdifference = player._health - teahealth; } player._health -= (float)healthdifference; } // Reset Stat Levels xprecord.Mentality = 0; xprecord.Dexterity = 0; xprecord.Might = 0; xprecord.Captaincy = 0; xprecord.Weaponry = 0; // Reset Stat Spent Points xprecord.MentalityP = 0; xprecord.DexterityP = 0; xprecord.MightP = 0; xprecord.CaptaincyP = 0; xprecord.WeaponryP = 0; // Reset Skill Levels xprecord.WoodCutter = 0; xprecord.Smithy = 0; xprecord.Miner = 0; xprecord.Forager = 0; xprecord.Hunter = 0; xprecord.Fisher = 0; xprecord.Crafter = 0; xprecord.Framer = 0; xprecord.Medic = 0; xprecord.Scavenger = 0; xprecord.Electrician = 0; xprecord.Tamer = 0; // Reset Skill Spents Points xprecord.WoodCutterP = 0; xprecord.SmithyP = 0; xprecord.MinerP = 0; xprecord.ForagerP = 0; xprecord.HunterP = 0; xprecord.FisherP = 0; xprecord.CrafterP = 0; xprecord.FramerP = 0; xprecord.MedicP = 0; xprecord.ScavengerP = 0; xprecord.ElectricianP = 0; xprecord.TamerP = 0; // Reset calories/hydration if needed if (player.metabolism.calories.max > 500) { player.metabolism.calories.max = 500; } if (player.metabolism.hydration.max > 250) { player.metabolism.hydration.max = 250; } } // Check/Reset RankGroup permission RankCheck(player); // Backpack Check if (Backpacks != null && config.backpacksmod.enablebackpacks) { BackPackChecks(player, config.backpacksmod.statorskill, true); } // Archery Check if (Archery != null && config.archerymod.enablearchery) { ArcheryChecks(player, config.archerymod.statorskill, true); } // Wizardry Check if (Wizardry != null && config.wizardrymod.enablewizardry) { WizardryChecks(player, config.wizardrymod.statorskill, true); } // Check/Reset Tamer permissions PetChecks(player, true); // Update Live UI LiveStats(player, true); if (XPerienceAddon != null) { XPerienceAddon.Call("PlayerNotes", player, "rank", xprecord.rank, rank.name); } // Notify Players player.ChatMessage(XPLang("playerrankup", player.UserIDString, rank.name, xprecord.statpoint, xprecord.skillpoint)); // AddonDiscord if (XPerienceAddon != null) { XPerienceAddon?.Call("AddonDiscordRank", player, rank.name); XPerienceAddon?.Call("NotifyUIBar", player, "rank", rank.name, xprecord.rank); XPerienceAddon?.Call("NotifyUIBarGlobal", player, "rank", rank.name, xprecord.rank); } // Check remaining XP for level Up if (xprecord.experience > xprecord.requiredxp) { LvlUp(player, 0, 0); return; } if (config.soundEffects.rankup) { player.RunEffect($"{config.soundEffects.rankupeffect}"); } } private void RankUpFix(string player, double remainingxp) { XPRecord xprecord = GetPlayerRecord(player); if (xprecord.rank >= config.xpLevelRanks.maxresetrank) return; xprecord.rank++; // Reset Level, Required XP xprecord.level = 0; if (config.xpLevelRanks.keepremainingxp) { xprecord.experience = remainingxp; } else { xprecord.experience = 0; } xprecord.requiredxp = config.xpLevel.levelstart; if (!config.xpLevelRanks.resetallstatsskills) { xprecord.statpoint += config.xpLevelRanks.rankstatpointstart * xprecord.rank; xprecord.skillpoint += config.xpLevelRanks.rankskillpointstart * xprecord.rank; } else { xprecord.statpoint = config.xpLevelRanks.rankstatpointstart * xprecord.rank; xprecord.skillpoint = config.xpLevelRanks.rankskillpointstart * xprecord.rank; } if (config.xpLevelRanks.resetallstatsskills) { // Reset Stat Levels xprecord.Mentality = 0; xprecord.Dexterity = 0; xprecord.Might = 0; xprecord.Captaincy = 0; xprecord.Weaponry = 0; // Reset Stat Spent Points xprecord.MentalityP = 0; xprecord.DexterityP = 0; xprecord.MightP = 0; xprecord.CaptaincyP = 0; xprecord.WeaponryP = 0; // Reset Skill Levels xprecord.WoodCutter = 0; xprecord.Smithy = 0; xprecord.Miner = 0; xprecord.Forager = 0; xprecord.Hunter = 0; xprecord.Fisher = 0; xprecord.Crafter = 0; xprecord.Framer = 0; xprecord.Medic = 0; xprecord.Scavenger = 0; xprecord.Electrician = 0; xprecord.Tamer = 0; // Reset Skill Spents Points xprecord.WoodCutterP = 0; xprecord.SmithyP = 0; xprecord.MinerP = 0; xprecord.ForagerP = 0; xprecord.HunterP = 0; xprecord.FisherP = 0; xprecord.CrafterP = 0; xprecord.FramerP = 0; xprecord.MedicP = 0; xprecord.ScavengerP = 0; xprecord.ElectricianP = 0; xprecord.TamerP = 0; } // Check for Rank Group and Assign or Revoke foreach (var rankgroup in config.xpLevelRanks.ranks) { if (xprecord.rank >= rankgroup.Key && !permission.UserHasGroup(xprecord.id, rankgroup.Value.group)) { permission.AddUserGroup(xprecord.id, rankgroup.Value.group); } if (xprecord.rank < rankgroup.Key && !permission.UserHasGroup(xprecord.id, rankgroup.Value.group)) { permission.RemoveUserGroup(xprecord.id, rankgroup.Value.group); } } // Take Backpack Permissions if (permission.UserHasPermission(xprecord.id, Backpack1)) { permission.RevokeUserPermission(xprecord.id, Backpack1); } if (permission.UserHasPermission(xprecord.id, Backpack2)) { permission.RevokeUserPermission(xprecord.id, Backpack2); } if (permission.UserHasPermission(xprecord.id, Backpack3)) { permission.RevokeUserPermission(xprecord.id, Backpack3); } if (permission.UserHasPermission(xprecord.id, Backpack4)) { permission.RevokeUserPermission(xprecord.id, Backpack4); } if (permission.UserHasPermission(xprecord.id, Backpack5)) { permission.RevokeUserPermission(xprecord.id, Backpack5); } if (permission.UserHasPermission(xprecord.id, Backpack6)) { permission.RevokeUserPermission(xprecord.id, Backpack6); } if (permission.UserHasPermission(xprecord.id, Backpack7)) { permission.RevokeUserPermission(xprecord.id, Backpack7); } // Take Archery Permissions if (permission.UserHasPermission(xprecord.id, ArcheryNovice)) { permission.RevokeUserPermission(xprecord.id, ArcheryNovice); } if (permission.UserHasPermission(xprecord.id, ArcheryAdept)) { permission.RevokeUserPermission(xprecord.id, ArcheryAdept); } if (permission.UserHasPermission(xprecord.id, ArcheryMaster)) { permission.RevokeUserPermission(xprecord.id, ArcheryMaster); } //Take Wizardry Permissions if (permission.UserHasPermission(xprecord.id, WizardryNovice)) { permission.RevokeUserPermission(xprecord.id, WizardryNovice); } if (permission.UserHasPermission(xprecord.id, WizardryAdept)) { permission.RevokeUserPermission(xprecord.id, WizardryAdept); } if (permission.UserHasPermission(xprecord.id, WizardryMaster)) { permission.RevokeUserPermission(xprecord.id, WizardryMaster); } // Take Pet Permission permission.RevokeUserPermission(xprecord.id, TameChicken); permission.RevokeUserPermission(xprecord.id, TameBoar); permission.RevokeUserPermission(xprecord.id, TameStag); permission.RevokeUserPermission(xprecord.id, TameWolf); permission.RevokeUserPermission(xprecord.id, TameBear); // Check remaining XP for level Up if (xprecord.experience > xprecord.requiredxp) { LvlUpFix(player); return; } } private void RankCheck(BasePlayer player, bool reset = false) { if (player == null || !player.userID.IsSteamId()) return; XPRecord xprecord = GetXPRecord(player); if (!config.xpLevelRanks.enableresetranks || xprecord.DisableRank) return; // Reset Rank Permission if (reset) { foreach (var rankgroup in config.xpLevelRanks.ranks) { if (permission.UserHasGroup(player.UserIDString, rankgroup.Value.group)) { permission.RemoveUserGroup(player.UserIDString, rankgroup.Value.group); } } return; } // Check for Rank Group and Assign or Revoke foreach (var rankgroup in config.xpLevelRanks.ranks) { if (config.xpLevelRanks.keepgrouponrank && xprecord.rank > rankgroup.Key && !permission.UserHasGroup(player.UserIDString, rankgroup.Value.group)) { permission.AddUserGroup(player.UserIDString, rankgroup.Value.group); } if (xprecord.rank == rankgroup.Key && !permission.UserHasGroup(player.UserIDString, rankgroup.Value.group)) { permission.AddUserGroup(player.UserIDString, rankgroup.Value.group); } if (xprecord.rank < rankgroup.Key && permission.UserHasGroup(player.UserIDString, rankgroup.Value.group)) { permission.RemoveUserGroup(player.UserIDString, rankgroup.Value.group); } if (!config.xpLevelRanks.keepgrouponrank && xprecord.rank > rankgroup.Key && permission.UserHasGroup(player.UserIDString, rankgroup.Value.group)) { permission.RemoveUserGroup(player.UserIDString, rankgroup.Value.group); } } } private void LoseExp(BasePlayer player, double e) { if (player == null || !player.userID.IsSteamId()) return; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.noxploss.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return; } } XPRecord xprecord = GetXPRecord(player); if (e < 1) { e = 1; } // Teams if (config.xpTeams.enableteamxploss && e != 0) { XPTeams(player, e, "takexp"); } // Clans if (Clans != null && config.xpclans.enableclanreduction && e != 0) { XPClans(player, e, "takexp"); } double newxp = xprecord.experience - Math.Ceiling(e); double newtxp = xprecord.trueexperience - Math.Ceiling(e); double nextlevel = xprecord.requiredxp; // Make sure XP does not go negative if (newxp <= 0) { newxp = 0; } if (newtxp <= 0) { newtxp = 0; } xprecord.experience = (int)newxp; xprecord.trueexperience = (int)newtxp; if (nextlevel == config.xpLevel.levelstart) return; double prevlevel = xprecord.requiredxp - (xprecord.level * config.xpLevel.levelmultiplier); if (xprecord.experience < prevlevel) { LvlDown(player); } LiveStats(player, true); // UINotify if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.xpgainloss) { UINotify.Call("SendNotify", player, config.UiNotifier.xpgainlosstype, XPLang("uinotify_xploss", player.UserIDString, Math.Round(e))); } } private void LoseExpAdmin(BasePlayer player, double e) { XPRecord xprecord = GetXPRecord(player); if (e < 1) { e = 1; } double newxp = xprecord.experience - Math.Ceiling(e); double newtxp = xprecord.trueexperience - Math.Ceiling(e); double nextlevel = xprecord.requiredxp; // Make sure XP does not go negative if (newxp <= 0) { newxp = 0; } if (newtxp <= 0) { newtxp = 0; } xprecord.experience = (int)newxp; xprecord.trueexperience = (int)newtxp; if (nextlevel == config.xpLevel.levelstart) return; double prevlevel = xprecord.requiredxp - (xprecord.level * config.xpLevel.levelmultiplier); if (xprecord.experience < prevlevel) { LvlDown(player); } LiveStats(player, true); //PlayerFixData(player); } private void LvlDown(BasePlayer player) { XPRecord xprecord = GetXPRecord(player); double newlevel = xprecord.level - 1; int newtruelevel = xprecord.truelevel - 1; if (newlevel == 0) return; xprecord.level = newlevel; xprecord.truelevel = newtruelevel; xprecord.requiredxp = Math.Round(xprecord.requiredxp - (newlevel * config.xpLevel.levelmultiplier)); //chatstatpoint -= config.xpLevel.statpointsperlvl; //chatskillpoint -= config.xpLevel.skillpointsperlvl; bool removestatlvl = false; bool removeskilllvl = false; // UINotify if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.levelupdown) { UINotify.Call("SendNotify", player, config.UiNotifier.levelupdowntype, XPLang("leveldown", player.UserIDString, xprecord.level)); } // Normal Chat Notify if (!config.UiNotifier.disablechats) { player.ChatMessage(XPLang("leveldown", player.UserIDString, xprecord.level)); } // Check if player has enough unspent stat points to take if (xprecord.statpoint >= config.xpLevel.statpointsperlvl) { xprecord.statpoint -= config.xpLevel.statpointsperlvl; player.ChatMessage(XPLang("statdown", player.UserIDString, config.xpLevel.statpointsperlvl)); } else { removestatlvl = true; } // Check if player has enough unspent skill points to take if (xprecord.skillpoint >= config.xpLevel.skillpointsperlvl) { xprecord.skillpoint -= config.xpLevel.skillpointsperlvl; player.ChatMessage(XPLang("skilldown", player.UserIDString, config.xpLevel.skillpointsperlvl)); } else { removeskilllvl = true; } // If player does not have enough unspent stat points then get first available stat to level down and remove points if (removestatlvl == true) { int allstats = xprecord.Mentality + xprecord.Dexterity + xprecord.Might + xprecord.Captaincy + xprecord.Weaponry; if (allstats == 0) { xprecord.statpoint = 0; player.ChatMessage(XPLang("nostatpoints", player.UserIDString)); return; } var stat = ""; int statpoints; int pointadj = 0; bool dropmentality = false; bool dropdexterity = false; bool dropmight = false; bool dropcaptaincy = false; bool dropweaponry = false; // Check each stat for levels if (xprecord.Mentality > 0) { dropmentality = true; } else if (xprecord.Dexterity > 0) { dropdexterity = true; } else if (xprecord.Might > 0) { dropmight = true; } else if (xprecord.Captaincy > 0) { dropcaptaincy = true; } else if (xprecord.Weaponry > 0) { dropweaponry = true; } // Random stat chosen if (dropmentality == true) { stat = "Mentality"; if (xprecord.Mentality == 1) { statpoints = config.mentality.pointcoststart; } else { statpoints = (xprecord.Mentality - 1) * config.mentality.costmultiplier; } pointadj = statpoints - config.xpLevel.statpointsperlvl; xprecord.Mentality--; xprecord.MentalityP -= statpoints; xprecord.statpoint = pointadj; } else if (dropdexterity == true) { stat = "Dexterity"; if (xprecord.Dexterity == 1) { statpoints = config.dexterity.pointcoststart; } else { statpoints = (xprecord.Dexterity - 1) * config.dexterity.costmultiplier; } pointadj = statpoints - config.xpLevel.statpointsperlvl; xprecord.Dexterity--; xprecord.DexterityP -= statpoints; xprecord.statpoint = pointadj; } else if (dropmight == true) { stat = "Might"; if (xprecord.Might == 1) { statpoints = config.might.pointcoststart; } else { statpoints = (xprecord.Might - 1) * config.might.costmultiplier; } pointadj = statpoints - config.xpLevel.statpointsperlvl; xprecord.Might--; xprecord.MightP -= statpoints; xprecord.statpoint = pointadj; MightAttributes(player); } else if (dropcaptaincy == true) { stat = "Captaincy"; if (xprecord.Captaincy == 1) { statpoints = config.captaincy.pointcoststart; } else { statpoints = (xprecord.Captaincy - 1) * config.captaincy.costmultiplier; } pointadj = statpoints - config.xpLevel.statpointsperlvl; xprecord.Captaincy--; xprecord.CaptaincyP -= statpoints; xprecord.statpoint = pointadj; } else if (dropweaponry == true) { stat = "Weaponry"; if (xprecord.Weaponry == 1) { statpoints = config.weaponry.pointcoststart; } else { statpoints = (xprecord.Weaponry - 1) * config.weaponry.costmultiplier; } pointadj = statpoints - config.xpLevel.statpointsperlvl; xprecord.Weaponry--; xprecord.WeaponryP -= statpoints; xprecord.statpoint = pointadj; } // Make sure points do not go negative if (xprecord.statpoint < 0) { xprecord.statpoint = 0; } // Archery Check if (Archery != null && config.archerymod.enablearchery) { ArcheryChecks(player, stat, true); } // Wizardry Check if (Wizardry != null && config.wizardrymod.enablewizardry) { WizardryChecks(player, stat, true); } player.ChatMessage(XPLang("statdownextra", player.UserIDString, stat, config.xpLevel.statpointsperlvl, pointadj)); } // If player does not have enough unspent skill points then get first available skill to level down and remove points if (removeskilllvl == true) { int allskills = xprecord.WoodCutter + xprecord.Smithy + xprecord.Miner + xprecord.Forager + xprecord.Hunter + xprecord.Fisher + xprecord.Crafter + xprecord.Framer + xprecord.Medic + xprecord.Scavenger + xprecord.Tamer; if (allskills == 0) { xprecord.skillpoint = 0; player.ChatMessage(XPLang("noskillpoints", player.UserIDString)); return; } var skill = ""; int skillpoints; int pointadj = 0; bool dropwoodcutter = false; bool dropsmithy = false; bool dropminer = false; bool dropforager = false; bool drophunter = false; bool dropfisher = false; bool dropcrafter = false; bool dropframer = false; bool dropmedic = false; bool dropscavenger = false; bool droptamer = false; // Check each skill for levels if (xprecord.WoodCutter > 0) { dropwoodcutter = true; } else if (xprecord.Smithy > 0) { dropsmithy = true; } else if (xprecord.Miner > 0) { dropminer = true; } else if (xprecord.Forager > 0) { dropforager = true; } else if (xprecord.Hunter > 0) { drophunter = true; } else if (xprecord.Fisher > 0) { dropfisher = true; } else if (xprecord.Crafter > 0) { dropcrafter = true; } else if (xprecord.Framer > 0) { dropframer = true; } else if (xprecord.Medic > 0) { dropmedic = true; } else if (xprecord.Scavenger > 0) { dropscavenger = true; } else if (xprecord.Tamer > 0) { droptamer = true; } // Random Skill Chosen if (dropwoodcutter == true) { skill = "WoodCutter"; if (xprecord.WoodCutter == 1) { skillpoints = config.woodcutter.pointcoststart; } else { skillpoints = xprecord.WoodCutter * config.woodcutter.costmultiplier; } pointadj = skillpoints - config.xpLevel.skillpointsperlvl; xprecord.WoodCutter--; xprecord.WoodCutterP -= skillpoints; xprecord.skillpoint = pointadj; } else if (dropsmithy == true) { skill = "Smithy"; if (xprecord.Smithy == 1) { skillpoints = config.smithy.pointcoststart; } else { skillpoints = xprecord.Smithy * config.smithy.costmultiplier; } pointadj = skillpoints - config.xpLevel.skillpointsperlvl; xprecord.Smithy--; xprecord.SmithyP -= skillpoints; xprecord.skillpoint = pointadj; } else if (dropminer == true) { skill = "Miner"; if (xprecord.Miner == 1) { skillpoints = config.miner.pointcoststart; } else { skillpoints = xprecord.Miner * config.miner.costmultiplier; } pointadj = skillpoints - config.xpLevel.skillpointsperlvl; xprecord.Miner--; xprecord.MinerP -= skillpoints; xprecord.skillpoint = pointadj; } else if (dropforager == true) { skill = "Forager"; if (xprecord.Forager == 1) { skillpoints = config.forager.pointcoststart; } else { skillpoints = xprecord.Forager * config.forager.costmultiplier; } pointadj = skillpoints - config.xpLevel.skillpointsperlvl; xprecord.Forager--; xprecord.ForagerP -= skillpoints; xprecord.skillpoint = pointadj; } else if (drophunter == true) { skill = "Hunter"; if (xprecord.Hunter == 1) { skillpoints = config.hunter.pointcoststart; } else { skillpoints = xprecord.Hunter * config.hunter.costmultiplier; } pointadj = skillpoints - config.xpLevel.skillpointsperlvl; xprecord.Hunter--; xprecord.HunterP -= skillpoints; xprecord.skillpoint = pointadj; } else if (dropfisher == true) { skill = "Fisher"; if (xprecord.Fisher == 1) { skillpoints = config.fisher.pointcoststart; } else { skillpoints = xprecord.Fisher * config.fisher.costmultiplier; } pointadj = skillpoints - config.xpLevel.skillpointsperlvl; xprecord.Fisher--; xprecord.FisherP -= skillpoints; xprecord.skillpoint = pointadj; } else if (dropcrafter == true) { skill = "Crafter"; if (xprecord.Crafter == 1) { skillpoints = config.crafter.pointcoststart; } else { skillpoints = xprecord.Crafter * config.crafter.costmultiplier; } pointadj = skillpoints - config.xpLevel.skillpointsperlvl; xprecord.Crafter--; xprecord.CrafterP -= skillpoints; xprecord.skillpoint = pointadj; } else if (dropframer == true) { skill = "Framer"; if (xprecord.Framer == 1) { skillpoints = config.framer.pointcoststart; } else { skillpoints = xprecord.Framer * config.framer.costmultiplier; } pointadj = skillpoints - config.xpLevel.skillpointsperlvl; xprecord.Framer--; xprecord.FramerP -= skillpoints; xprecord.skillpoint = pointadj; } else if (dropmedic == true) { skill = "Medic"; if (xprecord.Medic == 1) { skillpoints = config.medic.pointcoststart; } else { skillpoints = xprecord.Medic * config.medic.costmultiplier; } pointadj = skillpoints - config.xpLevel.skillpointsperlvl; xprecord.Medic--; xprecord.MedicP -= skillpoints; xprecord.skillpoint = pointadj; } else if (dropscavenger == true) { skill = "Scavenger"; if (xprecord.Scavenger == 1) { skillpoints = config.scavenger.pointcoststart; } else { skillpoints = xprecord.Scavenger * config.scavenger.costmultiplier; } pointadj = skillpoints - config.xpLevel.skillpointsperlvl; xprecord.Scavenger--; xprecord.ScavengerP -= skillpoints; xprecord.skillpoint = pointadj; } else if (droptamer == true) { skill = "Tamer"; if (xprecord.Tamer == 1) { skillpoints = config.tamer.pointcoststart; } else { skillpoints = xprecord.Tamer * config.tamer.costmultiplier; } pointadj = skillpoints - config.xpLevel.skillpointsperlvl; xprecord.Tamer--; xprecord.TamerP -= skillpoints; xprecord.skillpoint = pointadj; PetChecks(player, false, xprecord.Tamer); } // Make sure points do not go negative if (xprecord.skillpoint < 0) { xprecord.skillpoint = 0; } // Archery Check if (Archery != null && config.archerymod.enablearchery) { ArcheryChecks(player, skill, true); } // Wizardry Check if (Wizardry != null && config.wizardrymod.enablewizardry) { WizardryChecks(player, skill, true); } player.ChatMessage(XPLang("skilldownextra", player.UserIDString, skill, config.xpLevel.skillpointsperlvl, pointadj)); } // Econ if (Economics != null && config.xpEcon.econleveldown) { Economics.Call("Withdraw", player.UserIDString, config.xpEcon.econlevelreduction); player.ChatMessage(XPLang("econwidthdrawlevel", player.UserIDString, config.xpEcon.econlevelreduction)); } // Server Rewards if (ServerRewards != null && config.sRewards.srewardleveldown) { ServerRewards?.Call("TakePoints", player.userID, config.sRewards.srewardleveldownamt); player.ChatMessage(XPLang("srewardsdown", player.UserIDString, config.sRewards.srewardleveldownamt)); } //double prevlevel = Math.Round(xprecord.requiredxp / config.xpLevel.levelmultiplier); double prevlevel = xprecord.requiredxp - (xprecord.level * config.xpLevel.levelmultiplier); if (prevlevel > xprecord.experience) { LvlDown(player); } LiveStats(player, true); if (config.soundEffects.leveldown) { player.RunEffect($"{config.soundEffects.leveldowneffect}"); } } private void StatUp(BasePlayer player, string stat) { XPRecord xprecord = GetXPRecord(player); int nextlevel; int statcost; int pointsremaining; int pointsinstat; // Mentality if (stat == "mentality" && config.mentality.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermMentality)) || !config.defaultOptions.userpermissions)) { if (xprecord.Mentality < config.mentality.maxlvl) { // Econ if (Economics != null && config.xpEcon.econstatlevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econmentality; if (config.xpEcon.econstatlevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econmentality * (config.xpEcon.econstatlevelcostmultiplier * xprecord.Mentality); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, stat, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, stat, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardstatlevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardmentality; if (config.sRewards.srewardstatlevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardmentality * (config.sRewards.srewardstatlevelcostmultiplier * xprecord.Mentality); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, stat, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, stat, points)); return; } } if (xprecord.Mentality == 0) { nextlevel = 1; statcost = config.mentality.pointcoststart; pointsremaining = xprecord.statpoint - statcost; pointsinstat = xprecord.MentalityP + statcost; } else { nextlevel = xprecord.Mentality + 1; statcost = nextlevel * config.mentality.costmultiplier; pointsremaining = xprecord.statpoint - statcost; pointsinstat = xprecord.MentalityP + statcost; } if (xprecord.statpoint < statcost) { player.ChatMessage(XPLang("notenoughstatpoints", player.UserIDString, nextlevel, stat, statcost)); return; } xprecord.Mentality = nextlevel; xprecord.statpoint = pointsremaining; xprecord.MentalityP = pointsinstat; } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, stat)); return; } } // Dexterity else if (stat == "dexterity" && config.dexterity.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermDexterity)) || !config.defaultOptions.userpermissions)) { if (xprecord.Dexterity < config.dexterity.maxlvl) { // Econ if (Economics != null && config.xpEcon.econstatlevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econdexterity; if (config.xpEcon.econstatlevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econdexterity * (config.xpEcon.econstatlevelcostmultiplier * xprecord.Dexterity); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, stat, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, stat, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardstatlevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewarddexterity; if (config.sRewards.srewardstatlevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewarddexterity * (config.sRewards.srewardstatlevelcostmultiplier * xprecord.Dexterity); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, stat, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, stat, points)); return; } } if (xprecord.Dexterity == 0) { nextlevel = 1; statcost = config.dexterity.pointcoststart; pointsremaining = xprecord.statpoint - statcost; pointsinstat = xprecord.DexterityP + statcost; } else { nextlevel = xprecord.Dexterity + 1; statcost = nextlevel * config.dexterity.costmultiplier; pointsremaining = xprecord.statpoint - statcost; pointsinstat = xprecord.DexterityP + statcost; } if (xprecord.statpoint < statcost) { player.ChatMessage(XPLang("notenoughstatpoints", player.UserIDString, nextlevel, stat, statcost)); return; } xprecord.Dexterity = nextlevel; xprecord.statpoint = pointsremaining; xprecord.DexterityP = pointsinstat; } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, stat)); return; } } // Might else if (stat == "might" && config.might.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermMight)) || !config.defaultOptions.userpermissions)) { if (xprecord.Might < config.might.maxlvl) { // Econ if (Economics != null && config.xpEcon.econstatlevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econmight; if (config.xpEcon.econstatlevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econmight * (config.xpEcon.econstatlevelcostmultiplier * xprecord.Might); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, stat, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, stat, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardstatlevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardmight; if (config.sRewards.srewardstatlevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardmight * (config.sRewards.srewardstatlevelcostmultiplier * xprecord.Might); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, stat, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, stat, points)); return; } } if (xprecord.Might == 0) { nextlevel = 1; statcost = config.might.pointcoststart; pointsremaining = xprecord.statpoint - statcost; pointsinstat = xprecord.MightP + statcost; } else { nextlevel = xprecord.Might + 1; statcost = nextlevel * config.might.costmultiplier; pointsremaining = xprecord.statpoint - statcost; pointsinstat = xprecord.MightP + statcost; } if (xprecord.statpoint < statcost) { player.ChatMessage(XPLang("notenoughstatpoints", player.UserIDString, nextlevel, stat, statcost)); return; } xprecord.Might = nextlevel; xprecord.statpoint = pointsremaining; xprecord.MightP = pointsinstat; PlayerArmor(player); MightAttributes(player); } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, stat)); return; } } // Captaincy else if (stat == "captaincy" && config.captaincy.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermCaptaincy)) || !config.defaultOptions.userpermissions)) { if (xprecord.Captaincy < config.captaincy.maxlvl) { // Econ if (Economics != null && config.xpEcon.econstatlevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econcaptaincy; if (config.xpEcon.econstatlevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econcaptaincy * (config.xpEcon.econstatlevelcostmultiplier * xprecord.Captaincy); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, stat, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, stat, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardstatlevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardcaptaincy; if (config.sRewards.srewardstatlevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardcaptaincy * (config.sRewards.srewardstatlevelcostmultiplier * xprecord.Captaincy); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, stat, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, stat, points)); return; } } if (xprecord.Captaincy == 0) { nextlevel = 1; statcost = config.captaincy.pointcoststart; pointsremaining = xprecord.statpoint - statcost; pointsinstat = xprecord.CaptaincyP + statcost; } else { nextlevel = xprecord.Captaincy + 1; statcost = nextlevel * config.captaincy.costmultiplier; pointsremaining = xprecord.statpoint - statcost; pointsinstat = xprecord.CaptaincyP + statcost; } if (xprecord.statpoint < statcost) { player.ChatMessage(XPLang("notenoughstatpoints", player.UserIDString, nextlevel, stat, statcost)); return; } xprecord.Captaincy = nextlevel; xprecord.statpoint = pointsremaining; xprecord.CaptaincyP = pointsinstat; } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, stat)); return; } } // Weaponry else if (stat == "weaponry" && config.weaponry.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermWeaponry)) || !config.defaultOptions.userpermissions)) { if (xprecord.Weaponry < config.weaponry.maxlvl) { // Econ if (Economics != null && config.xpEcon.econstatlevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econweaponry; if (config.xpEcon.econstatlevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econweaponry * (config.xpEcon.econstatlevelcostmultiplier * xprecord.Weaponry); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, stat, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, stat, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardstatlevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardweaponry; if (config.sRewards.srewardstatlevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardweaponry * (config.sRewards.srewardstatlevelcostmultiplier * xprecord.Weaponry); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, stat, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, stat, points)); return; } } if (xprecord.Weaponry == 0) { nextlevel = 1; statcost = config.weaponry.pointcoststart; pointsremaining = xprecord.statpoint - statcost; pointsinstat = xprecord.WeaponryP + statcost; } else { nextlevel = xprecord.Weaponry + 1; statcost = nextlevel * config.weaponry.costmultiplier; pointsremaining = xprecord.statpoint - statcost; pointsinstat = xprecord.WeaponryP + statcost; } if (xprecord.statpoint < statcost) { player.ChatMessage(XPLang("notenoughstatpoints", player.UserIDString, nextlevel, stat, statcost)); return; } xprecord.Weaponry = nextlevel; xprecord.statpoint = pointsremaining; xprecord.WeaponryP = pointsinstat; } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, stat)); return; } } else { player.ChatMessage(XPLang("nopermordisabled", player.UserIDString)); return; } // Backpack Check if (Backpacks != null && config.backpacksmod.enablebackpacks) { BackPackChecks(player, stat, false); } // Archery Check if (Archery != null && config.archerymod.enablearchery) { ArcheryChecks(player, stat, false); } // Wizardry Check if (Wizardry != null && config.wizardrymod.enablewizardry) { WizardryChecks(player, stat, false); } // Chat Notification if (config.defaultOptions.showchatnotifications && xprecord.showchatnotifications) { player.ChatMessage(XPLang("statup", player.UserIDString, statcost, nextlevel, stat)); } // AddonDiscord if (XPerienceAddon != null) { XPerienceAddon?.Call("AddonDiscordStat", player, XPLang(stat, player.UserIDString), nextlevel); XPerienceAddon?.Call("NotifyUIBar", player, "stat", XPLang(stat, player.UserIDString), nextlevel); XPerienceAddon?.Call("NotifyUIBarGlobal", player, "stat", XPLang(stat, player.UserIDString), nextlevel); } LiveStats(player, true); if (XPerienceAddon != null) { XPerienceAddon.Call("PlayerNotes", player, "stat", nextlevel, stat); } if (config.soundEffects.statup) { player.RunEffect($"{config.soundEffects.statupeffect}"); } } private void SkillUp(BasePlayer player, string skill) { XPRecord xprecord = GetXPRecord(player); int nextlevel = 0; int skillcost = 0; int pointsremaining; int pointsinskill; // WoodCutter if (skill == "woodcutter" && config.woodcutter.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermWoodCutter)) || !config.defaultOptions.userpermissions)) { if (xprecord.WoodCutter < config.woodcutter.maxlvl) { // Econ if (Economics != null && config.xpEcon.econskilllevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econwoodcutter; if (config.xpEcon.econskilllevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econwoodcutter * (config.xpEcon.econskilllevelcostmultiplier * xprecord.WoodCutter); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, skill, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, skill, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardskilllevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardwoodcutter; if (config.sRewards.srewardskilllevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardwoodcutter * (config.sRewards.srewardskilllevelcostmultiplier * xprecord.WoodCutter); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, skill, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, skill, points)); return; } } if (xprecord.WoodCutter == 0) { nextlevel = 1; skillcost = config.woodcutter.pointcoststart; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.WoodCutterP + skillcost; } else { nextlevel = xprecord.WoodCutter + 1; skillcost = nextlevel * config.woodcutter.costmultiplier; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.WoodCutterP + skillcost; } if (xprecord.skillpoint < skillcost) { player.ChatMessage(XPLang("notenoughskillpoints", player.UserIDString, nextlevel, skill, skillcost)); return; } xprecord.WoodCutter = nextlevel; xprecord.skillpoint = pointsremaining; xprecord.WoodCutterP = pointsinskill; } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, skill)); } } // Smithy else if (skill == "smithy" && config.smithy.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermSmithy)) || !config.defaultOptions.userpermissions)) { if (xprecord.Smithy < config.smithy.maxlvl) { // Econ if (Economics != null && config.xpEcon.econskilllevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econsmithy; if (config.xpEcon.econskilllevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econsmithy * (config.xpEcon.econskilllevelcostmultiplier * xprecord.Smithy); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, skill, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, skill, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardskilllevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardsmithy; if (config.sRewards.srewardskilllevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardsmithy * (config.sRewards.srewardskilllevelcostmultiplier * xprecord.Smithy); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, skill, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, skill, points)); return; } } if (xprecord.Smithy == 0) { nextlevel = 1; skillcost = config.smithy.pointcoststart; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.SmithyP + skillcost; } else { nextlevel = xprecord.Smithy + 1; skillcost = nextlevel * config.smithy.costmultiplier; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.SmithyP + skillcost; } if (xprecord.skillpoint < skillcost) { player.ChatMessage(XPLang("notenoughskillpoints", player.UserIDString, nextlevel, skill, skillcost)); return; } xprecord.Smithy = nextlevel; xprecord.skillpoint = pointsremaining; xprecord.SmithyP = pointsinskill; } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, skill)); } } // Miner else if (skill == "miner" && config.miner.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermMiner)) || !config.defaultOptions.userpermissions)) { if (xprecord.Miner < config.miner.maxlvl) { // Econ if (Economics != null && config.xpEcon.econskilllevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econminer; if (config.xpEcon.econskilllevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econminer * (config.xpEcon.econskilllevelcostmultiplier * xprecord.Miner); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, skill, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, skill, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardskilllevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardminer; if (config.sRewards.srewardskilllevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardminer * (config.sRewards.srewardskilllevelcostmultiplier * xprecord.Miner); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, skill, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, skill, points)); return; } } if (xprecord.Miner == 0) { nextlevel = 1; skillcost = config.miner.pointcoststart; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.MinerP + skillcost; } else { nextlevel = xprecord.Miner + 1; skillcost = nextlevel * config.miner.costmultiplier; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.MinerP + skillcost; } if (xprecord.skillpoint < skillcost) { player.ChatMessage(XPLang("notenoughskillpoints", player.UserIDString, nextlevel, skill, skillcost)); return; } xprecord.Miner = nextlevel; xprecord.skillpoint = pointsremaining; xprecord.MinerP = pointsinskill; } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, skill)); } } // Forager else if (skill == "forager" && config.forager.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermForager)) || !config.defaultOptions.userpermissions)) { if (xprecord.Forager < config.forager.maxlvl) { // Econ if (Economics != null && config.xpEcon.econskilllevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econforager; if (config.xpEcon.econskilllevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econforager * (config.xpEcon.econskilllevelcostmultiplier * xprecord.Forager); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, skill, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, skill, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardskilllevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardforager; if (config.sRewards.srewardskilllevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardforager * (config.sRewards.srewardskilllevelcostmultiplier * xprecord.Forager); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, skill, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, skill, points)); return; } } if (xprecord.Forager == 0) { nextlevel = 1; skillcost = config.forager.pointcoststart; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.ForagerP + skillcost; } else { nextlevel = xprecord.Forager + 1; skillcost = nextlevel * config.forager.costmultiplier; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.ForagerP + skillcost; } if (xprecord.skillpoint < skillcost) { player.ChatMessage(XPLang("notenoughskillpoints", player.UserIDString, nextlevel, skill, skillcost)); return; } xprecord.Forager = nextlevel; xprecord.skillpoint = pointsremaining; xprecord.ForagerP = pointsinskill; } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, skill)); } } // Hunter else if (skill == "hunter" && config.hunter.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermHunter)) || !config.defaultOptions.userpermissions)) { if (xprecord.Hunter < config.hunter.maxlvl) { // Econ if (Economics != null && config.xpEcon.econskilllevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econhunter; if (config.xpEcon.econskilllevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econhunter * (config.xpEcon.econskilllevelcostmultiplier * xprecord.Hunter); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, skill, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, skill, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardskilllevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardhunter; if (config.sRewards.srewardskilllevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardhunter * (config.sRewards.srewardskilllevelcostmultiplier * xprecord.Hunter); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, skill, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, skill, points)); return; } } if (xprecord.Hunter == 0) { nextlevel = 1; skillcost = config.hunter.pointcoststart; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.HunterP + skillcost; } else { nextlevel = xprecord.Hunter + 1; skillcost = nextlevel * config.hunter.costmultiplier; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.HunterP + skillcost; } if (xprecord.skillpoint < skillcost) { player.ChatMessage(XPLang("notenoughskillpoints", player.UserIDString, nextlevel, skill, skillcost)); return; } xprecord.Hunter = nextlevel; xprecord.skillpoint = pointsremaining; xprecord.HunterP = pointsinskill; } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, skill)); } } // Fisher else if (skill == "fisher" && config.fisher.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermFisher)) || !config.defaultOptions.userpermissions)) { if (xprecord.Fisher < config.fisher.maxlvl) { // Econ if (Economics != null && config.xpEcon.econskilllevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econfisher; if (config.xpEcon.econskilllevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econfisher * (config.xpEcon.econskilllevelcostmultiplier * xprecord.Fisher); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, skill, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, skill, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardskilllevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardfisher; if (config.sRewards.srewardskilllevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardfisher * (config.sRewards.srewardskilllevelcostmultiplier * xprecord.Fisher); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, skill, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, skill, points)); return; } } if (xprecord.Fisher == 0) { nextlevel = 1; skillcost = config.fisher.pointcoststart; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.FisherP + skillcost; } else { nextlevel = xprecord.Fisher + 1; skillcost = nextlevel * config.fisher.costmultiplier; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.FisherP + skillcost; } if (xprecord.skillpoint < skillcost) { player.ChatMessage(XPLang("notenoughskillpoints", player.UserIDString, nextlevel, skill, skillcost)); return; } xprecord.Fisher = nextlevel; xprecord.skillpoint = pointsremaining; xprecord.FisherP = pointsinskill; } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, skill)); } } // Crafter else if (skill == "crafter" && config.crafter.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermCrafter)) || !config.defaultOptions.userpermissions)) { if (xprecord.Crafter < config.crafter.maxlvl) { // Econ if (Economics != null && config.xpEcon.econskilllevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econcrafter; if (config.xpEcon.econskilllevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econcrafter * (config.xpEcon.econskilllevelcostmultiplier * xprecord.Crafter); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, skill, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, skill, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardskilllevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardcrafter; if (config.sRewards.srewardskilllevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardcrafter * (config.sRewards.srewardskilllevelcostmultiplier * xprecord.Crafter); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, skill, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, skill, points)); return; } } if (xprecord.Crafter == 0) { nextlevel = 1; skillcost = config.crafter.pointcoststart; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.CrafterP + skillcost; } else { nextlevel = xprecord.Crafter + 1; skillcost = nextlevel * config.crafter.costmultiplier; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.CrafterP + skillcost; } if (xprecord.skillpoint < skillcost) { player.ChatMessage(XPLang("notenoughskillpoints", player.UserIDString, nextlevel, skill, skillcost)); return; } xprecord.Crafter = nextlevel; xprecord.skillpoint = pointsremaining; xprecord.CrafterP = pointsinskill; } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, skill)); } } // Framer else if (skill == "framer" && config.framer.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermFramer)) || !config.defaultOptions.userpermissions)) { if (xprecord.Framer < config.framer.maxlvl) { // Econ if (Economics != null && config.xpEcon.econskilllevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econframer; if (config.xpEcon.econskilllevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econframer * (config.xpEcon.econskilllevelcostmultiplier * xprecord.Framer); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, skill, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, skill, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardskilllevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardframer; if (config.sRewards.srewardskilllevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardframer * (config.sRewards.srewardskilllevelcostmultiplier * xprecord.Framer); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, skill, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, skill, points)); return; } } if (xprecord.Framer == 0) { nextlevel = 1; skillcost = config.framer.pointcoststart; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.FramerP + skillcost; } else { nextlevel = xprecord.Framer + 1; skillcost = nextlevel * config.framer.costmultiplier; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.FramerP + skillcost; } if (xprecord.skillpoint < skillcost) { player.ChatMessage(XPLang("notenoughskillpoints", player.UserIDString, nextlevel, skill, skillcost)); return; } xprecord.Framer = nextlevel; xprecord.skillpoint = pointsremaining; xprecord.FramerP = pointsinskill; } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, skill)); } } // Medic else if (skill == "medic" && config.medic.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermMedic)) || !config.defaultOptions.userpermissions)) { if (xprecord.Medic < config.medic.maxlvl) { // Econ if (Economics != null && config.xpEcon.econskilllevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econmedic; if (config.xpEcon.econskilllevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econmedic * (config.xpEcon.econskilllevelcostmultiplier * xprecord.Medic); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, skill, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, skill, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardskilllevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardmedic; if (config.sRewards.srewardskilllevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardmedic * (config.sRewards.srewardskilllevelcostmultiplier * xprecord.Medic); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, skill, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, skill, points)); return; } } if (xprecord.Medic == 0) { nextlevel = 1; skillcost = config.medic.pointcoststart; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.MedicP + skillcost; } else { nextlevel = xprecord.Medic + 1; skillcost = nextlevel * config.medic.costmultiplier; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.MedicP + skillcost; } if (xprecord.skillpoint < skillcost) { player.ChatMessage(XPLang("notenoughskillpoints", player.UserIDString, nextlevel, skill, skillcost)); return; } xprecord.Medic = nextlevel; xprecord.skillpoint = pointsremaining; xprecord.MedicP = pointsinskill; } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, skill)); } } // Scavenger else if (skill == "scavenger" && config.scavenger.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermScavenger)) || !config.defaultOptions.userpermissions)) { if (xprecord.Scavenger < config.scavenger.maxlvl) { // Econ if (Economics != null && config.xpEcon.econskilllevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econscavenger; if (config.xpEcon.econskilllevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econscavenger * (config.xpEcon.econskilllevelcostmultiplier * xprecord.Scavenger); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, skill, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, skill, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardskilllevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardscavenger; if (config.sRewards.srewardskilllevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardscavenger * (config.sRewards.srewardskilllevelcostmultiplier * xprecord.Scavenger); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, skill, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, skill, points)); return; } } if (xprecord.Scavenger == 0) { nextlevel = 1; skillcost = config.scavenger.pointcoststart; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.ScavengerP + skillcost; } else { nextlevel = xprecord.Scavenger + 1; skillcost = nextlevel * config.scavenger.costmultiplier; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.ScavengerP + skillcost; } if (xprecord.skillpoint < skillcost) { player.ChatMessage(XPLang("notenoughskillpoints", player.UserIDString, nextlevel, skill, skillcost)); return; } xprecord.Scavenger = nextlevel; xprecord.skillpoint = pointsremaining; xprecord.ScavengerP = pointsinskill; } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, skill)); } } // Electrician else if (skill == "electrician" && config.electrician.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermElectrician)) || !config.defaultOptions.userpermissions)) { if (xprecord.Electrician < config.electrician.maxlvl) { // Econ if (Economics != null && config.xpEcon.econskilllevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econelectrician; if (config.xpEcon.econskilllevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econelectrician * (config.xpEcon.econskilllevelcostmultiplier * xprecord.Electrician); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, skill, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, skill, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardskilllevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardelectrician; if (config.sRewards.srewardskilllevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardelectrician * (config.sRewards.srewardskilllevelcostmultiplier * xprecord.Electrician); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, skill, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, skill, points)); return; } } if (xprecord.Electrician == 0) { nextlevel = 1; skillcost = config.electrician.pointcoststart; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.ElectricianP + skillcost; } else { nextlevel = xprecord.Electrician + 1; skillcost = nextlevel * config.electrician.costmultiplier; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.ElectricianP + skillcost; } if (xprecord.skillpoint < skillcost) { player.ChatMessage(XPLang("notenoughskillpoints", player.UserIDString, nextlevel, skill, skillcost)); return; } xprecord.Electrician = nextlevel; xprecord.skillpoint = pointsremaining; xprecord.ElectricianP = pointsinskill; } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, skill)); } } // Tamer else if (skill == "tamer" && config.tamer.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermTamer)) || !config.defaultOptions.userpermissions)) { if (xprecord.Tamer < config.tamer.maxlvl) { // Econ if (Economics != null && config.xpEcon.econskilllevelcost) { double balance = Economics.Call("Balance", player.UserIDString); double econcostmultiplier = config.xpEcon.econtamer; if (config.xpEcon.econskilllevelcostmultiplier > 0) { econcostmultiplier = config.xpEcon.econtamer * (config.xpEcon.econskilllevelcostmultiplier * xprecord.Tamer); } if (balance >= econcostmultiplier) { Economics.Call("Withdraw", player.UserIDString, econcostmultiplier); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawlevelup", player.UserIDString, econcostmultiplier, skill, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawlevelupfailed", player.UserIDString, econcostmultiplier, skill, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardskilllevelcost) { int points = ServerRewards.Call("CheckPoints", player.userID); int srewardscostmultiplier = config.sRewards.srewardtamer; if (config.sRewards.srewardskilllevelcostmultiplier > 0) { srewardscostmultiplier = config.sRewards.srewardtamer * (config.sRewards.srewardskilllevelcostmultiplier * xprecord.Tamer); } if (points >= srewardscostmultiplier) { ServerRewards?.Call("TakePoints", player.userID, srewardscostmultiplier); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawlevelup", player.UserIDString, srewardscostmultiplier, skill, newpoints)); } else { player.ChatMessage(XPLang("srewardswidthdrawlevelupfailed", player.UserIDString, srewardscostmultiplier, skill, points)); return; } } if (xprecord.Tamer == 0) { nextlevel = 1; skillcost = config.tamer.pointcoststart; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.TamerP + skillcost; } else { nextlevel = xprecord.Tamer + 1; skillcost = nextlevel * config.tamer.costmultiplier; pointsremaining = xprecord.skillpoint - skillcost; pointsinskill = xprecord.TamerP + skillcost; } if (xprecord.skillpoint < skillcost) { player.ChatMessage(XPLang("notenoughskillpoints", player.UserIDString, nextlevel, skill, skillcost)); return; } xprecord.Tamer = nextlevel; xprecord.skillpoint = pointsremaining; xprecord.TamerP = pointsinskill; PetChecks(player, false, nextlevel); } else { player.ChatMessage(XPLang("maxleveled", player.UserIDString, skill)); } } else { player.ChatMessage(XPLang("nopermordisabled", player.UserIDString)); return; } // Backpack Check if (Backpacks != null && config.backpacksmod.enablebackpacks) { BackPackChecks(player, skill, false); } // Archery Check if (Archery != null && config.archerymod.enablearchery) { ArcheryChecks(player, skill, false); } // Wizardry Check if (Wizardry != null && config.wizardrymod.enablewizardry) { WizardryChecks(player, skill, false); } // Chat Notification if (config.defaultOptions.showchatnotifications && xprecord.showchatnotifications) { player.ChatMessage(XPLang("skillup", player.UserIDString, skillcost, nextlevel, skill)); } // AddonDiscord if (XPerienceAddon != null) { XPerienceAddon?.Call("AddonDiscordSkill", player, XPLang(skill, player.UserIDString), nextlevel); XPerienceAddon?.Call("NotifyUIBar", player, "skill", XPLang(skill, player.UserIDString), nextlevel); XPerienceAddon?.Call("NotifyUIBarGlobal", player, "skill", XPLang(skill, player.UserIDString), nextlevel); } LiveStats(player, true); if (XPerienceAddon != null) { XPerienceAddon.Call("PlayerNotes", player, "skill", nextlevel, skill); } if (config.soundEffects.skillup) { player.RunEffect($"{config.soundEffects.skillupeffect}"); } } private void StatReset(BasePlayer player, string stat) { XPRecord xprecord = GetXPRecord(player); if (!config.defaultOptions.allowrespec) { return; } int resetlimit = 0; bool UserHasSpecialGroup = false; // Check Special Groups var highestpriority = config.specialGroups.specialgroups.Values.Max(i => i.grouppriority); var getgrouplist = config.specialGroups.specialgroups.Values.OrderByDescending(i => i.grouppriority); restart: foreach (var specialgroup in getgrouplist) { UserHasSpecialGroup = permission.UserHasGroup(player.UserIDString, specialgroup.permissionname); if (UserHasSpecialGroup && specialgroup.grouppriority == highestpriority) { if (specialgroup.dailystatlimitboost > 0) { resetlimit = specialgroup.dailystatlimitboost; } break; } else if (UserHasSpecialGroup && specialgroup.grouppriority != highestpriority) { highestpriority--; goto restart; } } // Check Daily Limits DailyLimitPlayer(player); DailyRecord dailyrecord = GetDailyRecord(player); if (config.dailyresetLimit.enabledailyresetlimit) { // Calculate time var getlaststatreset = dailyrecord.laststatreset - DateTime.Now; double laststatreset = Math.Round(double.Parse(getlaststatreset.Minutes.ToString()) / 60, 1); string dailyresetlabel = "hours"; if (laststatreset <= 1) { laststatreset = int.Parse(getlaststatreset.Minutes.ToString()); dailyresetlabel = "mins"; } // Get limit Settings resetlimit += config.dailyresetLimit.dailystatlimit; if (permission.UserHasPermission(player.UserIDString, VIP) && !UserHasSpecialGroup) { resetlimit = config.dailyresetLimit.dailystatlimitvip; } // Check Players Limit if (dailyrecord.dailystatresets >= resetlimit && resetlimit != 0) { player.ChatMessage(XPLang("dailyresetlimitreached", player.UserIDString, resetlimit, laststatreset, dailyresetlabel)); return; } } // Econ if (Economics != null && config.xpEcon.econresetstat) { double balance = Economics.Call("Balance", player.UserIDString); if (balance >= config.xpEcon.econresetstatcost) { Economics.Call("Withdraw", player.UserIDString, config.xpEcon.econresetstatcost); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawresetstat", player.UserIDString, config.xpEcon.econresetstatcost, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawresetstatfailed", player.UserIDString, config.xpEcon.econresetstatcost, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardresetstat) { int points = ServerRewards.Call("CheckPoints", player.userID); if (points >= config.sRewards.srewardresetstatcost) { ServerRewards?.Call("TakePoints", player.userID, config.sRewards.srewardresetstatcost); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawresetstat", player.UserIDString, config.sRewards.srewardresetstatcost, newpoints)); } else { player.ChatMessage(XPLang("srewardwidthdrawresetstatfailed", player.UserIDString, config.sRewards.srewardresetstatcost, points)); return; } } // Find Stat and Reset int statpoints = 0; switch (stat) { case "Mentality": statpoints = xprecord.MentalityP; xprecord.statpoint += xprecord.MentalityP; xprecord.Mentality = 0; xprecord.MentalityP = 0; break; case "Dexterity": statpoints = xprecord.DexterityP; xprecord.statpoint += xprecord.DexterityP; xprecord.Dexterity = 0; xprecord.DexterityP = 0; break; case "Might": statpoints = xprecord.MightP; xprecord.statpoint += xprecord.MightP; if (xprecord.Might >= 1) { // Max Health double armor = (xprecord.Might * config.might.armor) * 100; double newmaxhealth = player._maxHealth - armor; // Change Max Health if (newmaxhealth < 100) { player._maxHealth = 100; } else { player._maxHealth = (float)newmaxhealth; } // Player Current Health double defaulthealth = 100; double teahealth = 100; bool teamodified = false; double healthdifference = 0; if (GetTeaCooldown(player) != 0) { // Check for Tea Modifier if (TeaModifiers != null && xprecord.teatype != "none") { teahealth = defaulthealth + TeaModifiers.Call("GetTeaValue", player, xprecord.teatype, Modifier.ModifierType.Max_Health) * 100; teamodified = true; } switch (GetTeaTypes(player)) { case "maxhealthtea": if (!teamodified) { teahealth = defaulthealth + 5; } break; case "maxhealthtea.advanced": if (!teamodified) { teahealth = defaulthealth + 12.5; } break; case "maxhealthtea.pure": if (!teamodified) { teahealth = defaulthealth + 20; } break; } } if (player._health > teahealth) { healthdifference = player._health - teahealth; } player._health -= (float)healthdifference; } xprecord.Might = 0; xprecord.MightP = 0; if (player.metabolism.calories.max > 500) { player.metabolism.calories.max = 500; } if (player.metabolism.hydration.max > 250) { player.metabolism.hydration.max = 250; } MightAttributes(player); break; case "Captaincy": statpoints = xprecord.CaptaincyP; xprecord.statpoint += xprecord.CaptaincyP; xprecord.Captaincy = 0; xprecord.CaptaincyP = 0; break; case "Weaponry": statpoints = xprecord.WeaponryP; xprecord.statpoint += xprecord.WeaponryP; xprecord.Weaponry = 0; xprecord.WeaponryP = 0; break; } // Backpack Check if (Backpacks != null && config.backpacksmod.enablebackpacks) { string backpackstatorskill = config.backpacksmod.statorskill; if (backpackstatorskill == stat) { BackPackChecks(player, null, true); } } // Archery Check if (Archery != null && config.archerymod.enablearchery) { string archstatorskill = config.archerymod.statorskill; if (archstatorskill == stat) { ArcheryChecks(player, null, true); } } // Wizardry Check if (Wizardry != null && config.wizardrymod.enablewizardry) { string wizstatorskill = config.wizardrymod.statorskill; if (wizstatorskill == stat) { WizardryChecks(player, null, true); } } // Add Reset to Daily Record dailyrecord.dailystatresets += 1; // Message Player with number of stat points returned player.ChatMessage(XPLang("resetstat", player.UserIDString, stat, statpoints)); // Update Live UI LiveStats(player, true); if (config.soundEffects.statreset) { player.RunEffect($"{config.soundEffects.statreseteffect}"); } } private void StatsResetAll(BasePlayer player) { XPRecord xprecord = GetXPRecord(player); if (config.defaultOptions.hardcorenoreset) { return; } int resetlimit = 0; bool UserHasSpecialGroup = false; // Check Special Groups var highestpriority = config.specialGroups.specialgroups.Values.Max(i => i.grouppriority); var getgrouplist = config.specialGroups.specialgroups.Values.OrderByDescending(i => i.grouppriority); restart: foreach (var specialgroup in getgrouplist) { UserHasSpecialGroup = permission.UserHasGroup(player.UserIDString, specialgroup.permissionname); if (UserHasSpecialGroup && specialgroup.grouppriority == highestpriority) { if (specialgroup.dailystatlimitboost > 0) { resetlimit = specialgroup.dailystatlimitboost; } break; } else if (UserHasSpecialGroup && specialgroup.grouppriority != highestpriority) { highestpriority--; goto restart; } } // Check Daily Limits DailyLimitPlayer(player); DailyRecord dailyrecord = GetDailyRecord(player); if (config.dailyresetLimit.enabledailyresetlimit) { // Calculate time var getlaststatreset = dailyrecord.laststatreset - DateTime.Now; double laststatreset = Math.Round(double.Parse(getlaststatreset.Minutes.ToString()) / 60, 1); string dailyresetlabel = "hours"; if (laststatreset <= 1) { laststatreset = int.Parse(getlaststatreset.Minutes.ToString()); dailyresetlabel = "mins"; } // Get limit Settings resetlimit += config.dailyresetLimit.dailystatlimit; if (permission.UserHasPermission(player.UserIDString, VIP) && !UserHasSpecialGroup) { resetlimit = config.dailyresetLimit.dailystatlimitvip; } // Check Players Limit if (dailyrecord.dailystatresets >= resetlimit && resetlimit != 0) { player.ChatMessage(XPLang("dailyresetlimitreached", player.UserIDString, resetlimit, laststatreset, dailyresetlabel)); return; } } DateTime resettimestats = xprecord.resettimerstats.AddMinutes(config.defaultOptions.resetminsstats); if (permission.UserHasPermission(player.UserIDString, VIP)) { resettimestats = xprecord.resettimerstats.AddMinutes(config.defaultOptions.vipresetminstats); } TimeSpan interval = resettimestats - DateTime.Now; int timer = (int)interval.TotalMinutes; if (config.defaultOptions.bypassadminreset && (player.IsAdmin || permission.UserHasPermission(player.UserIDString, Admin))) { timer = 0; } if (timer > 0 && config.defaultOptions.restristresets) { player.ChatMessage(XPLang("resettimerstats", player.UserIDString, timer)); return; } // Econ if (Economics != null && config.xpEcon.econresetstats) { double balance = Economics.Call("Balance", player.UserIDString); if (balance >= config.xpEcon.econresetstatscost) { Economics.Call("Withdraw", player.UserIDString, config.xpEcon.econresetstatscost); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawresetstat", player.UserIDString, config.xpEcon.econresetstatscost, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawresetstatfailed", player.UserIDString, config.xpEcon.econresetstatscost, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardresetstats) { int points = ServerRewards.Call("CheckPoints", player.userID); if (points >= config.sRewards.srewardresetstatscost) { ServerRewards?.Call("TakePoints", player.userID, config.sRewards.srewardresetstatscost); int newpoints = ServerRewards.Call("CheckPoints", player.userID); player.ChatMessage(XPLang("srewardwidthdrawresetstat", player.UserIDString, config.sRewards.srewardresetstatscost, newpoints)); } else { player.ChatMessage(XPLang("srewardwidthdrawresetstatfailed", player.UserIDString, config.sRewards.srewardresetstatscost, points)); return; } } // Reset health if needed before removing points if (xprecord.Might >= 1) { // Max Health double armor = (xprecord.Might * config.might.armor) * 100; double newmaxhealth = player._maxHealth - armor; // Change Max Health if (newmaxhealth < 100) { player._maxHealth = 100; } else { player._maxHealth = (float)newmaxhealth; } // Player Current Health double defaulthealth = 100; double teahealth = 100; bool teamodified = false; double healthdifference = 0; if (GetTeaCooldown(player) != 0) { // Check for Tea Modifier if (TeaModifiers != null && xprecord.teatype != "none") { teahealth = defaulthealth + TeaModifiers.Call("GetTeaValue", player, xprecord.teatype, Modifier.ModifierType.Max_Health) * 100; teamodified = true; } switch (GetTeaTypes(player)) { case "maxhealthtea": if (!teamodified) { teahealth = defaulthealth + 5; } break; case "maxhealthtea.advanced": if (!teamodified) { teahealth = defaulthealth + 12.5; } break; case "maxhealthtea.pure": if (!teamodified) { teahealth = defaulthealth + 20; } break; } } if (player._health > teahealth) { healthdifference = player._health - teahealth; } player._health -= (float)healthdifference; MightAttributes(player); } // Add all spent points int statpoints = xprecord.statpoint + xprecord.MentalityP + xprecord.DexterityP + xprecord.MightP + xprecord.CaptaincyP + xprecord.WeaponryP; // Refund Points xprecord.statpoint = statpoints; // Reset Stat Levels xprecord.Mentality = 0; xprecord.Dexterity = 0; xprecord.Might = 0; xprecord.Captaincy = 0; xprecord.Weaponry = 0; // Reset Stat Spent Points xprecord.MentalityP = 0; xprecord.DexterityP = 0; xprecord.MightP = 0; xprecord.CaptaincyP = 0; xprecord.WeaponryP = 0; if (player.metabolism.calories.max > 500) { player.metabolism.calories.max = 500; } if (player.metabolism.hydration.max > 250) { player.metabolism.hydration.max = 250; } // New Reset Timer xprecord.resettimerstats = DateTime.Now; // Backpack Check if (Backpacks != null && config.backpacksmod.enablebackpacks) { string backpackstatorskill = config.backpacksmod.statorskill; if (backpackstatorskill == "Mentality" || backpackstatorskill == "Dexterity" || backpackstatorskill == "Might" || backpackstatorskill == "Captaincy") { BackPackChecks(player, null, true); } } // Archery Check if (Archery != null && config.archerymod.enablearchery) { string archstatorskill = config.archerymod.statorskill; if (archstatorskill == "Mentality" || archstatorskill == "Dexterity" || archstatorskill == "Might" || archstatorskill == "Captaincy") { ArcheryChecks(player, null, true); } } // Wizardry Check if (Wizardry != null && config.wizardrymod.enablewizardry) { string wizstatorskill = config.wizardrymod.statorskill; if (wizstatorskill == "Mentality" || wizstatorskill == "Dexterity" || wizstatorskill == "Might" || wizstatorskill == "Captaincy") { WizardryChecks(player, null, true); } } // Add Reset to Daily Record dailyrecord.dailystatresets += 1; // Message Player with number of stat points returned player.ChatMessage(XPLang("resetstats", player.UserIDString, statpoints)); // Update Live UI LiveStats(player, true); if (config.soundEffects.statreset) { player.RunEffect($"{config.soundEffects.statreseteffect}"); } } private void SkillReset(BasePlayer player, string skill) { XPRecord xprecord = GetXPRecord(player); if (!config.defaultOptions.allowrespec) { return; } int resetlimit = 0; bool UserHasSpecialGroup = false; // Check Special Groups var highestpriority = config.specialGroups.specialgroups.Values.Max(i => i.grouppriority); var getgrouplist = config.specialGroups.specialgroups.Values.OrderByDescending(i => i.grouppriority); restart: foreach (var specialgroup in getgrouplist) { UserHasSpecialGroup = permission.UserHasGroup(player.UserIDString, specialgroup.permissionname); if (UserHasSpecialGroup && specialgroup.grouppriority == highestpriority) { if (specialgroup.dailyskilllimitboost > 0) { resetlimit = specialgroup.dailyskilllimitboost; } break; } else if (UserHasSpecialGroup && specialgroup.grouppriority != highestpriority) { highestpriority--; goto restart; } } // Check Daily Limits DailyLimitPlayer(player); DailyRecord dailyrecord = GetDailyRecord(player); if (config.dailyresetLimit.enabledailyresetlimit) { // Calculate time var getlastskillreset = dailyrecord.lastskillreset - DateTime.Now; double lastskillreset = Math.Round(double.Parse(getlastskillreset.Minutes.ToString()) / 60, 1); string dailyresetlabel = "hours"; if (lastskillreset <= 1) { lastskillreset = int.Parse(getlastskillreset.Minutes.ToString()); dailyresetlabel = "mins"; } // Get limit Settings resetlimit += config.dailyresetLimit.dailyskilllimit; if (permission.UserHasPermission(player.UserIDString, VIP) && !UserHasSpecialGroup) { resetlimit = config.dailyresetLimit.dailyskilllimitvip; } // Check Players Limit if (dailyrecord.dailyskillresets >= resetlimit && resetlimit != 0) { player.ChatMessage(XPLang("dailyresetlimitreached", player.UserIDString, resetlimit, lastskillreset, dailyresetlabel)); return; } } // Econ if (Economics != null && config.xpEcon.econresetskill) { double balance = Economics.Call("Balance", player.UserIDString); if (balance >= config.xpEcon.econresetskillcost) { Economics.Call("Withdraw", player.UserIDString, config.xpEcon.econresetskillcost); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawresetstat", player.UserIDString, config.xpEcon.econresetskillcost, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawresetstatfailed", player.UserIDString, config.xpEcon.econresetskillcost, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardresetskill) { int points = ServerRewards.Call("CheckPoints", player.UserIDString); if (points >= config.sRewards.srewardresetskillcost) { ServerRewards?.Call("TakePoints", player.UserIDString, config.sRewards.srewardresetskillcost); int newpoints = ServerRewards.Call("CheckPoints", player.UserIDString); player.ChatMessage(XPLang("srewardwidthdrawresetstat", player.UserIDString, config.sRewards.srewardresetskillcost, newpoints)); } else { player.ChatMessage(XPLang("srewardwidthdrawresetstatfailed", player.UserIDString, config.sRewards.srewardresetskillcost, points)); return; } } // Find Skill and Reset int skillpoints = 0; switch (skill) { case "WoodCutter": skillpoints = xprecord.WoodCutterP; xprecord.skillpoint += xprecord.WoodCutterP; xprecord.WoodCutter = 0; xprecord.WoodCutterP = 0; break; case "Smithy": skillpoints = xprecord.SmithyP; xprecord.skillpoint += xprecord.SmithyP; xprecord.Smithy = 0; xprecord.SmithyP = 0; break; case "Miner": skillpoints = xprecord.MinerP; xprecord.skillpoint += xprecord.MinerP; xprecord.Miner = 0; xprecord.MinerP = 0; break; case "Forager": skillpoints = xprecord.ForagerP; xprecord.skillpoint += xprecord.ForagerP; xprecord.Forager = 0; xprecord.ForagerP = 0; break; case "Hunter": skillpoints = xprecord.HunterP; xprecord.skillpoint += xprecord.HunterP; xprecord.Hunter = 0; xprecord.HunterP = 0; break; case "Crafter": skillpoints = xprecord.CrafterP; xprecord.skillpoint += xprecord.CrafterP; xprecord.Crafter = 0; xprecord.CrafterP = 0; break; case "Framer": skillpoints = xprecord.FramerP; xprecord.skillpoint += xprecord.FramerP; xprecord.Framer = 0; xprecord.FramerP = 0; break; case "Fisher": skillpoints = xprecord.FisherP; xprecord.skillpoint += xprecord.FisherP; xprecord.Fisher = 0; xprecord.FisherP = 0; break; case "Medic": skillpoints = xprecord.MedicP; xprecord.skillpoint += xprecord.MedicP; xprecord.Medic = 0; xprecord.MedicP = 0; break; case "Scavenger": skillpoints = xprecord.ScavengerP; xprecord.skillpoint += xprecord.ScavengerP; xprecord.Scavenger = 0; xprecord.ScavengerP = 0; break; case "Electrician": skillpoints = xprecord.ElectricianP; xprecord.skillpoint += xprecord.ElectricianP; xprecord.Electrician = 0; xprecord.ElectricianP = 0; break; case "Tamer": skillpoints = xprecord.TamerP; xprecord.skillpoint += xprecord.TamerP; xprecord.Tamer = 0; xprecord.TamerP = 0; // Reset Tamer permissions PetChecks(player, true); break; } // Backpack Check if (Backpacks != null && config.backpacksmod.enablebackpacks) { string backpackskill = config.backpacksmod.statorskill; if (backpackskill == skill) { BackPackChecks(player, null, true); } } // Archery Check if (Archery != null && config.archerymod.enablearchery) { string archskill = config.archerymod.statorskill; if (archskill == skill) { ArcheryChecks(player, null, true); } } // Wizardry Check if (Wizardry != null && config.wizardrymod.enablewizardry) { string wizskill = config.wizardrymod.statorskill; if (wizskill == skill) { WizardryChecks(player, null, true); } } // Add Reset to Daily Record dailyrecord.dailyskillresets += 1; // Message Player with number of skill points returned player.ChatMessage(XPLang("resetskill", player.UserIDString, skill, skillpoints)); // Update Live UI LiveStats(player, true); if (config.soundEffects.skillreset) { player.RunEffect($"{config.soundEffects.skillreseteffect}"); } } private void SkillsResetAll(BasePlayer player) { XPRecord xprecord = GetXPRecord(player); if (config.defaultOptions.hardcorenoreset) { return; } int resetlimit = 0; bool UserHasSpecialGroup = false; // Check Special Groups var highestpriority = config.specialGroups.specialgroups.Values.Max(i => i.grouppriority); var getgrouplist = config.specialGroups.specialgroups.Values.OrderByDescending(i => i.grouppriority); restart: foreach (var specialgroup in getgrouplist) { UserHasSpecialGroup = permission.UserHasGroup(player.UserIDString, specialgroup.permissionname); if (UserHasSpecialGroup && specialgroup.grouppriority == highestpriority) { if (specialgroup.dailyskilllimitboost > 0) { resetlimit = specialgroup.dailyskilllimitboost; } break; } else if (UserHasSpecialGroup && specialgroup.grouppriority != highestpriority) { highestpriority--; goto restart; } } // Check Daily Limits DailyLimitPlayer(player); DailyRecord dailyrecord = GetDailyRecord(player); if (config.dailyresetLimit.enabledailyresetlimit) { // Calculate time var getlastskillreset = dailyrecord.lastskillreset - DateTime.Now; double lastskillreset = Math.Round(double.Parse(getlastskillreset.Minutes.ToString()) / 60, 1); string dailyresetlabel = "hours"; if (lastskillreset <= 1) { lastskillreset = int.Parse(getlastskillreset.Minutes.ToString()); dailyresetlabel = "mins"; } // Get limit Settings resetlimit += config.dailyresetLimit.dailyskilllimit; if (permission.UserHasPermission(player.UserIDString, VIP) && !UserHasSpecialGroup) { resetlimit = config.dailyresetLimit.dailyskilllimitvip; } // Check Players Limit if (dailyrecord.dailyskillresets >= resetlimit && resetlimit != 0) { player.ChatMessage(XPLang("dailyresetlimitreached", player.UserIDString, resetlimit, lastskillreset, dailyresetlabel)); return; } } DateTime resettimeskills = xprecord.resettimerskills.AddMinutes(config.defaultOptions.resetminsskills); if (permission.UserHasPermission(player.UserIDString, VIP)) { resettimeskills = xprecord.resettimerskills.AddMinutes(config.defaultOptions.vipresetminsskills); } TimeSpan interval = resettimeskills - DateTime.Now; int timer = (int)interval.TotalMinutes; if (config.defaultOptions.bypassadminreset && (player.IsAdmin || permission.UserHasPermission(player.UserIDString, Admin))) { timer = 0; } if (timer > 0 && config.defaultOptions.restristresets) { player.ChatMessage(XPLang("resettimerskills", player.UserIDString, timer)); return; } // Econ if (Economics != null && config.xpEcon.econresetskills) { double balance = Economics.Call("Balance", player.UserIDString); if (balance >= config.xpEcon.econresetskillscost) { Economics.Call("Withdraw", player.UserIDString, config.xpEcon.econresetskillscost); double newbalance = Economics.Call("Balance", player.UserIDString); player.ChatMessage(XPLang("econwidthdrawresetstat", player.UserIDString, config.xpEcon.econresetskillscost, newbalance)); } else { player.ChatMessage(XPLang("econwidthdrawresetstatfailed", player.UserIDString, config.xpEcon.econresetskillscost, balance)); return; } } // Server Rewards if (ServerRewards != null && config.sRewards.srewardresetskills) { int points = ServerRewards.Call("CheckPoints", player.UserIDString); if (points >= config.sRewards.srewardresetskillscost) { ServerRewards?.Call("TakePoints", player.UserIDString, config.sRewards.srewardresetskillscost); int newpoints = ServerRewards.Call("CheckPoints", player.UserIDString); player.ChatMessage(XPLang("srewardwidthdrawresetstat", player.UserIDString, config.sRewards.srewardresetskillscost, newpoints)); } else { player.ChatMessage(XPLang("srewardwidthdrawresetstatfailed", player.UserIDString, config.sRewards.srewardresetskillscost, points)); return; } } // Add all spent points int skillpoints = xprecord.skillpoint + xprecord.WoodCutterP + xprecord.SmithyP + xprecord.MinerP + xprecord.ForagerP + xprecord.HunterP + xprecord.FisherP + xprecord.CrafterP + xprecord.FramerP + xprecord.MedicP + xprecord.ScavengerP + xprecord.ElectricianP + xprecord.TamerP; // Reset Skill Levels xprecord.skillpoint = skillpoints; xprecord.WoodCutter = 0; xprecord.Smithy = 0; xprecord.Miner = 0; xprecord.Forager = 0; xprecord.Hunter = 0; xprecord.Fisher = 0; xprecord.Crafter = 0; xprecord.Framer = 0; xprecord.Medic = 0; xprecord.Scavenger = 0; xprecord.Electrician = 0; xprecord.Tamer = 0; // Reset Skill Spents Points xprecord.WoodCutterP = 0; xprecord.SmithyP = 0; xprecord.MinerP = 0; xprecord.ForagerP = 0; xprecord.HunterP = 0; xprecord.FisherP = 0; xprecord.CrafterP = 0; xprecord.FramerP = 0; xprecord.MedicP = 0; xprecord.ScavengerP = 0; xprecord.ElectricianP = 0; xprecord.TamerP = 0; // Backpack Check if (Backpacks != null && config.backpacksmod.enablebackpacks) { string backpackskill = config.backpacksmod.statorskill; if (backpackskill == "WoodCutter" || backpackskill == "Smithy" || backpackskill == "Miner" || backpackskill == "Forager" || backpackskill == "Hunter" || backpackskill == "Fisher" || backpackskill == "Crafter" || backpackskill == "Framer" || backpackskill == "Medic" || backpackskill == "Scavenger") { BackPackChecks(player, null, true); } } // Archery Check if (Archery != null && config.archerymod.enablearchery) { string archskill = config.archerymod.statorskill; if (archskill == "WoodCutter" || archskill == "Smithy" || archskill == "Miner" || archskill == "Forager" || archskill == "Hunter" || archskill == "Fisher" || archskill == "Crafter" || archskill == "Framer" || archskill == "Medic" || archskill == "Scavenger") { ArcheryChecks(player, null, true); } } // Wizardry Check if (Wizardry != null && config.wizardrymod.enablewizardry) { string wizskill = config.wizardrymod.statorskill; if (wizskill == "WoodCutter" || wizskill == "Smithy" || wizskill == "Miner" || wizskill == "Forager" || wizskill == "Hunter" || wizskill == "Fisher" || wizskill == "Crafter" || wizskill == "Framer" || wizskill == "Medic" || wizskill == "Scavenger") { WizardryChecks(player, null, true); } } // Check/Reset Tamer permissions PetChecks(player, true); // New Reset Timer xprecord.resettimerskills = DateTime.Now; // Add Reset to Daily Record dailyrecord.dailyskillresets += 1; // Message Player with number of skill points returned player.ChatMessage(XPLang("resetskills", player.UserIDString, skillpoints)); // Update Live UI LiveStats(player, true); if (config.soundEffects.skillreset) { player.RunEffect($"{config.soundEffects.skillreseteffect}"); } } private void PlayerFixDataAll(BasePlayer player, bool reset = false) { if (!player.IsAdmin && !permission.UserHasPermission(player.UserIDString, Admin)) return; foreach (var p in _xperienceCache) { if (!p.Key.IsSteamId()) continue; XPRecord xprecord = GetPlayerRecord(p.Key); // Check True experience before fixing data //if (config.xpLevelRanks.enableresetranks) //{ if (xprecord.trueexperience <= 0 || xprecord.trueexperience < xprecord.experience) { xprecord.trueexperience = (int)xprecord.experience; } //} // Reset Level, Required XP & Stat/Skill Points if (!reset) { xprecord.rank = 0; xprecord.truelevel = 0; } xprecord.level = 0; xprecord.experience = 0; xprecord.requiredxp = config.xpLevel.levelstart; xprecord.statpoint = 0; xprecord.skillpoint = 0; // Reset Stat Levels xprecord.Mentality = 0; xprecord.Dexterity = 0; xprecord.Might = 0; xprecord.Captaincy = 0; xprecord.Weaponry = 0; // Reset Stat Spent Points xprecord.MentalityP = 0; xprecord.DexterityP = 0; xprecord.MightP = 0; xprecord.CaptaincyP = 0; xprecord.WeaponryP = 0; // Reset Skill Levels xprecord.WoodCutter = 0; xprecord.Smithy = 0; xprecord.Miner = 0; xprecord.Forager = 0; xprecord.Hunter = 0; xprecord.Fisher = 0; xprecord.Crafter = 0; xprecord.Framer = 0; xprecord.Medic = 0; xprecord.Scavenger = 0; xprecord.Electrician = 0; xprecord.Tamer = 0; // Reset Skill Spents Points xprecord.WoodCutterP = 0; xprecord.SmithyP = 0; xprecord.MinerP = 0; xprecord.ForagerP = 0; xprecord.HunterP = 0; xprecord.FisherP = 0; xprecord.CrafterP = 0; xprecord.FramerP = 0; xprecord.MedicP = 0; xprecord.ScavengerP = 0; xprecord.ElectricianP = 0; xprecord.TamerP = 0; // Set LiveUI Location to Default xprecord.UILocation = config.defaultOptions.liveuistatslocation; // Check for Rank Group and Assign or Revoke foreach (var rankgroup in config.xpLevelRanks.ranks) { if (config.xpLevelRanks.keepgrouponrank && xprecord.rank > rankgroup.Key && !permission.UserHasGroup(p.Key, rankgroup.Value.group)) { permission.AddUserGroup(p.Key, rankgroup.Value.group); } if (xprecord.rank == rankgroup.Key && !permission.UserHasGroup(p.Key, rankgroup.Value.group)) { permission.AddUserGroup(p.Key, rankgroup.Value.group); } if (xprecord.rank < rankgroup.Key && permission.UserHasGroup(p.Key, rankgroup.Value.group)) { permission.RemoveUserGroup(p.Key, rankgroup.Value.group); } if (!config.xpLevelRanks.keepgrouponrank && xprecord.rank > rankgroup.Key && permission.UserHasGroup(p.Key, rankgroup.Value.group)) { permission.RemoveUserGroup(p.Key, rankgroup.Value.group); } } // Take Backpack Permissions if (permission.UserHasPermission(p.Key, Backpack1)) { permission.RevokeUserPermission(p.Key, Backpack1); } if (permission.UserHasPermission(p.Key, Backpack2)) { permission.RevokeUserPermission(p.Key, Backpack2); } if (permission.UserHasPermission(p.Key, Backpack3)) { permission.RevokeUserPermission(p.Key, Backpack3); } if (permission.UserHasPermission(p.Key, Backpack4)) { permission.RevokeUserPermission(p.Key, Backpack4); } if (permission.UserHasPermission(p.Key, Backpack5)) { permission.RevokeUserPermission(p.Key, Backpack5); } if (permission.UserHasPermission(p.Key, Backpack6)) { permission.RevokeUserPermission(p.Key, Backpack6); } if (permission.UserHasPermission(p.Key, Backpack7)) { permission.RevokeUserPermission(p.Key, Backpack7); } // Take Archery Permissions if (permission.UserHasPermission(p.Key, ArcheryNovice)) { permission.RevokeUserPermission(p.Key, ArcheryNovice); } if (permission.UserHasPermission(p.Key, ArcheryAdept)) { permission.RevokeUserPermission(p.Key, ArcheryAdept); } if (permission.UserHasPermission(p.Key, ArcheryMaster)) { permission.RevokeUserPermission(p.Key, ArcheryMaster); } // Take Wizardry Permissions if (permission.UserHasPermission(p.Key, WizardryNovice)) { permission.RevokeUserPermission(p.Key, WizardryNovice); } if (permission.UserHasPermission(p.Key, WizardryAdept)) { permission.RevokeUserPermission(p.Key, WizardryAdept); } if (permission.UserHasPermission(p.Key, WizardryMaster)) { permission.RevokeUserPermission(p.Key, WizardryMaster); } // Take Pet Permissions permission.RevokeUserPermission(p.Key, TameChicken); permission.RevokeUserPermission(p.Key, TameBoar); permission.RevokeUserPermission(p.Key, TameStag); permission.RevokeUserPermission(p.Key, TameWolf); permission.RevokeUserPermission(p.Key, TameBear); // Run Level Up to Recalculate Players Data if (!reset) { GainExpAdminFix(p.Key, xprecord.trueexperience, xprecord.trueexperience, true); } var selectplayer = BasePlayer.FindByID(Convert.ToUInt64(p.Key)); if (selectplayer != null) { LiveStats(selectplayer, true); } } player.ChatMessage(XPLang("adminfixplayers", player.UserIDString)); } private void PlayerFixData(BasePlayer player, bool reset = false) { if (player == null) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; // Check True experience before fixing data if (config.xpLevelRanks.enableresetranks && !xprecord.DisableRank) { if (xprecord.trueexperience <= 0 || xprecord.trueexperience < xprecord.experience) { xprecord.trueexperience = (int)xprecord.experience; } } if (!player.IsAdmin && !permission.UserHasPermission(player.UserIDString, Admin) && config.defaultOptions.disableplayerfixdata) { player.ChatMessage(XPLang("fixdatadisabled", player.UserIDString)); return; } int timer; DateTime resettimedata = xprecord.playerfixdata.AddMinutes(config.defaultOptions.playerfixdatatimer); TimeSpan interval = resettimedata - DateTime.Now; timer = (int)interval.TotalMinutes; if (config.defaultOptions.bypassadminreset && player.IsAdmin && permission.UserHasPermission(player.UserIDString, Admin)) { timer = 0; } if (timer > 0) { player.ChatMessage(XPLang("resettimerdata", player.UserIDString, timer)); return; } // Reset Level, Required XP & Stat/Skill Points if (!reset) { xprecord.rank = 0; xprecord.truelevel = 0; } xprecord.level = 0; xprecord.experience = 0; xprecord.requiredxp = config.xpLevel.levelstart; xprecord.statpoint = 0; xprecord.skillpoint = 0; // Reset health if needed before removing points if (xprecord.Might >= 1) { // Max Health double armor = (xprecord.Might * config.might.armor) * 100; double newmaxhealth = player._maxHealth - armor; // Change Max Health if (newmaxhealth < 100) { player._maxHealth = 100; } else { player._maxHealth = (float)newmaxhealth; } // Player Current Health double defaulthealth = 100; double teahealth = 100; bool teamodified = false; double healthdifference = 0; if (GetTeaCooldown(player) != 0) { // Check for Tea Modifier if (TeaModifiers != null && xprecord.teatype != "none") { teahealth = defaulthealth + TeaModifiers.Call("GetTeaValue", player, xprecord.teatype, Modifier.ModifierType.Max_Health) * 100; teamodified = true; } switch (GetTeaTypes(player)) { case "maxhealthtea": if (!teamodified) { teahealth = defaulthealth + 5; } break; case "maxhealthtea.advanced": if (!teamodified) { teahealth = defaulthealth + 12.5; } break; case "maxhealthtea.pure": if (!teamodified) { teahealth = defaulthealth + 20; } break; } } if (player._health > teahealth) { healthdifference = player._health - teahealth; } player._health -= (float)healthdifference; } // Reset Stat Levels xprecord.Mentality = 0; xprecord.Dexterity = 0; xprecord.Might = 0; xprecord.Captaincy = 0; xprecord.Weaponry = 0; // Reset Stat Spent Points xprecord.MentalityP = 0; xprecord.DexterityP = 0; xprecord.MightP = 0; xprecord.CaptaincyP = 0; xprecord.WeaponryP = 0; // Reset Skill Levels xprecord.WoodCutter = 0; xprecord.Smithy = 0; xprecord.Miner = 0; xprecord.Forager = 0; xprecord.Hunter = 0; xprecord.Fisher = 0; xprecord.Crafter = 0; xprecord.Framer = 0; xprecord.Medic = 0; xprecord.Scavenger = 0; xprecord.Electrician = 0; xprecord.Tamer = 0; // Reset Skill Spents Points xprecord.WoodCutterP = 0; xprecord.SmithyP = 0; xprecord.MinerP = 0; xprecord.ForagerP = 0; xprecord.HunterP = 0; xprecord.FisherP = 0; xprecord.CrafterP = 0; xprecord.FramerP = 0; xprecord.MedicP = 0; xprecord.ScavengerP = 0; xprecord.ElectricianP = 0; xprecord.TamerP = 0; // Reset calories/hydration if needed if (player.metabolism.calories.max > 500) { player.metabolism.calories.max = 500; } if (player.metabolism.hydration.max > 250) { player.metabolism.hydration.max = 250; } // Check/Reset RankGroup permissions RankCheck(player); // Backpack Check if (Backpacks != null && config.backpacksmod.enablebackpacks) { BackPackChecks(player, config.backpacksmod.statorskill, true); } // Archery Check if (Archery != null && config.archerymod.enablearchery) { ArcheryChecks(player, config.archerymod.statorskill, true); } // Wizardry Check if (Wizardry != null && config.wizardrymod.enablewizardry) { WizardryChecks(player, config.archerymod.statorskill, true); } // Check/Reset Tamer permissions PetChecks(player, true); // Set LiveUI Location to Default xprecord.UILocation = config.defaultOptions.liveuistatslocation; // Timer xprecord.playerfixdata = DateTime.Now; // Run Level Up to Recalculate Players Data if (!reset) { GainExpAdmin(player, xprecord.trueexperience, xprecord.trueexperience, true); } // Update Live UI LiveStats(player, true); // Notify Players player.ChatMessage(XPLang("playerfixdata", player.UserIDString)); } private void PlayerReset(BasePlayer player) { if (player == null) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; // Reset Level, Required XP & Stat/Skill Points xprecord.rank = 0; xprecord.truelevel = 0; xprecord.trueexperience = 0; xprecord.level = 0; xprecord.experience = 0; xprecord.requiredxp = config.xpLevel.levelstart; xprecord.statpoint = 0; xprecord.skillpoint = 0; // Reset health if needed before removing points if (xprecord.Might >= 1) { // Max Health double armor = (xprecord.Might * config.might.armor) * 100; double newmaxhealth = player._maxHealth - armor; // Change Max Health if (newmaxhealth < 100) { player._maxHealth = 100; } else { player._maxHealth = (float)newmaxhealth; } // Player Current Health double defaulthealth = 100; double teahealth = 100; bool teamodified = false; double healthdifference = 0; if (GetTeaCooldown(player) != 0) { // Check for Tea Modifier if (TeaModifiers != null && xprecord.teatype != "none") { teahealth = defaulthealth + TeaModifiers.Call("GetTeaValue", player, xprecord.teatype, Modifier.ModifierType.Max_Health) * 100; teamodified = true; } switch (GetTeaTypes(player)) { case "maxhealthtea": if (!teamodified) { teahealth = defaulthealth + 5; } break; case "maxhealthtea.advanced": if (!teamodified) { teahealth = defaulthealth + 12.5; } break; case "maxhealthtea.pure": if (!teamodified) { teahealth = defaulthealth + 20; } break; } } if (player._health > teahealth) { healthdifference = player._health - teahealth; } player._health -= (float)healthdifference; } // Reset Stat Levels xprecord.Mentality = 0; xprecord.Dexterity = 0; xprecord.Might = 0; xprecord.Captaincy = 0; xprecord.Weaponry = 0; // Reset Stat Spent Points xprecord.MentalityP = 0; xprecord.DexterityP = 0; xprecord.MightP = 0; xprecord.CaptaincyP = 0; xprecord.WeaponryP = 0; // Reset Skill Levels xprecord.WoodCutter = 0; xprecord.Smithy = 0; xprecord.Miner = 0; xprecord.Forager = 0; xprecord.Hunter = 0; xprecord.Fisher = 0; xprecord.Crafter = 0; xprecord.Framer = 0; xprecord.Medic = 0; xprecord.Scavenger = 0; xprecord.Electrician = 0; xprecord.Tamer = 0; // Reset Skill Spents Points xprecord.WoodCutterP = 0; xprecord.SmithyP = 0; xprecord.MinerP = 0; xprecord.ForagerP = 0; xprecord.HunterP = 0; xprecord.FisherP = 0; xprecord.CrafterP = 0; xprecord.FramerP = 0; xprecord.MedicP = 0; xprecord.ScavengerP = 0; xprecord.ElectricianP = 0; xprecord.TamerP = 0; // Harvest Reset xprecord.Wood = 0; xprecord.Stone = 0; xprecord.Metal = 0; xprecord.Sulfur = 0; xprecord.Cactus = 0; xprecord.Berries = 0; xprecord.Pumpkin = 0; xprecord.Potato = 0; xprecord.Mushroom = 0; xprecord.Hemp = 0; xprecord.Seed = 0; // Reset calories/hydration if needed if (player.metabolism.calories.max > 500) { player.metabolism.calories.max = 500; } if (player.metabolism.hydration.max > 250) { player.metabolism.hydration.max = 250; } // Check/Reset Tamer permissions RankCheck(player, true); // Backpack Check if (Backpacks != null && config.backpacksmod.enablebackpacks) { BackPackChecks(player, config.backpacksmod.statorskill, true); } // Archery Check if (Archery != null && config.archerymod.enablearchery) { ArcheryChecks(player, config.archerymod.statorskill, true); } // Wizardry Check if (Wizardry != null && config.wizardrymod.enablewizardry) { WizardryChecks(player, config.archerymod.statorskill, true); } // Check/Reset Tamer permissions PetChecks(player, true); // Set LiveUI Location to Default xprecord.UILocation = config.defaultOptions.liveuistatslocation; // Update Live UI LiveStats(player, true); // Notify Players player.ChatMessage(XPLang("xpresetplayer", player.UserIDString)); } private void HarvestReset(BasePlayer player) { if (player == null) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; xprecord.Wood = 0; xprecord.Stone = 0; xprecord.Metal = 0; xprecord.Sulfur = 0; xprecord.Cactus = 0; xprecord.Berries = 0; xprecord.Pumpkin = 0; xprecord.Potato = 0; xprecord.Mushroom = 0; xprecord.Hemp = 0; xprecord.Seed = 0; player.ChatMessage(XPLang("playerharvestreset", player.UserIDString)); } private void SelectedPlayerReset(BasePlayer player, BasePlayer selectplayer) { if (player == null || selectplayer == null) return; XPRecord xprecord = GetXPRecord(selectplayer); if (xprecord == null) return; // Reset Level, Required XP & Stat/Skill Points xprecord.rank = 0; xprecord.truelevel = 0; xprecord.trueexperience = 0; xprecord.level = 0; xprecord.experience = 0; xprecord.requiredxp = config.xpLevel.levelstart; xprecord.statpoint = 0; xprecord.skillpoint = 0; // Reset health if needed before removing points if (xprecord.Might >= 1) { // Max Health double armor = (xprecord.Might * config.might.armor) * 100; double newmaxhealth = selectplayer._maxHealth - armor; // Change Max Health if (newmaxhealth < 100) { selectplayer._maxHealth = 100; } else { selectplayer._maxHealth = (float)newmaxhealth; } // Player Current Health double defaulthealth = 100; double teahealth = 100; bool teamodified = false; double healthdifference = 0; if (GetTeaCooldown(selectplayer) != 0) { // Check for Tea Modifier if (TeaModifiers != null && xprecord.teatype != "none") { teahealth = defaulthealth + TeaModifiers.Call("GetTeaValue", selectplayer, xprecord.teatype, Modifier.ModifierType.Max_Health) * 100; teamodified = true; } switch (GetTeaTypes(selectplayer)) { case "maxhealthtea": if (!teamodified) { teahealth = defaulthealth + 5; } break; case "maxhealthtea.advanced": if (!teamodified) { teahealth = defaulthealth + 12.5; } break; case "maxhealthtea.pure": if (!teamodified) { teahealth = defaulthealth + 20; } break; } } if (selectplayer._health > teahealth) { healthdifference = selectplayer._health - teahealth; } selectplayer._health -= (float)healthdifference; } // Reset Stat Levels xprecord.Mentality = 0; xprecord.Dexterity = 0; xprecord.Might = 0; xprecord.Captaincy = 0; xprecord.Weaponry = 0; // Reset Stat Spent Points xprecord.MentalityP = 0; xprecord.DexterityP = 0; xprecord.MightP = 0; xprecord.CaptaincyP = 0; xprecord.WeaponryP = 0; // Reset Skill Levels xprecord.WoodCutter = 0; xprecord.Smithy = 0; xprecord.Miner = 0; xprecord.Forager = 0; xprecord.Hunter = 0; xprecord.Fisher = 0; xprecord.Crafter = 0; xprecord.Framer = 0; xprecord.Medic = 0; xprecord.Scavenger = 0; xprecord.Electrician = 0; xprecord.Tamer = 0; // Reset Skill Spents Points xprecord.WoodCutterP = 0; xprecord.SmithyP = 0; xprecord.MinerP = 0; xprecord.ForagerP = 0; xprecord.HunterP = 0; xprecord.FisherP = 0; xprecord.CrafterP = 0; xprecord.FramerP = 0; xprecord.MedicP = 0; xprecord.ScavengerP = 0; xprecord.ElectricianP = 0; xprecord.TamerP = 0; // Harvest Reset xprecord.Wood = 0; xprecord.Stone = 0; xprecord.Metal = 0; xprecord.Sulfur = 0; xprecord.Cactus = 0; xprecord.Berries = 0; xprecord.Pumpkin = 0; xprecord.Potato = 0; xprecord.Mushroom = 0; xprecord.Corn = 0; xprecord.Hemp = 0; xprecord.Seed = 0; // Reset calories/hydration if needed if (selectplayer.metabolism.calories.max > 500) { selectplayer.metabolism.calories.max = 500; } if (selectplayer.metabolism.hydration.max > 250) { selectplayer.metabolism.hydration.max = 250; } // Check/Reset Tamer permissions RankCheck(selectplayer, true); // Backpack Check if (Backpacks != null && config.backpacksmod.enablebackpacks) { BackPackChecks(selectplayer, config.backpacksmod.statorskill, true); } // Archery Check if (Archery != null && config.archerymod.enablearchery) { ArcheryChecks(selectplayer, config.archerymod.statorskill, true); } // Wizardry Check if (Wizardry != null && config.wizardrymod.enablewizardry) { WizardryChecks(selectplayer, config.archerymod.statorskill, true); } // Check/Reset Tamer permissions PetChecks(selectplayer, true); // Set LiveUI Location to Default xprecord.UILocation = config.defaultOptions.liveuistatslocation; // Update Live UI LiveStats(selectplayer, true); // Notify Players selectplayer.ChatMessage(XPLang("xpresetplayer", selectplayer.UserIDString)); player.ChatMessage(XPLang("xpresetselectedplayer", player.UserIDString, xprecord.displayname)); } private void SelectedPlayerResetConsole(BasePlayer selectplayer) { if (selectplayer == null) return; XPRecord xprecord = GetXPRecord(selectplayer); if (xprecord == null) return; // Reset Level, Required XP & Stat/Skill Points xprecord.rank = 0; xprecord.truelevel = 0; xprecord.trueexperience = 0; xprecord.level = 0; xprecord.experience = 0; xprecord.requiredxp = config.xpLevel.levelstart; xprecord.statpoint = 0; xprecord.skillpoint = 0; // Reset health if needed before removing points if (xprecord.Might >= 1) { // Max Health double armor = (xprecord.Might * config.might.armor) * 100; double newmaxhealth = selectplayer._maxHealth - armor; // Change Max Health if (newmaxhealth < 100) { selectplayer._maxHealth = 100; } else { selectplayer._maxHealth = (float)newmaxhealth; } // Player Current Health double defaulthealth = 100; double teahealth = 100; bool teamodified = false; double healthdifference = 0; if (GetTeaCooldown(selectplayer) != 0) { // Check for Tea Modifier if (TeaModifiers != null && xprecord.teatype != "none") { teahealth = defaulthealth + TeaModifiers.Call("GetTeaValue", selectplayer, xprecord.teatype, Modifier.ModifierType.Max_Health) * 100; teamodified = true; } switch (GetTeaTypes(selectplayer)) { case "maxhealthtea": if (!teamodified) { teahealth = defaulthealth + 5; } break; case "maxhealthtea.advanced": if (!teamodified) { teahealth = defaulthealth + 12.5; } break; case "maxhealthtea.pure": if (!teamodified) { teahealth = defaulthealth + 20; } break; } } if (selectplayer._health > teahealth) { healthdifference = selectplayer._health - teahealth; } selectplayer._health -= (float)healthdifference; } // Reset Stat Levels xprecord.Mentality = 0; xprecord.Dexterity = 0; xprecord.Might = 0; xprecord.Captaincy = 0; xprecord.Weaponry = 0; // Reset Stat Spent Points xprecord.MentalityP = 0; xprecord.DexterityP = 0; xprecord.MightP = 0; xprecord.CaptaincyP = 0; xprecord.WeaponryP = 0; // Reset Skill Levels xprecord.WoodCutter = 0; xprecord.Smithy = 0; xprecord.Miner = 0; xprecord.Forager = 0; xprecord.Hunter = 0; xprecord.Fisher = 0; xprecord.Crafter = 0; xprecord.Framer = 0; xprecord.Medic = 0; xprecord.Scavenger = 0; xprecord.Electrician = 0; xprecord.Tamer = 0; // Reset Skill Spents Points xprecord.WoodCutterP = 0; xprecord.SmithyP = 0; xprecord.MinerP = 0; xprecord.ForagerP = 0; xprecord.HunterP = 0; xprecord.FisherP = 0; xprecord.CrafterP = 0; xprecord.FramerP = 0; xprecord.MedicP = 0; xprecord.ScavengerP = 0; xprecord.ElectricianP = 0; xprecord.TamerP = 0; // Harvest Reset xprecord.Wood = 0; xprecord.Stone = 0; xprecord.Metal = 0; xprecord.Sulfur = 0; xprecord.Cactus = 0; xprecord.Berries = 0; xprecord.Pumpkin = 0; xprecord.Potato = 0; xprecord.Mushroom = 0; xprecord.Corn = 0; xprecord.Hemp = 0; xprecord.Seed = 0; // Reset calories/hydration if needed if (selectplayer.metabolism.calories.max > 500) { selectplayer.metabolism.calories.max = 500; } if (selectplayer.metabolism.hydration.max > 250) { selectplayer.metabolism.hydration.max = 250; } // Check/Reset Tamer permissions RankCheck(selectplayer, true); // Backpack Check if (Backpacks != null && config.backpacksmod.enablebackpacks) { BackPackChecks(selectplayer, config.backpacksmod.statorskill, true); } // Archery Check if (Archery != null && config.archerymod.enablearchery) { ArcheryChecks(selectplayer, config.archerymod.statorskill, true); } // Wizardry Check if (Wizardry != null && config.wizardrymod.enablewizardry) { WizardryChecks(selectplayer, config.archerymod.statorskill, true); } // Check/Reset Tamer permissions PetChecks(selectplayer, true); // Set LiveUI Location to Default xprecord.UILocation = config.defaultOptions.liveuistatslocation; // Update Live UI LiveStats(selectplayer, true); // Notify Players selectplayer.ChatMessage(XPLang("xpresetplayer", selectplayer.UserIDString)); } private void SelectedHarvestReset(BasePlayer player, BasePlayer selectplayer) { if (player == null || selectplayer == null) return; XPRecord xprecord = GetXPRecord(selectplayer); if (xprecord == null) return; xprecord.Wood = 0; xprecord.Stone = 0; xprecord.Metal = 0; xprecord.Sulfur = 0; xprecord.Cactus = 0; xprecord.Berries = 0; xprecord.Pumpkin = 0; xprecord.Potato = 0; xprecord.Mushroom = 0; xprecord.Corn = 0; xprecord.Hemp = 0; xprecord.Seed = 0; selectplayer.ChatMessage(XPLang("playerharvestreset", selectplayer.UserIDString)); player.ChatMessage(XPLang("selectedplayerharvestreset", player.UserIDString, xprecord.displayname)); } private void SelectedLevelReset(BasePlayer player, BasePlayer selectplayer) { if (player == null || selectplayer == null) return; XPRecord xprecord = GetXPRecord(selectplayer); if (xprecord == null) return; xprecord.trueexperience -= (int)xprecord.experience; xprecord.truelevel -= (int)xprecord.level; xprecord.level = 0; xprecord.experience = 0; xprecord.requiredxp = config.xpLevel.levelstart; selectplayer.ChatMessage(XPLang("playerlevelreset", selectplayer.UserIDString)); player.ChatMessage(XPLang("selectedplayerlevelreset", player.UserIDString, xprecord.displayname)); PlayerFixData(selectplayer, true); } private void SelectedRankReset(BasePlayer player, BasePlayer selectplayer) { if (player == null || selectplayer == null) return; XPRecord xprecord = GetXPRecord(selectplayer); if (xprecord == null) return; xprecord.rank = 0; xprecord.truelevel = (int)xprecord.level; xprecord.trueexperience = (int)xprecord.experience; selectplayer.ChatMessage(XPLang("playerrankreset", selectplayer.UserIDString)); player.ChatMessage(XPLang("selectedplayerrankreset", player.UserIDString, xprecord.displayname)); PlayerFixData(selectplayer); } private void PlayerAllRankReset(BasePlayer player) { if (!player.IsAdmin && !permission.UserHasPermission(player.UserIDString, Admin)) return; foreach (var p in _xperienceCache) { if (!p.Key.IsSteamId()) continue; var selectplayer = BasePlayer.FindByID(Convert.ToUInt64(p.Key)); if (selectplayer != null) { SelectedRankReset(player, selectplayer); continue; } XPRecord xprecord = GetPlayerRecord(p.Key); xprecord.rank = 0; xprecord.truelevel = (int)xprecord.level; xprecord.trueexperience = (int)xprecord.experience; } PlayerFixDataAll(player); player.ChatMessage(XPLang("allplayerrankreset", player.UserIDString)); } private void PlayerAllLevelReset(BasePlayer player) { if (!player.IsAdmin && !permission.UserHasPermission(player.UserIDString, Admin)) return; foreach (var p in _xperienceCache) { if (!p.Key.IsSteamId()) continue; XPRecord xprecord = GetPlayerRecord(p.Key); xprecord.trueexperience -= (int)xprecord.experience; xprecord.truelevel -= (int)xprecord.level; xprecord.level = 0; xprecord.experience = 0; xprecord.requiredxp = config.xpLevel.levelstart; } PlayerFixDataAll(player, true); player.ChatMessage(XPLang("allplayerlevelreset", player.UserIDString)); } private bool IsNight() { var dateTime = TOD_Sky.Instance.Cycle.DateTime; return dateTime.Hour >= config.nightBonus.StartTime || dateTime.Hour <= config.nightBonus.EndTime; } private void KRBonus(BasePlayer player, string KillType, int reqkills, double bonus, int bonusend, bool enablemultibonus, string multibonustype) { var playerid = player.userID.ToString(); //XPRecord xprecord = GetXPRecord(player); int KillAmount = reqkills; int BonusEnd = bonusend; int GetKillRecord = KillRecords.Call("GetKillRecord", playerid, KillType.ToLower()); if (GetKillRecord == KillAmount) { GainExp(player, bonus); player.ChatMessage(XPLang("bonus", player.UserIDString, bonus, KillAmount, KillType)); } else { if (enablemultibonus) { int MultipleKA = KillAmount; double Multibonus = bonus; for (int k = 0; k < BonusEnd; ++k) { MultipleKA += reqkills + k / BonusEnd; if (multibonustype == "increase") { Multibonus += bonus + k / BonusEnd; } if (MultipleKA >= BonusEnd) return; if (GetKillRecord == MultipleKA) { GainExp(player, Multibonus); player.ChatMessage(XPLang("bonus", player.UserIDString, Multibonus, MultipleKA, KillType)); } } } } } private void XPTeams(BasePlayer player, double e, string type) { if (player == null || !player.userID.IsSteamId() || player.Team == null || player.Team.members.Count <= 1) return; foreach (var team in player.Team.members) { if (team == player.userID) continue; BasePlayer teammember = RelationshipManager.FindByID(team); if (teammember == null || !teammember.IsConnected || Vector3.Distance(player.transform.position, teammember.transform.position) >= config.xpTeams.teamdistance) continue; XPRecord xprecord = GetXPRecord(teammember); if (type == "addxp") { double addxp = config.xpTeams.teamxpgainamount * e; if (addxp < 1) { addxp = 1; } xprecord.experience = (int)xprecord.experience + addxp; if (xprecord.experience >= xprecord.requiredxp) { LvlUp(teammember, 0, 0); } LiveStats(teammember, true); if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.xpgainloss && addxp != 0) { UINotify.Call("SendNotify", teammember, config.UiNotifier.xpgainlosstype, XPLang("uinotify_xpgain", teammember.UserIDString, Math.Round(addxp))); } } if (type == "takexp") { if (e < 1) { e = 1; } double takexp = config.xpTeams.teamxplossamount * e; if (takexp < 1) { takexp = 1; } double newxp = xprecord.experience - takexp; double nextlevel = xprecord.requiredxp; // Make sure XP does not go negative if (newxp <= 0) { newxp = 0; } xprecord.experience = (int)newxp; if (nextlevel == config.xpLevel.levelstart) return; double prevlevel = xprecord.requiredxp - (xprecord.level * config.xpLevel.levelmultiplier); if (xprecord.experience < prevlevel) { LvlDown(teammember); } LiveStats(teammember, true); // UINotify if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.xpgainloss) { UINotify.Call("SendNotify", teammember, config.UiNotifier.xpgainlosstype, XPLang("uinotify_xploss", teammember.UserIDString, Math.Round(takexp))); } } } } private void XPClans(BasePlayer player, double e, string type) { foreach (var allplayer in BasePlayer.activePlayerList) { bool isinclan = Clans.Call("IsClanMember", player.UserIDString, allplayer.UserIDString); if (isinclan && (allplayer != player)) { XPRecord xprecord = GetXPRecord(allplayer); if (xprecord == null) return; switch (type) { case "addxp": double addxp = config.xpclans.clanbonusamount * e; if (addxp < 1) { addxp = 1; } xprecord.experience = (int)xprecord.experience + addxp; if (xprecord.experience >= xprecord.requiredxp) { LvlUp(allplayer, 0, 0); } LiveStats(allplayer, true); if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.xpgainloss && addxp != 0) { UINotify.Call("SendNotify", allplayer, config.UiNotifier.xpgainlosstype, XPLang("uinotify_xpgain", allplayer.UserIDString, Math.Round(addxp))); } break; case "takexp": if (e < 1) { e = 1; } double takexp = config.xpclans.clanreductionamount * e; if (takexp < 1) { takexp = 1; } double newxp = xprecord.experience - takexp; double nextlevel = xprecord.requiredxp; // Make sure XP does not go negative if (newxp <= 0) { newxp = 0; } xprecord.experience = (int)newxp; if (nextlevel == config.xpLevel.levelstart) return; double prevlevel = xprecord.requiredxp - (xprecord.level * config.xpLevel.levelmultiplier); if (xprecord.experience < prevlevel) { LvlDown(allplayer); } LiveStats(allplayer, true); // UINotify if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.xpgainloss) { UINotify.Call("SendNotify", allplayer, config.UiNotifier.xpgainlosstype, XPLang("uinotify_xploss", allplayer.UserIDString, Math.Round(takexp))); } break; } } } } private void HarvestRecord(BasePlayer player, string item, int amount) { if (player == null || !player.userID.IsSteamId()) return; XPRecord xprecord = GetXPRecord(player); switch (item) { case "wood": xprecord.Wood += amount; break; case "stone": xprecord.Stone += amount; break; case "metal": xprecord.Metal += amount; break; case "sulfur": xprecord.Sulfur += amount; break; case "cactus": xprecord.Cactus += amount; break; case "berries": xprecord.Berries += amount; break; case "pumpkin": xprecord.Pumpkin += amount; break; case "potato": xprecord.Potato += amount; break; case "corn": xprecord.Corn += amount; break; case "mushroom": xprecord.Mushroom += amount; break; case "hemp": xprecord.Hemp += amount; break; case "seed": xprecord.Seed += amount; break; } } #endregion #region Archery public const string ArcheryNovice = "archery.novice"; public const string ArcheryAdept = "archery.adept"; public const string ArcheryMaster = "archery.master"; private void ArcheryChecks(BasePlayer player, string type = null, bool reset = false) { if (player == null || !player.userID.IsSteamId() || !config.archerymod.enablearchery) return; XPRecord xprecord = GetXPRecord(player); // Reset and Remove all Archery Permissions if (reset) { if (permission.UserHasPermission(player.UserIDString, ArcheryNovice)) { permission.RevokeUserPermission(player.UserIDString, ArcheryNovice); player.ChatMessage(XPLang("archeryrevokenovice", player.UserIDString)); } if (permission.UserHasPermission(player.UserIDString, ArcheryAdept)) { permission.RevokeUserPermission(player.UserIDString, ArcheryAdept); player.ChatMessage(XPLang("archeryrevokeadept", player.UserIDString)); } if (permission.UserHasPermission(player.UserIDString, ArcheryMaster)) { permission.RevokeUserPermission(player.UserIDString, ArcheryMaster); player.ChatMessage(XPLang("archeryrevokemaster", player.UserIDString)); } return; } // Stat/Skill Control if (type == null) return; string statorskill = config.archerymod.statorskill; // Rank & Stat/Skill Level Checks int rank = xprecord.rank; int skilllevel = 0; switch (statorskill) { case "Mentality": skilllevel = xprecord.Mentality; break; case "Dexterity": skilllevel = xprecord.Dexterity; break; case "Might": skilllevel = xprecord.Might; break; case "Captaincy": skilllevel = xprecord.Captaincy; break; case "WoodCutter": skilllevel = xprecord.WoodCutter; break; case "Smithy": skilllevel = xprecord.Smithy; break; case "Miner": skilllevel = xprecord.Miner; break; case "Forager": skilllevel = xprecord.Forager; break; case "Hunter": skilllevel = xprecord.Hunter; break; case "Fisher": skilllevel = xprecord.Fisher; break; case "Crafter": skilllevel = xprecord.Crafter; break; case "Framer": skilllevel = xprecord.Framer; break; case "Medic": skilllevel = xprecord.Medic; break; case "Scavenger": skilllevel = xprecord.Scavenger; break; } if (statorskill.ToLower() == type.ToLower()) { // Archery Novice if (((config.archerymod.rankrequired && rank >= config.archerymod.ranklevel) || !config.archerymod.rankrequired) && (skilllevel == config.archerymod.novicelevel && skilllevel < config.archerymod.adeptlevel) && !permission.UserHasPermission(player.UserIDString, ArcheryNovice)) { permission.GrantUserPermission(player.UserIDString, ArcheryNovice, Archery); player.ChatMessage(XPLang("archerygrantnovice", player.UserIDString)); } if ((skilllevel < config.archerymod.novicelevel || (config.archerymod.rankrequired && rank < config.archerymod.ranklevel)) && permission.UserHasPermission(player.UserIDString, ArcheryNovice)) { permission.RevokeUserPermission(player.UserIDString, ArcheryNovice); player.ChatMessage(XPLang("archeryrevokenovice", player.UserIDString)); } // Archery Adept if (((config.archerymod.rankrequired && rank >= config.archerymod.ranklevel) || !config.archerymod.rankrequired) && (skilllevel == config.archerymod.adeptlevel && skilllevel < config.archerymod.masterlevel) && !permission.UserHasPermission(player.UserIDString, ArcheryAdept)) { if (permission.UserHasPermission(player.UserIDString, ArcheryNovice)) { permission.RevokeUserPermission(player.UserIDString, ArcheryNovice); } permission.GrantUserPermission(player.UserIDString, ArcheryAdept, Archery); player.ChatMessage(XPLang("archerygrantadept", player.UserIDString)); } if ((skilllevel < config.archerymod.adeptlevel || (config.archerymod.rankrequired && rank < config.archerymod.ranklevel)) && permission.UserHasPermission(player.UserIDString, ArcheryAdept)) { permission.RevokeUserPermission(player.UserIDString, ArcheryAdept); player.ChatMessage(XPLang("archeryrevokeadept", player.UserIDString)); } // Archery Master if (((config.archerymod.rankrequired && rank >= config.archerymod.ranklevel) || !config.archerymod.rankrequired) && skilllevel == config.archerymod.masterlevel && !permission.UserHasPermission(player.UserIDString, ArcheryMaster)) { if (permission.UserHasPermission(player.UserIDString, ArcheryAdept)) { permission.RevokeUserPermission(player.UserIDString, ArcheryAdept); } permission.GrantUserPermission(player.UserIDString, ArcheryMaster, Archery); player.ChatMessage(XPLang("archerygrantmaster", player.UserIDString)); } if ((skilllevel < config.archerymod.masterlevel || (config.archerymod.rankrequired && rank < config.archerymod.ranklevel)) && permission.UserHasPermission(player.UserIDString, ArcheryMaster)) { permission.RevokeUserPermission(player.UserIDString, ArcheryMaster); player.ChatMessage(XPLang("archeryrevokemaster", player.UserIDString)); } } } #endregion #region Wizardry public const string WizardryNovice = "wizardry.novice"; public const string WizardryAdept = "wizardry.adept"; public const string WizardryMaster = "wizardry.master"; private void WizardryChecks(BasePlayer player, string type = null, bool reset = false) { if (player == null || !player.userID.IsSteamId() || !config.wizardrymod.enablewizardry) return; XPRecord xprecord = GetXPRecord(player); // Reset and Remove all Wizardry Permissions if (reset) { if (permission.UserHasPermission(player.UserIDString, WizardryNovice)) { permission.RevokeUserPermission(player.UserIDString, WizardryNovice); player.ChatMessage(XPLang("wizardryrevokenovice", player.UserIDString)); } if (permission.UserHasPermission(player.UserIDString, WizardryAdept)) { permission.RevokeUserPermission(player.UserIDString, WizardryAdept); player.ChatMessage(XPLang("wizardryrevokeadept", player.UserIDString)); } if (permission.UserHasPermission(player.UserIDString, WizardryMaster)) { permission.RevokeUserPermission(player.UserIDString, WizardryMaster); player.ChatMessage(XPLang("wizardryrevokenmaster", player.UserIDString)); } return; } // Stat/Skill Control if (type == null) return; string statorskill = config.wizardrymod.statorskill; // Rank & Stat/Skill Level Checks int rank = xprecord.rank; int skilllevel = 0; switch (statorskill) { case "Mentality": skilllevel = xprecord.Mentality; break; case "Dexterity": skilllevel = xprecord.Dexterity; break; case "Might": skilllevel = xprecord.Might; break; case "Captaincy": skilllevel = xprecord.Captaincy; break; case "WoodCutter": skilllevel = xprecord.WoodCutter; break; case "Smithy": skilllevel = xprecord.Smithy; break; case "Miner": skilllevel = xprecord.Miner; break; case "Forager": skilllevel = xprecord.Forager; break; case "Hunter": skilllevel = xprecord.Hunter; break; case "Fisher": skilllevel = xprecord.Fisher; break; case "Crafter": skilllevel = xprecord.Crafter; break; case "Framer": skilllevel = xprecord.Framer; break; case "Medic": skilllevel = xprecord.Medic; break; case "Scavenger": skilllevel = xprecord.Scavenger; break; } if (statorskill.ToLower() == type.ToLower()) { // Wizardry Novice if (((config.wizardrymod.rankrequired && rank >= config.wizardrymod.ranklevel) || !config.wizardrymod.rankrequired) && (skilllevel == config.wizardrymod.novicelevel && skilllevel < config.wizardrymod.adeptlevel) && !permission.UserHasPermission(player.UserIDString, WizardryNovice)) { permission.GrantUserPermission(player.UserIDString, WizardryNovice, Wizardry); player.ChatMessage(XPLang("wizardrygrantnovice", player.UserIDString)); } if ((skilllevel < config.wizardrymod.novicelevel || (config.wizardrymod.rankrequired && rank < config.wizardrymod.ranklevel)) && permission.UserHasPermission(player.UserIDString, WizardryNovice)) { permission.RevokeUserPermission(player.UserIDString, WizardryNovice); player.ChatMessage(XPLang("wizardryrevokenovice", player.UserIDString)); } // Wizardy Adept if (((config.wizardrymod.rankrequired && rank >= config.wizardrymod.ranklevel) || !config.wizardrymod.rankrequired) && (skilllevel == config.wizardrymod.adeptlevel && skilllevel < config.wizardrymod.masterlevel) && !permission.UserHasPermission(player.UserIDString, WizardryAdept)) { if (permission.UserHasPermission(player.UserIDString, WizardryNovice)) { permission.RevokeUserPermission(player.UserIDString, WizardryNovice); } permission.GrantUserPermission(player.UserIDString, WizardryAdept, Wizardry); player.ChatMessage(XPLang("wizardrygrantadept", player.UserIDString)); } if ((skilllevel < config.wizardrymod.adeptlevel || (config.wizardrymod.rankrequired && rank < config.wizardrymod.ranklevel)) && permission.UserHasPermission(player.UserIDString, WizardryAdept)) { permission.RevokeUserPermission(player.UserIDString, WizardryAdept); player.ChatMessage(XPLang("wizardryrevokeadept", player.UserIDString)); } // Wizardry Master if (((config.wizardrymod.rankrequired && rank >= config.wizardrymod.ranklevel) || !config.wizardrymod.rankrequired) && skilllevel == config.wizardrymod.masterlevel && !permission.UserHasPermission(player.UserIDString, WizardryMaster)) { if (permission.UserHasPermission(player.UserIDString, WizardryAdept)) { permission.RevokeUserPermission(player.UserIDString, WizardryAdept); } permission.GrantUserPermission(player.UserIDString, WizardryMaster, Wizardry); player.ChatMessage(XPLang("wizardrygrantmaster", player.UserIDString)); } if ((skilllevel < config.wizardrymod.masterlevel || (config.wizardrymod.rankrequired && rank < config.wizardrymod.ranklevel)) && permission.UserHasPermission(player.UserIDString, WizardryMaster)) { permission.RevokeUserPermission(player.UserIDString, WizardryMaster); player.ChatMessage(XPLang("wizardryrevokemaster", player.UserIDString)); } } } #endregion #region Pets / Personal Animal public const string Tame = "cannpc"; public const string TameChicken = "pets.chicken"; public const string TameBoar = "pets.boar"; public const string TameStag = "pets.stag"; public const string TameWolf = "pets.wolf"; public const string TameBear = "pets.bear"; public const string TamePolarBear = "pets.polarbear"; public const string PTameChicken = "personalanimal.chicken"; public const string PTameBoar = "personalanimal.boar"; public const string PTameStag = "personalanimal.stag"; public const string PTameWolf = "personalanimal.wolf"; public const string PTameBear = "personalanimal.bear"; public const string PTamePolarBear = "personalanimal.polarbear"; private void PetChecks(BasePlayer player, bool reset = false, int leveldown = 0) { if (player == null || !player.userID.IsSteamId()) return; XPRecord xprecord = GetXPRecord(player); var skilllevel = xprecord.Tamer; if (!config.tamer.enabletame) return; if (reset) { // Pets Plugin if (Pets != null) { permission.RevokeUserPermission(player.UserIDString, TameChicken); permission.RevokeUserPermission(player.UserIDString, TameBoar); permission.RevokeUserPermission(player.UserIDString, TameStag); permission.RevokeUserPermission(player.UserIDString, TameWolf); permission.RevokeUserPermission(player.UserIDString, TameBear); permission.RevokeUserPermission(player.UserIDString, TamePolarBear); } // Personal Animal Plugin if (PersonalAnimal != null) { permission.RevokeUserPermission(player.UserIDString, PTameChicken); permission.RevokeUserPermission(player.UserIDString, PTameBoar); permission.RevokeUserPermission(player.UserIDString, PTameStag); permission.RevokeUserPermission(player.UserIDString, PTameWolf); permission.RevokeUserPermission(player.UserIDString, PTameBear); permission.RevokeUserPermission(player.UserIDString, PTamePolarBear); } return; } // Pets Plugin if (Pets != null) { if (skilllevel >= config.tamer.chickenlevel && config.tamer.tamechicken && !permission.UserHasPermission(player.UserIDString, TameChicken)) { permission.GrantUserPermission(player.UserIDString, TameChicken, Pets); } if (leveldown < config.tamer.chickenlevel) { permission.RevokeUserPermission(player.UserIDString, TameChicken); } if (skilllevel >= config.tamer.boarlevel && config.tamer.tameboar && !permission.UserHasPermission(player.UserIDString, TameBoar)) { permission.GrantUserPermission(player.UserIDString, TameBoar, Pets); } if (leveldown < config.tamer.boarlevel) { permission.RevokeUserPermission(player.UserIDString, TameBoar); } if (skilllevel >= config.tamer.staglevel && config.tamer.tamestag && !permission.UserHasPermission(player.UserIDString, TameStag)) { permission.GrantUserPermission(player.UserIDString, TameStag, Pets); } if (leveldown < config.tamer.staglevel) { permission.RevokeUserPermission(player.UserIDString, TameStag); } if (skilllevel >= config.tamer.wolflevel && config.tamer.tamewolf && !permission.UserHasPermission(player.UserIDString, TameWolf)) { permission.GrantUserPermission(player.UserIDString, TameWolf, Pets); } if (leveldown < config.tamer.wolflevel) { permission.RevokeUserPermission(player.UserIDString, TameWolf); } if (skilllevel >= config.tamer.bearlevel && config.tamer.tamebear && !permission.UserHasPermission(player.UserIDString, TameBear)) { permission.GrantUserPermission(player.UserIDString, TameBear, Pets); } if (leveldown < config.tamer.bearlevel) { permission.RevokeUserPermission(player.UserIDString, TameBear); } if (skilllevel >= config.tamer.polarbearlevel && config.tamer.tamebear && !permission.UserHasPermission(player.UserIDString, TamePolarBear)) { permission.GrantUserPermission(player.UserIDString, TamePolarBear, Pets); } if (leveldown < config.tamer.polarbearlevel) { permission.RevokeUserPermission(player.UserIDString, TamePolarBear); } } // Person Animal Plugin if (PersonalAnimal != null) { if (skilllevel >= config.tamer.chickenlevel && config.tamer.tamechicken && !permission.UserHasPermission(player.UserIDString, PTameChicken)) { permission.GrantUserPermission(player.UserIDString, PTameChicken, PersonalAnimal); } if (leveldown < config.tamer.chickenlevel) { permission.RevokeUserPermission(player.UserIDString, PTameChicken); } if (skilllevel >= config.tamer.boarlevel && config.tamer.tameboar && !permission.UserHasPermission(player.UserIDString, PTameBoar)) { permission.GrantUserPermission(player.UserIDString, PTameBoar, PersonalAnimal); } if (leveldown < config.tamer.boarlevel) { permission.RevokeUserPermission(player.UserIDString, TameBoar); } if (skilllevel >= config.tamer.staglevel && config.tamer.tamestag && !permission.UserHasPermission(player.UserIDString, PTameStag)) { permission.GrantUserPermission(player.UserIDString, PTameStag, PersonalAnimal); } if (leveldown < config.tamer.staglevel) { permission.RevokeUserPermission(player.UserIDString, PTameStag); } if (skilllevel >= config.tamer.wolflevel && config.tamer.tamewolf && !permission.UserHasPermission(player.UserIDString, PTameWolf)) { permission.GrantUserPermission(player.UserIDString, PTameWolf, PersonalAnimal); } if (leveldown < config.tamer.wolflevel) { permission.RevokeUserPermission(player.UserIDString, PTameWolf); } if (skilllevel >= config.tamer.bearlevel && config.tamer.tamebear && !permission.UserHasPermission(player.UserIDString, PTameBear)) { permission.GrantUserPermission(player.UserIDString, PTameBear, PersonalAnimal); } if (leveldown < config.tamer.bearlevel) { permission.RevokeUserPermission(player.UserIDString, PTameBear); } if (skilllevel >= config.tamer.polarbearlevel && config.tamer.tamebear && !permission.UserHasPermission(player.UserIDString, PTamePolarBear)) { permission.GrantUserPermission(player.UserIDString, PTamePolarBear, PersonalAnimal); } if (leveldown < config.tamer.polarbearlevel) { permission.RevokeUserPermission(player.UserIDString, PTamePolarBear); } } } #endregion #region Backpacks public const string UseBackpack = "backpacks.use"; public const string GuiBackpack = "backpacks.gui"; public const string Backpack1 = "backpacks.use.1"; public const string Backpack2 = "backpacks.use.2"; public const string Backpack3 = "backpacks.use.3"; public const string Backpack4 = "backpacks.use.4"; public const string Backpack5 = "backpacks.use.5"; public const string Backpack6 = "backpacks.use.6"; public const string Backpack7 = "backpacks.use.7"; public const string Backpack8 = "backpacks.use.8"; private void BackPackChecks(BasePlayer player, string type = null, bool reset = false) { if (player == null || !player.userID.IsSteamId() || !config.backpacksmod.enablebackpacks) return; XPRecord xprecord = GetXPRecord(player); // Reset and remove backpack permissions if (reset) { if (permission.UserHasPermission(player.UserIDString, UseBackpack) || permission.UserHasPermission(player.UserIDString, GuiBackpack) || permission.UserHasPermission(player.UserIDString, Backpack1) || permission.UserHasPermission(player.UserIDString, Backpack2) || permission.UserHasPermission(player.UserIDString, Backpack3) || permission.UserHasPermission(player.UserIDString, Backpack4) || permission.UserHasPermission(player.UserIDString, Backpack5) || permission.UserHasPermission(player.UserIDString, Backpack6) || permission.UserHasPermission(player.UserIDString, Backpack7)) { permission.RevokeUserPermission(player.UserIDString, UseBackpack); permission.RevokeUserPermission(player.UserIDString, GuiBackpack); permission.RevokeUserPermission(player.UserIDString, Backpack1); permission.RevokeUserPermission(player.UserIDString, Backpack2); permission.RevokeUserPermission(player.UserIDString, Backpack3); permission.RevokeUserPermission(player.UserIDString, Backpack4); permission.RevokeUserPermission(player.UserIDString, Backpack5); permission.RevokeUserPermission(player.UserIDString, Backpack6); permission.RevokeUserPermission(player.UserIDString, Backpack7); permission.RevokeUserPermission(player.UserIDString, Backpack8); player.ChatMessage(XPLang("backpackrevoke", player.UserIDString)); } return; } if (type == null) return; string statorskill = config.backpacksmod.statorskill; int skilllevel = 0; switch (statorskill) { case "Mentality": skilllevel = xprecord.Mentality; break; case "Dexterity": skilllevel = xprecord.Dexterity; break; case "Might": skilllevel = xprecord.Might; break; case "Captaincy": skilllevel = xprecord.Captaincy; break; case "WoodCutter": skilllevel = xprecord.WoodCutter; break; case "Smithy": skilllevel = xprecord.Smithy; break; case "Miner": skilllevel = xprecord.Miner; break; case "Forager": skilllevel = xprecord.Forager; break; case "Hunter": skilllevel = xprecord.Hunter; break; case "Fisher": skilllevel = xprecord.Fisher; break; case "Crafter": skilllevel = xprecord.Crafter; break; case "Framer": skilllevel = xprecord.Framer; break; case "Medic": skilllevel = xprecord.Medic; break; case "Scavenger": skilllevel = xprecord.Scavenger; break; } if (statorskill.ToLower() == type.ToLower()) { // 1 Row if (skilllevel >= config.backpacksmod.backpackrow1 && skilllevel < config.backpacksmod.backpackrow2 && !permission.UserHasPermission(player.UserIDString, Backpack1)) { permission.GrantUserPermission(player.UserIDString, UseBackpack, Backpacks); permission.GrantUserPermission(player.UserIDString, GuiBackpack, Backpacks); permission.GrantUserPermission(player.UserIDString, Backpack1, Backpacks); player.ChatMessage(XPLang("backpackgrant", player.UserIDString, 1)); } if (skilllevel < config.backpacksmod.backpackrow1 && permission.UserHasPermission(player.UserIDString, Backpack1)) { permission.RevokeUserPermission(player.UserIDString, UseBackpack); permission.RevokeUserPermission(player.UserIDString, GuiBackpack); permission.RevokeUserPermission(player.UserIDString, Backpack1); player.ChatMessage(XPLang("backpackrevoke", player.UserIDString)); } // 2 Row if (skilllevel >= config.backpacksmod.backpackrow2 && skilllevel < config.backpacksmod.backpackrow3 && !permission.UserHasPermission(player.UserIDString, Backpack2)) { permission.GrantUserPermission(player.UserIDString, Backpack2, Backpacks); player.ChatMessage(XPLang("backpackgrant", player.UserIDString, 2)); } if (skilllevel < config.backpacksmod.backpackrow2 && permission.UserHasPermission(player.UserIDString, Backpack2)) { permission.RevokeUserPermission(player.UserIDString, Backpack2); player.ChatMessage(XPLang("backpackrevoke", player.UserIDString)); } // 3 Row if (skilllevel >= config.backpacksmod.backpackrow3 && skilllevel < config.backpacksmod.backpackrow4 && !permission.UserHasPermission(player.UserIDString, Backpack3)) { permission.GrantUserPermission(player.UserIDString, Backpack3, Backpacks); player.ChatMessage(XPLang("backpackgrant", player.UserIDString, 3)); } if (skilllevel < config.backpacksmod.backpackrow3 && permission.UserHasPermission(player.UserIDString, Backpack3)) { permission.RevokeUserPermission(player.UserIDString, Backpack3); player.ChatMessage(XPLang("backpackrevoke", player.UserIDString)); } // 4 Row if (skilllevel >= config.backpacksmod.backpackrow4 && skilllevel < config.backpacksmod.backpackrow5 && !permission.UserHasPermission(player.UserIDString, Backpack4)) { permission.GrantUserPermission(player.UserIDString, Backpack4, Backpacks); player.ChatMessage(XPLang("backpackgrant", player.UserIDString, 4)); } if (skilllevel < config.backpacksmod.backpackrow4 && permission.UserHasPermission(player.UserIDString, Backpack4)) { permission.RevokeUserPermission(player.UserIDString, Backpack4); player.ChatMessage(XPLang("backpackrevoke", player.UserIDString)); } // 5 Row if (skilllevel >= config.backpacksmod.backpackrow5 && skilllevel < config.backpacksmod.backpackrow6 && !permission.UserHasPermission(player.UserIDString, Backpack5)) { permission.GrantUserPermission(player.UserIDString, Backpack5, Backpacks); player.ChatMessage(XPLang("backpackgrant", player.UserIDString, 5)); } if (skilllevel < config.backpacksmod.backpackrow5 && permission.UserHasPermission(player.UserIDString, Backpack5)) { permission.RevokeUserPermission(player.UserIDString, Backpack5); player.ChatMessage(XPLang("backpackrevoke", player.UserIDString)); } // 6 Row if (skilllevel >= config.backpacksmod.backpackrow6 && skilllevel < config.backpacksmod.backpackrow7 && !permission.UserHasPermission(player.UserIDString, Backpack6)) { permission.GrantUserPermission(player.UserIDString, Backpack6, Backpacks); player.ChatMessage(XPLang("backpackgrant", player.UserIDString, 6)); } if (skilllevel < config.backpacksmod.backpackrow6 && permission.UserHasPermission(player.UserIDString, Backpack6)) { permission.RevokeUserPermission(player.UserIDString, Backpack6); player.ChatMessage(XPLang("backpackrevoke", player.UserIDString)); } // 7 Row if (skilllevel >= config.backpacksmod.backpackrow7 && skilllevel < config.backpacksmod.backpackrow8 && !permission.UserHasPermission(player.UserIDString, Backpack7)) { permission.GrantUserPermission(player.UserIDString, Backpack7, Backpacks); player.ChatMessage(XPLang("backpackgrant", player.UserIDString, 7)); } if (skilllevel < config.backpacksmod.backpackrow7 && permission.UserHasPermission(player.UserIDString, Backpack7)) { permission.RevokeUserPermission(player.UserIDString, Backpack7); player.ChatMessage(XPLang("backpackrevoke", player.UserIDString)); } // 8 Row if (skilllevel >= config.backpacksmod.backpackrow8 && !permission.UserHasPermission(player.UserIDString, Backpack8)) { permission.GrantUserPermission(player.UserIDString, Backpack8, Backpacks); player.ChatMessage(XPLang("backpackgrant", player.UserIDString, 8)); } if (skilllevel < config.backpacksmod.backpackrow8 && permission.UserHasPermission(player.UserIDString, Backpack8)) { permission.RevokeUserPermission(player.UserIDString, Backpack8); player.ChatMessage(XPLang("backpackrevoke", player.UserIDString)); } } } #endregion #region Kills/Deaths/Loot private string GetScientistType(string scientist) { string type = "scientist"; switch (scientist) { case "scientistnpc_cargo": type = "sc_cargo"; break; case "scientistnpc_heavy": type = "sc_heavy"; break; case "scientistnpc_junkpile_pistol": type = "sc_junkpile"; break; case "scientistnpc_oilrig": type = "sc_oilrig"; break; case "scientistnpc_patrol": type = "sc_patrol"; break; case "scientistnpc_peacekeeper": type = "sc_peacekeeper"; break; case "scientistnpc_roam": type = "sc_roam"; break; case "scientistnpc_full_any": type = "sc_full"; break; } return type; } private string GetLootType(string loot) { if (loot == null) loot = "lootcontainer"; string type = "lootcontainer"; switch (loot) { case "loot_barrel_1": case "lootbarrel-1": case "loot_barrel_2": case "loot-barrel-2": type = "lootbarrel"; break; case "oil_barrel": type = "oilbarrel"; break; case "vehicle_parts": type = "vehicleparts"; break; case "crate_tools": type = "toolcrate"; break; case "crate_food_1": case "crate_food_2": case "crate_normal_2_food": case "wagon_crate_normal_2_food": type = "foodcrate"; break; case "wagon_crate_normal_2_medical": case "crate_normal_2_medical": case "crate_medical": type = "medicalcrate"; break; case "crate_basic": case "crate_ammunition": case "crate_normal": case "crate_mine": case "crate_fuel": case "crate_normal_2": case "wagon_crate_normal": case "wagon_crate_normal_2": type = "normalcrate"; break; case "codelockedhackablecrate": case "codelockedhackablecrate_oilrig": type = "hackablelockedcrate"; break; case "crate_elite": type = "elitecrate"; break; case "bradley_crate": case "heli_crate": type = "lockedbyentcrate"; break; case "crate_underwater_basic": case "crate_underwater_advanced": type = "freeablelootcontainer"; break; case "giftbox_loot": type = "gift"; break; } return type; } private string GetDwellerType(string dweller) { string type = "dweller"; switch (dweller) { case "npc_tunneldweller": type = "tunneldweller"; break; case "npc_underwaterdweller": type = "underwaterdweller"; break; } return type; } private void OnLootSpawn(LootContainer container) { if (container != null && _lootCache.ContainsKey(container.net.ID)) { _lootCache[container.net.ID].id.Clear(); } } private void OnEntityDeath(BaseCombatEntity entity, HitInfo hitInfo) { // Check for null if (entity == null || hitInfo == null || hitInfo.Initiator == null) return; double addxp = 0; // Turret Kills if (hitInfo.Initiator is AutoTurret && config.xpGain.allowturretxp) { var turret = hitInfo.Initiator as AutoTurret; if (turret == null || !turret.OwnerID.IsSteamId()) return; var turretowner = FindPlayer(turret.OwnerID.ToString()); if (turretowner == null) return; GainExp(turretowner, config.xpGain.turretxp); return; } // Count Player Suicide Separately If Enabled if (entity == hitInfo.Initiator) { var suicider = entity as BasePlayer; if (suicider == null || !suicider.userID.IsSteamId()) return; var r = GetXPRecord(suicider); double currentlevelamount = r.experience - (r.requiredxp - (r.level * config.xpLevel.levelmultiplier)); var reducexp = Math.Round(currentlevelamount * config.xpReducer.suicidereduceamount); // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.noxploss.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, suicider); if (playerinzone) return; } } LoseExp(suicider, reducexp); suicider.ChatMessage(XPLang("suicide", suicider.UserIDString, reducexp)); LiveStats(suicider, true); return; } // Get Killer Info var attacker = hitInfo.Initiator as BasePlayer; if (attacker == null || !attacker.userID.IsSteamId()) return; //string KillType = entity?.GetType().Name.ToLower(); string KillType = entity.ShortPrefabName.ToLower(); string droptype = "kill"; if (KillType.Contains("scientistnpc")) { KillType = GetScientistType(KillType); } if (KillType.Contains("dweller")) { KillType = GetDwellerType(KillType); } if (KillType.Contains("loot") || KillType.Contains("barrel")) { KillType = GetLootType(KillType); droptype = "loot"; } XPRecord xprecord = GetXPRecord(attacker); if (xprecord == null) return; // Update DataCache On Kill switch (KillType) { case "chicken": addxp = config.xpGain.chickenxp; break; case "boar": addxp = config.xpGain.boarxp; break; case "stag": addxp = config.xpGain.stagxp; break; case "wolf": addxp = config.xpGain.wolfxp; break; case "bear": addxp = config.xpGain.bearxp; break; case "polarbear": addxp = config.xpGain.polarbearxp; break; case "simpleshark": addxp = config.xpGain.sharkxp; break; case "horse": case "ridablehorse": addxp = config.xpGain.horsexp; break; case "scientistnpc": case "scientist": addxp = config.xpGain.scientistxp; break; case "sc_cargo": addxp = config.xpGain.sc_cargo; break; case "sc_heavy": addxp = config.xpGain.sc_heavy; break; case "sc_patrol": addxp = config.xpGain.sc_patrol; break; case "sc_junkpile": addxp = config.xpGain.sc_junkpile; break; case "sc_oilrig": addxp = config.xpGain.sc_oilrig; break; case "sc_peacekeeper": addxp = config.xpGain.sc_peacekeeper; break; case "sc_roam": addxp = config.xpGain.sc_roam; break; case "sc_full": addxp = config.xpGain.sc_full; break; case "dweller": addxp = config.xpGain.dwellerxp; break; case "tunneldweller": addxp = config.xpGain.tunneldwellerxp; break; case "underwaterdweller": addxp = config.xpGain.underwaterdwellerxp; break; case "baseplayer": addxp = config.xpGain.playerxp; break; case "lootcontainer": addxp = config.xpGain.lootcontainerxp; break; case "lootbarrel": addxp = config.xpGain.lootbarrel; break; case "oilbarrel": addxp = config.xpGain.oilbarrel; break; case "basecorpse": addxp = config.xpGain.animalharvestxp; break; case "npcplayercorpse": addxp = config.xpGain.corpseharvestxp; break; case "bradleyapc": addxp = config.xpGain.bradley; break; case "patrolhelicopter": addxp = config.xpGain.patrolhelicopter; break; case "scarecrownpc": case "scarecrow": addxp = config.xpGain.scarecrownpc; break; case "customscientistnpc": addxp = config.xpGain.customnpc; break; case "zombienpc": case "zombie": addxp = config.xpGain.zombienpc; break; case "gift": addxp = config.xpGain.gifts; break; } if (KillRecords != null && config.xpBonus.enablebonus) { KRBonus(attacker, KillType, config.xpBonus.requiredkills, config.xpBonus.bonusxp, config.xpBonus.endbonus, config.xpBonus.multibonus, config.xpBonus.multibonustype); } GainExp(attacker, addxp); if (XPerienceAddon != null) { XPerienceAddon.Call("SpecialItemChance", attacker, droptype); } } private void OnPlayerDeath(BasePlayer victim, HitInfo hitInfo) { // Check for null or NPC if (victim == null || !victim.userID.IsSteamId()) return; BaseEntity attacker = hitInfo?.Initiator; if (attacker == null) return; // If Suicide Ingnore Death if (attacker == victim) return; // Update Player Data On deaths if enabled if (config.xpReducer.deathreduce) { XPRecord xprecord = GetXPRecord(victim); double currentlevelamount = xprecord.experience - (xprecord.requiredxp - (xprecord.level * config.xpLevel.levelmultiplier)); var reducexp = Math.Round(currentlevelamount * config.xpReducer.deathreduceamount); // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.noxploss.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, victim); if (playerinzone) return; } } LoseExp(victim, reducexp); victim.ChatMessage(XPLang("death", victim.UserIDString, reducexp)); LiveStats(victim, true); } } private void OnLootEntity(BasePlayer player, LootContainer lootcontainer) { if (player == null || !player.userID.IsSteamId() || !lootcontainer.IsValid()) return; //var loot = lootcontainer.GetType().Name.ToLower(); var loot = lootcontainer.ShortPrefabName.ToLower(); loot = GetLootType(loot); var lootid = lootcontainer.net.ID; if (loot == null) return; double addxp = 0; bool increaseloot = false; if (_lootCache.ContainsKey(lootid) && _lootCache[lootid].id.Contains(player.UserIDString)) { return; } switch (loot) { case "lootcontainer": addxp = config.xpGain.lootcontainerxp; if (config.scavenger.crates) { increaseloot = true; } break; case "vehicleparts": addxp = config.xpGain.vehicleparts; if (config.scavenger.crates) { increaseloot = true; } break; case "freeablelootcontainer": addxp = config.xpGain.underwaterlootcontainerxp; if (config.scavenger.uncrates) { increaseloot = true; } break; case "lockedbyentcrate": addxp = config.xpGain.lockedcratexp; if (config.scavenger.lockedcrates) { increaseloot = true; } break; case "hackablelockedcrate": addxp = config.xpGain.hackablecratexp; if (config.scavenger.hackcrates) { increaseloot = true; } break; case "toolcrate": addxp = config.xpGain.toolcrate; if (config.scavenger.crates) { increaseloot = true; } break; case "normalcrate": addxp = config.xpGain.normalcrate; if (config.scavenger.crates) { increaseloot = true; } break; case "elitecrate": addxp = config.xpGain.elitecrate; if (config.scavenger.crates) { increaseloot = true; } break; case "foodcrate": addxp = config.xpGain.foodcrate; if (config.scavenger.crates) { increaseloot = true; } break; } GainExp(player, addxp); //Custom Items if (config.scavenger.usecustomscavlist) { RandomScavengerItem(player); } // Increase Loot if (increaseloot && config.scavenger.scavmultiplier != 0) { if (!_lootCache.ContainsKey(lootid)) { IncreaseLootContainers(player, lootcontainer); } } // Add player and container ID to LootData AddLootData(player, lootcontainer); if (XPerienceAddon != null) { XPerienceAddon.Call("SpecialItemChance", player, "loot"); } } private void OnEntityTakeDamage(BaseCombatEntity entity, HitInfo hitInfo) { if (entity == null || hitInfo == null || hitInfo.Initiator == null) return; if (entity.GetType().Name.ToLower().Contains("corpse")) return; // Ignore if self damage if (entity == hitInfo.Initiator) return; double blockamount = 0.0; bool didblock = false; bool diddodge = false; var player = entity as BasePlayer; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return; } } if (player != null && player.userID.IsSteamId()) { XPRecord vxprecord = GetXPRecord(player); if (vxprecord != null) { // If UI open then close DestroyUi(player, XPeriencePlayerControlPrimary); DestroyUi(player, XPeriencePlayerControlFullMain); DestroyUi(player, XPerienceAdminPanelMain); DestroyUi(player, XPerienceTopMain); DestroyUi(player, XPeriencePlayerControlPrompt); // Dexterity Armor Reduction if (vxprecord.Dexterity > 0 && player._health > 100) { double defaultdmg = hitInfo.damageTypes.Total(); double armordmgreduction = vxprecord.Dexterity * config.dexterity.reducearmordmg; // Ranks if (config.xpLevelRanks.rankskillboost && !vxprecord.DisableRank && config.Rankboostssettings.armor) { armordmgreduction += vxprecord.rank * config.xpLevelRanks.rankstatboostamount; } hitInfo.damageTypes?.ScaleAll(1 - (float)armordmgreduction); double damgdiff = defaultdmg - hitInfo.damageTypes.Total(); if (config.defaultOptions.disablearmorchat) { player.ChatMessage(XPLang("victimarmordmg", player.UserIDString, Math.Round(damgdiff, 2))); } } // Random chance to Block or Dodge double dodgechance = (vxprecord.Dexterity * config.dexterity.dodgechance) * 100; double blockchance = (vxprecord.Dexterity * config.dexterity.blockchance) * 100; int fifty = RandomNumber.Between(0, 101); int roll = RandomNumber.Between(0, 110); // Block if (fifty < 50) { if (vxprecord.Dexterity > 0 && config.dexterity.blockchance != 0 && roll <= blockchance) { didblock = true; double blockdmg = (vxprecord.Dexterity * config.dexterity.blockamount); blockamount = hitInfo.damageTypes.Total() * blockdmg; // Ranks if (config.xpLevelRanks.rankstatboost && !vxprecord.DisableRank && config.Rankboostssettings.block) { blockamount += vxprecord.rank * config.xpLevelRanks.rankstatboostamount; } hitInfo.damageTypes?.ScaleAll(1 - (float)blockdmg); // UINotify if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.dodgeblock) { UINotify.Call("SendNotify", player, config.UiNotifier.dodgeblocktype, XPLang("victimblock", player.UserIDString, Math.Round(blockamount))); } // Disable Chats if (!config.UiNotifier.disablechats) { player.ChatMessage(XPLang("victimblock", player.UserIDString, Math.Round(blockamount))); } } } // Dodge if (fifty > 50) { if (vxprecord.Dexterity > 0 && config.dexterity.dodgechance != 0 && roll <= dodgechance) { diddodge = true; hitInfo.damageTypes?.ScaleAll(0); // UINotify if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.dodgeblock) { UINotify.Call("SendNotify", player, config.UiNotifier.dodgeblocktype, XPLang("victimdodge", player.UserIDString)); } // Disable Chats if (!config.UiNotifier.disablechats) { player.ChatMessage(XPLang("victimdodge", player.UserIDString)); } } } } } var attacker = hitInfo.Initiator as BasePlayer; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool attackerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, attacker); if (attackerinzone) return; } } if (attacker == null || !attacker.userID.IsSteamId()) return; var KillType = entity?.GetType().Name.ToLower(); XPRecord xprecord = GetXPRecord(attacker); if (xprecord == null) return; if (diddodge && attacker) { if (GetPlayerCooldown(attacker.userID, "notify") != 0) { // UINotify if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.dodgeblock) { UINotify.Call("SendNotify", attacker, config.UiNotifier.dodgeblocktype, XPLang("attackerdodge", attacker.UserIDString)); } // Disable Chats if (!config.UiNotifier.disablechats) { attacker.ChatMessage(XPLang("attackerdodge", attacker.UserIDString)); } _notifyCooldowns[attacker.userID] = CurrentTime + config.defaultOptions.NotifcationCooldown; return; } } if (didblock && attacker) { if (GetPlayerCooldown(attacker.userID, "notify") != 0) { // UINotify if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.dodgeblock) { UINotify.Call("SendNotify", attacker, config.UiNotifier.dodgeblocktype, XPLang("attackerblock", attacker.UserIDString, Math.Round(blockamount))); } // Disable Chats if (!config.UiNotifier.disablechats) { attacker.ChatMessage(XPLang("attackerblock", attacker.UserIDString, Math.Round(blockamount))); } _notifyCooldowns[attacker.userID] = CurrentTime + config.defaultOptions.NotifcationCooldown; return; } } // Hunter Wildlife Increase if (KillType == "chicken" || KillType == "boar" || KillType == "stag" || KillType == "wolf" || KillType == "bear" || KillType == "polarbear" || KillType == "horse" || KillType == "ridablehorse" || KillType == "simpleshark") { double hunterdmg = xprecord.Hunter * config.hunter.damageincrease; // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.hunterdmg) { hunterdmg += xprecord.rank * config.xpLevelRanks.rankstatboostamount; } hitInfo.damageTypes?.ScaleAll(1 + (float)hunterdmg); } // Hunter Night Wildlife Increase if (IsNight() && config.nightBonus.enableskillboosts) { double nightdmg = xprecord.Hunter * config.hunter.nightdmgincrease; // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.hunterndmg) { nightdmg += xprecord.rank * config.xpLevelRanks.rankstatboostamount; } hitInfo.damageTypes?.ScaleAll(1 + (float)nightdmg); } // Mentality PVP/NPC and Critical Chance if (xprecord.Mentality >= 1) { if (entity.IsNpc) { if (entity.GetType().Name.ToLower().Contains("scientist") || entity.GetType().Name.ToLower().Contains("customscientist") || entity.GetType().Name.ToLower().Contains("dweller") || entity.GetType().Name.ToLower().Contains("scarecrow") || entity.GetType().Name.ToLower().Contains("bradleyapc")) { double pvpnpcbonus = xprecord.Mentality * config.mentality.damageincrease; hitInfo.damageTypes?.ScaleAll(1 + (float)pvpnpcbonus); } } double critchance = (xprecord.Mentality * config.mentality.criticalchance) * 100; if (RandomNumber.Between(0, 101) <= critchance) { hitInfo.damageTypes?.ScaleAll(1 + 0.10f); double crithit = Math.Ceiling((int)hitInfo.damageTypes.Total() * 0.10f); // UINotify if (GetPlayerCooldown(attacker.userID, "notify") != 0) { if (UINotify != null && config.UiNotifier.useuinotify && config.UiNotifier.criticalhit) { UINotify.Call("SendNotify", attacker, config.UiNotifier.criticalhittype, XPLang("crithit", attacker.UserIDString, crithit)); } // Disable Chats if (!config.UiNotifier.disablechats) { attacker.ChatMessage(XPLang("crithit", attacker.UserIDString, crithit)); } _notifyCooldowns[attacker.userID] = CurrentTime + config.defaultOptions.NotifcationCooldown; } } } // Might Melee Increase if (xprecord.Might > 0 && hitInfo?.Weapon != null) { if (hitInfo.Weapon.ShortPrefabName.Contains("knife") || hitInfo.Weapon.ShortPrefabName.Contains("hatchet") || hitInfo.Weapon.ShortPrefabName.Contains("pitchfork") || hitInfo.Weapon.ShortPrefabName.Contains("sword") || hitInfo.Weapon.ShortPrefabName.Contains("spear") || hitInfo.Weapon.ShortPrefabName.Contains("cleaver") || hitInfo.Weapon.ShortPrefabName.Contains("club") || hitInfo.Weapon.ShortPrefabName.Contains("mace") || hitInfo.Weapon.ShortPrefabName.Contains("pickaxe") || hitInfo.Weapon.ShortPrefabName.Contains("machete")) { double meleeincrease = xprecord.Might * config.might.meleedmg; // Ranks if (config.xpLevelRanks.rankstatboost && !xprecord.DisableRank && config.Rankboostssettings.meleedmg) { meleeincrease += xprecord.rank * config.xpLevelRanks.rankstatboostamount; } hitInfo.damageTypes?.ScaleAll(1 + (float)meleeincrease); } } } private void OnContainerDropItems(ItemContainer lootcontainer) { if (lootcontainer == null) return; var lootentity = lootcontainer.entityOwner as LootContainer; if (lootentity == null || lootentity.IsDestroyed) return; var player = lootentity.lastAttacker as BasePlayer; if (player == null) return; // Custom Item Drops if (config.scavenger.usecustomscavlist) { RandomScavengerItem(player); } // Increase Container Loot if (!config.scavenger.drops && config.scavenger.scavmultiplier == 0) return; IncreaseLootContainerDrops(lootcontainer); } private void CanLootEntity(BasePlayer player, LootableCorpse corpse) { if (player == null || corpse == null) return; if (config.scavenger.scientists && corpse.ShortPrefabName.Contains("scientist")) { if (!_corpseCache.ContainsKey(corpse.net.ID)) { IncreaseLootCorpse(player, corpse); } AddCorpseData(player, corpse); } } private void OnEntityKill(BaseMountable entity) { if (entity == null) return; DashPanelTimer?.Destroy(); // Boat Boat defaultboat; var boat = entity?.GetParentEntity() as BaseBoat; if (boat.IsValid()) { boat?.DismountAllPlayers(); if (_boatCache.TryGetValue(boat.net.ID, out defaultboat)) { var captain = FindPlayer(defaultboat.player.ToString()); if (captain != null) { DashPanel(captain, false, entity); DestroyUi(captain, XPerienceLiveDashPanel); } _boatCache.Remove(entity.net.ID); } } // Vehicle Vehicle vehicle; var car = entity?.VehicleParent() as ModularCar; if (car.IsValid()) { car?.DismountAllPlayers(); if (_vehicleCache.TryGetValue(car.net.ID, out vehicle)) { var driver = FindPlayer(vehicle.player.ToString()); if (driver != null) { DashPanel(driver, false, entity); DestroyUi(driver, XPerienceLiveDashPanel); } _vehicleCache.Remove(car.net.ID); } } // Mini Copter Minicopter minicopter; var mini = entity?.VehicleParent() as MiniCopter; if (mini.IsValid()) { mini?.DismountAllPlayers(); if (_minicopterCache.TryGetValue(mini.net.ID, out minicopter)) { var pilot = FindPlayer(minicopter.player.ToString()); if (pilot != null) { DashPanel(pilot, false, entity); DestroyUi(pilot, XPerienceLiveDashPanel); } _minicopterCache.Remove(entity.net.ID); } } } #endregion #region Missions private void OnMissionSucceeded(BaseMission mission, BasePlayer assignee) { // Check for null or NPC if (assignee == null || !assignee.userID.IsSteamId()) return; if (mission == null) return; // Give XP double addxp = config.xpMissions.missionsucceededxp; GainExp(assignee, addxp); if (XPerienceAddon != null) { XPerienceAddon.Call("SpecialItemChance", assignee, "mission"); } } private void OnMissionFailed(BaseMission mission, BasePlayer assignee) { // Check for null or NPC if (assignee == null || !assignee.userID.IsSteamId()) return; if (mission == null) return; // Take XP double reducexp = config.xpMissions.missionfailedxp; LoseExp(assignee, reducexp); } #endregion #region Crafting/Building private int DetermineIngredientAmount(int item, int amount, BasePlayer player) { XPRecord xprecord = GetXPRecord(player); int skilllevel = xprecord.Crafter; double craftcost = (config.crafter.craftcost * skilllevel) * amount; // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.craftercost) { craftcost += xprecord.rank * config.xpLevelRanks.rankstatboostamount; } double newamount = Math.Round(amount - craftcost); // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * newamount; newamount = Math.Round(newamount - captaincyboost); } if (((config.crafter.craftcost * skilllevel) * 100) > 45 && (item == -1938052175 || item == -1581843485)) { craftcost = 0.45 * amount; newamount = Math.Round(amount - craftcost); } if (newamount < 1) { newamount = 1; } return (int)newamount; } public void CollectIngredient(int item, int amount, List collect, ItemCrafter itemCrafter, BasePlayer player) { var newamount = DetermineIngredientAmount(item, amount, player); foreach (ItemContainer container in itemCrafter.containers) { amount -= container.Take(collect, item, (int)newamount); if (amount < 1) { amount = 1; } } } bool? OnIngredientsCollect(ItemCrafter itemCrafter, ItemBlueprint blueprint, ItemCraftTask task, int amount, BasePlayer player) { if (ItemRetriever != null) return null; //if (amount == 0 || amount == null) return; List collect = new List(); foreach (ItemAmount ingredient in blueprint.ingredients) CollectIngredient(ingredient.itemid, (int)ingredient.amount * amount, collect, itemCrafter, player); task.potentialOwners = new List(); foreach (Item obj in collect) { obj.CollectedForCrafting(player); if (!task.potentialOwners.Contains(player.userID)) task.potentialOwners.Add(player.userID); } task.takenItems = collect; return true; } private void OnIngredientsDetermine(Dictionary overridenIngredients, ItemBlueprint blueprint, int amount, BasePlayer player) { if (overridenIngredients.Count > 0) { Puts("Another plugin is using the OnIngredientsDetermine hook to alter crafting ingredients for Item Retriever. XPerience will override it."); } foreach (ItemAmount ingredient in blueprint.ingredients) { overridenIngredients[ingredient.itemid] = DetermineIngredientAmount(ingredient.itemid, (int)ingredient.amount * amount, player); } } private void OnItemCraft(ItemCraftTask task, BasePlayer player) { if (task.cancelled) return; // Ignore keys if (task.blueprint.targetItem.shortname.Contains("key") || task.blueprint.name.Contains("(Clone)")) return; XPRecord xprecord = GetXPRecord(player); int skilllevel = xprecord.Crafter; if (skilllevel <= 0) return; var craftTime = task.blueprint.time; var itemlevel = task.blueprint.workbenchLevelRequired; float workbenchinuse = player.currentCraftLevel; // Items with no workbench requirement or same as workbench level if (itemlevel == workbenchinuse || workbenchinuse == 0) { double craftspeed = (config.crafter.craftspeed * skilllevel) * task.blueprint.time; craftTime = task.blueprint.time - (float)craftspeed; } // Items with no workbench requirement using level 1,2,3 workbench if (workbenchinuse == 1 && itemlevel == 0) { double craftspeed = (config.crafter.craftspeed * skilllevel) * (task.blueprint.time * 0.5); craftTime = task.blueprint.time - (float)craftspeed; } else if ((workbenchinuse == 2 || workbenchinuse == 3) && itemlevel == 0) { double craftspeed = (config.crafter.craftspeed * skilllevel) * (task.blueprint.time * 0.75); craftTime = task.blueprint.time - (float)craftspeed; } // Items with workbench requirement level 1 if (workbenchinuse == 2 && itemlevel == 1) { double craftspeed = (config.crafter.craftspeed * skilllevel) * (task.blueprint.time * 0.5); craftTime = task.blueprint.time - (float)craftspeed; } else if (workbenchinuse == 3 && itemlevel == 1) { double craftspeed = (config.crafter.craftspeed * skilllevel) * (task.blueprint.time * 0.75); craftTime = task.blueprint.time - (float)craftspeed; } // Items with workbench requirement level 2 if (workbenchinuse == 3 && itemlevel == 2) { double craftspeed = (config.crafter.craftspeed * skilllevel) * (task.blueprint.time * 0.5); craftTime = task.blueprint.time - (float)craftspeed; } // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * craftTime; craftTime = (float)craftTime - (float)captaincyboost; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.crafterspeed) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * craftTime; craftTime = (float)craftTime - (float)rankboost; } task.blueprint = UnityEngine.Object.Instantiate(task.blueprint); task.blueprint.time = craftTime; return; } private void OnItemCraftFinished(ItemCraftTask task, Item item) { if (task == null || item == null) return; var player = task.owner.ToPlayer(); if (player == null) return; XPRecord xprecord = GetXPRecord(player); bool allowxp = true; if (config.xpGain.craftingxpdelay && GetPlayerCooldown(player.userID, "craft") != 0) { allowxp = false; } if (GetPlayerCooldown(player.userID, "craft") == 0) { _craftCooldowns[player.userID] = CurrentTime + config.xpGain.craftingxpdelayseconds; } if (allowxp) { GainExp(player, config.xpGain.craftingxp); } int skilllevel = xprecord.Crafter; if (skilllevel <= 0 || config.crafter.conditionchance == 0) return; double conditionchance = (config.crafter.conditionchance * skilllevel) * 100; float tenpercent = (float)(item._maxCondition / (config.crafter.conditionamount * 100)); // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * conditionchance; conditionchance += captaincyboost; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.craftercc) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * conditionchance; conditionchance += rankboost; } if (Random.Range(0, 101) <= conditionchance) { if (item.GetHeldEntity() is BaseProjectile) { BaseProjectile projectile = item?.GetHeldEntity() as BaseProjectile; if (projectile == null) return; item._maxCondition += tenpercent; item.condition += tenpercent; projectile.SendNetworkUpdateImmediate(); player.ChatMessage(XPLang("weaponcon", player.UserIDString, item.condition)); } else { item._maxCondition += tenpercent; item.condition += tenpercent; item.GetHeldEntity()?.SendNetworkUpdateImmediate(); } } } private object OnItemUse(Item item) { if (item?.info.shortname != "lowgradefuel") return null; var shortName = item.parent?.parent?.info.shortname; if (shortName != "hat.candle" && shortName != "hat.miner") return null; var player = item.GetRootContainer()?.GetOwnerPlayer(); XPRecord xprecord = GetXPRecord(player); var skilllevel = xprecord.Miner; double lessfueltotal = (config.miner.fuelconsumption * skilllevel) * 100; // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * lessfueltotal; lessfueltotal += captaincyboost; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.minerfuel) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * lessfueltotal; lessfueltotal += rankboost; } if (Random.Range(0, 110) <= lessfueltotal) { return 0; } return null; } private List RepairItems(BasePlayer player, Item item) { ItemDefinition info = item.info; ItemBlueprint component = info.GetComponent(); List list = Facepunch.Pool.GetList(); RepairBench.GetRepairCostList(component, list); return ApplyItemCostReduction(player, list, item); } private List ApplyItemCostReduction(BasePlayer player, List list, Item item) { List reducedlist = new List(); var repairCostreduction = RepairBench.RepairCostFraction(item); double defaultamount; double newamount; XPRecord xprecord = GetXPRecord(player); int skilllevel = xprecord.Crafter; if (skilllevel <= 0) return null; foreach (ItemAmount itemAmount in list) { if (itemAmount.itemDef.category != ItemCategory.Component) { defaultamount = Math.Ceiling(itemAmount.amount * repairCostreduction); newamount = Math.Ceiling(defaultamount - (config.crafter.repaircost * xprecord.Crafter) * defaultamount); // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.crafterrc) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * newamount; newamount -= Math.Ceiling(rankboost); } if (newamount < 1) { newamount = 1; } itemAmount.amount = (float)newamount; reducedlist.Add(itemAmount); } } return reducedlist; } private bool PlayerCanRepair(BasePlayer player, List list) { foreach (ItemAmount itemAmount in list) { int amount = player.inventory.GetAmount(itemAmount.itemDef.itemid); if (itemAmount.amount > amount) { return false; } } return true; } private void TakeItems(BasePlayer player, List list) { foreach (ItemAmount itemAmount in list) { player.inventory.Take((List)null, itemAmount.itemid, (int)itemAmount.amount); } } private void OnItemRepair(BasePlayer player, Item item) { if (player == null || item == null) return; XPRecord xprecord = GetXPRecord(player); int skilllevel = xprecord.Crafter; if (skilllevel <= 0) return; double repairincrease = (config.crafter.repairincrease * skilllevel) * 100; // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.crafterri) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * repairincrease; repairincrease += rankboost; } var list = RepairItems(player, item); if (!PlayerCanRepair(player, list)) { player.ChatMessage(XPLang("crafternotenough", player.UserIDString)); return; } if (Random.Range(0, 101) <= repairincrease) { if (item.GetHeldEntity() is BaseProjectile) { BaseProjectile projectile = item?.GetHeldEntity() as BaseProjectile; if (projectile == null) return; item.condition = item._maxCondition; projectile.SendNetworkUpdateImmediate(); TakeItems(player, list); return; } else { item.condition = item._maxCondition; item.GetHeldEntity()?.SendNetworkUpdateImmediate(); TakeItems(player, list); return; } } //TakeItems(player, list); } private void OnEntityBuilt(Planner plan) { var player = plan.GetOwnerPlayer(); if (player == null) return; BuildingPrivlidge isauth = player.GetBuildingPrivilege(); if (config.xpBuilding.requirebuildingprivlidge && (isauth == null || !isauth.IsAuthed(player))) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; bool allowxp = true; double addxp = config.xpBuilding.twigstructure; if (config.xpBuilding.buildxpdelay && (GetPlayerCooldown(player.userID, "build") != 0)) { _buildCooldowns[player.userID] = CurrentTime + config.xpBuilding.buildxpdelayseconds; allowxp = false; } _buildCooldowns[player.userID] = CurrentTime + config.xpBuilding.buildxpdelayseconds; if (allowxp) GainExp(player, addxp); } private void OnStructureUpgrade(BuildingBlock buildingBlock, BasePlayer player, BuildingGrade.Enum grade) { if (buildingBlock == null || player == null) return; BuildingPrivlidge isauth = player.GetBuildingPrivilege(); if (config.xpBuilding.requirebuildingprivlidge && (isauth == null || !isauth.IsAuthed(player))) return; // Check for BuildingGrades mod and np BG xp if (BuildingGrades != null) { var processing = BuildingGrades.Call("IsProcessingBuildingBlock", buildingBlock); if (processing is bool && (bool)processing) { return; } } // If Building Grades not installed continue double addxp = 0; if (buildingBlock.grade == BuildingGrade.Enum.Twigs) { addxp = config.xpBuilding.woodstructure; } if (buildingBlock.grade == BuildingGrade.Enum.Wood) { addxp = config.xpBuilding.stonestructure; } if (buildingBlock.grade == BuildingGrade.Enum.Stone) { addxp = config.xpBuilding.metalstructure; } if (buildingBlock.grade == BuildingGrade.Enum.Metal) { addxp = config.xpBuilding.armoredstructure; } if (buildingBlock.grade == BuildingGrade.Enum.TopTier) { addxp = config.xpBuilding.armoredstructure; } if (CanAffordUpgrade(buildingBlock, player, grade)) { GainExp(player, addxp); RefundMaterials(buildingBlock, player, grade); } } private void OnStructureGradeUpdated(BuildingBlock buildingBlock, BasePlayer player, BuildingGrade.Enum oldGrade, BuildingGrade.Enum newGrade) { // Downgrade Building if (newGrade <= oldGrade) { if (config.xpBuilding.reducexp) { double removexp = 0; if (oldGrade == BuildingGrade.Enum.Wood) { removexp = config.xpBuilding.woodstructure; } if (oldGrade == BuildingGrade.Enum.Stone) { removexp = config.xpBuilding.stonestructure; } if (oldGrade == BuildingGrade.Enum.Metal) { removexp = config.xpBuilding.metalstructure; } if (oldGrade == BuildingGrade.Enum.TopTier) { removexp = config.xpBuilding.armoredstructure; } removexp *= config.xpBuilding.buildxpreduction; XPRecord xprecord = GetXPRecord(player); removexp += (config.xpLevel.levelxpboost * xprecord.level) * removexp; LoseExp(player, removexp); } return; } // Check for BuildingGrades mod if (BuildingGrades != null && config.xpBuilding.preventBGxp) { var processing = BuildingGrades.Call("IsProcessingBuildingBlock", buildingBlock); if (processing is bool && (bool)processing) { return; } } //Upgrade Building double addxp = 0; bool allowxp = true; if (newGrade == BuildingGrade.Enum.Wood) { addxp = config.xpBuilding.woodstructure; } if (newGrade == BuildingGrade.Enum.Stone) { addxp = config.xpBuilding.stonestructure; } if (newGrade == BuildingGrade.Enum.Metal) { addxp = config.xpBuilding.metalstructure; } if (newGrade == BuildingGrade.Enum.TopTier) { addxp = config.xpBuilding.armoredstructure; } if (CanAffordUpgrade(buildingBlock, player, newGrade)) { if (config.xpBuilding.buildxpdelay && (GetPlayerCooldown(player.userID, "build") != 0)) { allowxp = false; } if (GetPlayerCooldown(player.userID, "build") == 0) { _buildCooldowns[player.userID] = CurrentTime + config.xpBuilding.buildxpdelayseconds; } if (allowxp) GainExp(player, addxp); RefundMaterials(buildingBlock, player, newGrade); } } public bool CanAffordUpgrade(BuildingBlock buildingBlock, BasePlayer player, BuildingGrade.Enum grade) { object building = Interface.CallHook("CanAffordUpgrade", player, buildingBlock, grade); if (building is bool) { return (bool)building; } bool canupgrade = true; foreach (var item in buildingBlock.blockDefinition.grades[(int)grade].costToBuild) { var missingAmount = item.amount - player.inventory.GetAmount(item.itemid); if (missingAmount > 0f) { canupgrade = false; } } return canupgrade; } private void RefundMaterials(BuildingBlock buildingBlock, BasePlayer player, BuildingGrade.Enum grade) { if (buildingBlock == null || player == null) return; if (buildingBlock.OwnerID != player.userID) return; XPRecord xprecord = GetXPRecord(player); if (xprecord.Framer == 0) return; var items = buildingBlock.blockDefinition.grades[(int)grade].costToBuild; foreach (var item in items) { double reducedcost = item.amount * (config.framer.upgradecost * xprecord.Framer); // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * reducedcost; reducedcost += captaincyboost; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.framerucost) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * reducedcost; reducedcost += rankboost; } if (reducedcost < 1) { reducedcost = 1; } player.GiveItem(ItemManager.CreateByItemID(item.itemid, (int)reducedcost)); } } private void OnStructureRepair(BaseCombatEntity entity, BasePlayer player) { if (entity == null || player == null) return; BuildingPrivlidge isauth = player.GetBuildingPrivilege(); if (isauth == null || !isauth.IsAuthed(player)) return; XPRecord xprecord = GetXPRecord(player); int skilllevel = xprecord.Framer; if (skilllevel == 0) return; double repairtime = config.framer.repairtime; double repaircost = config.framer.repaircost; // Reduce Repair Time entity.lastAttackedTime = (float)(entity.lastAttackedTime - (repairtime * skilllevel)); if (entity.SecondsSinceAttacked < 30) return; // Reduce Repair Cost float missingHealth = entity.MaxHealth() - entity.health; float healthPercentage = missingHealth / entity.MaxHealth(); if (missingHealth <= 0f || healthPercentage <= 0f) { entity.OnRepairFailed(null, string.Empty); return; } List itemAmounts = entity.RepairCost(healthPercentage); if (itemAmounts.Sum(x => x.amount) <= 0f) { entity.health += missingHealth; entity.SendNetworkUpdate(); entity.OnRepairFinished(); return; } foreach (ItemAmount amount in itemAmounts) { if (amount.amount > 40f) { amount.amount = 40f; } amount.amount = (float)(amount.amount * (repaircost * skilllevel)); // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * amount.amount; amount.amount += (float)captaincyboost; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.framerrcost) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * amount.amount; amount.amount += (float)rankboost; } } if (itemAmounts.Any(ia => player.inventory.GetAmount(ia.itemid) < (int)ia.amount)) { entity.OnRepairFailed(null, string.Empty); return; } foreach (ItemAmount amount in itemAmounts) { if (amount.amount < 1) return; Item item = ItemManager.CreateByItemID(amount.itemid, (int)amount.amount); player.GiveItem(item); } } // Prevent Burnt Cookables public static readonly string[] CookedItems = new string[] { "bearmeat.cooked", "chicken.cooked", "deermeat.cooked", "horsemeat.cooked", "humanmeat.cooked", "meat.pork.cooked", "wolfmeat.cooked", "fish.cooked" }; private Dictionary lowTemps = new Dictionary(); private Dictionary highTemps = new Dictionary(); ItemModCookable GetCookables(string shortname) { var definition = ItemManager.FindItemDefinition(shortname); if (definition == null) { Puts($"Unknown definition for {shortname}"); return null; } var cookable = definition.GetComponent(); if (cookable == null) { Puts($"Unknown cookable for {shortname}"); return null; } return cookable; } private void OnFuelConsume(BaseOven oven, Item fuel, ItemModBurnable burnable) { if (oven == null || fuel == null) return; var player = FindPlayer(oven.OwnerID.ToString()); if (player == null) return; XPRecord xprecord = GetXPRecord(player); // Fuel Consumption if (player.UserIDString == oven.OwnerID.ToString() && xprecord.Smithy > 0) { double lessfueltotal = (config.smithy.fuelconsumption * xprecord.Smithy) * 100; // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * lessfueltotal; lessfueltotal += captaincyboost; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * lessfueltotal; lessfueltotal += rankboost; } if (Random.Range(0, 101) <= lessfueltotal) { fuel.amount += 1; } } // Production Rate/Speed double increasechance = (config.smithy.productionrate * xprecord.Smithy) * 100; double increasespeed = config.smithy.productionspeed * xprecord.Smithy; // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboostincreasechance = CaptaincyTeamSkillBoost(player) * increasechance; increasechance += captaincyboostincreasechance; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.smithyfc) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * increasechance; double rankspeedboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * increasespeed; increasechance += rankboost; increasespeed += rankspeedboost; } // End Results var items = oven.inventory.itemList.ToArray(); foreach (var item in items) { var itemModCookable = item.info.GetComponent(); var itemCookableName = item.info.shortname; if (itemModCookable?.becomeOnCooked == null) continue; if (!_smithyCache.ContainsKey(itemCookableName)) { AddSmithyData(itemCookableName, itemModCookable.cookTime); } // Production Speed SmithyD resource; if (_smithyCache.TryGetValue(itemCookableName, out resource)) { itemModCookable.cookTime = resource.time; if (xprecord.Smithy > 0) { float speedreduction = resource.time * (float)increasespeed; if(speedreduction >= resource.time) { speedreduction = resource.time - 1; } itemModCookable.cookTime -= speedreduction; } } // Production Rate if (Random.Range(0, 101) < increasechance && xprecord.Smithy > 0) { double increaseamount = Math.Round((config.smithy.productionrate * xprecord.Smithy) * 5); if (increaseamount < 1) { increaseamount = 1; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank) { double rankboostin = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * increaseamount; increaseamount += Math.Ceiling(rankboostin); } if (itemModCookable?.becomeOnCooked == null || item.temperature < itemModCookable.lowTemp || item.temperature > itemModCookable.highTemp || itemModCookable.cookTime < 0) continue; if (oven.inventory.Take(null, item.info.itemid, 1) != 1) continue; var itemToGive = ItemManager.Create(itemModCookable.becomeOnCooked, (1 + (int)increaseamount)); if (!itemToGive.MoveToContainer(oven.inventory)) itemToGive.Drop(oven.inventory.dropPosition, oven.inventory.dropVelocity); } } } private void OnOvenCook(BaseOven oven, Item item) { if (oven == null || item == null) return; if (!oven.OwnerID.IsSteamId()) return; var player = FindPlayer(oven.OwnerID.ToString()); if (player == null) return; XPRecord xprecord = GetXPRecord(player); // Production Rate/Speed double increasechance = (config.smithy.productionrate * xprecord.Smithy) * 100; double increasespeed = config.smithy.productionspeed * xprecord.Smithy; // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboostincreasechance = CaptaincyTeamSkillBoost(player) * increasechance; increasechance += captaincyboostincreasechance; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.smithyfc) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * increasechance; double rankspeedboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * increasespeed; increasechance += rankboost; increasespeed += rankspeedboost; } // End Results var items = oven.inventory.itemList.ToArray(); var itemModCookable = item.info.GetComponent(); var itemCookableName = item.info.shortname; if (itemModCookable?.becomeOnCooked == null) return; if (!_smithyCache.ContainsKey(itemCookableName)) { AddSmithyData(itemCookableName, itemModCookable.cookTime); } // Production Speed SmithyD resource; if (_smithyCache.TryGetValue(itemCookableName, out resource)) { itemModCookable.cookTime = resource.time; if (xprecord.Smithy > 0) { float speedreduction = resource.time * (float)increasespeed; if (speedreduction >= resource.time) { speedreduction = resource.time - 1; } itemModCookable.cookTime -= speedreduction; } } // Production Rate if (Random.Range(0, 101) < increasechance && xprecord.Smithy > 0) { double increaseamount = Math.Round((config.smithy.productionrate * xprecord.Smithy) * 5); if (increaseamount < 1) { increaseamount = 1; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank) { double rankboostin = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * increaseamount; increaseamount += Math.Ceiling(rankboostin); } if (itemModCookable?.becomeOnCooked == null || item.temperature < itemModCookable.lowTemp || item.temperature > itemModCookable.highTemp || itemModCookable.cookTime < 0) return; if (oven.inventory.Take(null, item.info.itemid, 1) != 1) return; var itemToGive = ItemManager.Create(itemModCookable.becomeOnCooked, (1 + (int)increaseamount)); if (!itemToGive.MoveToContainer(oven.inventory)) itemToGive.Drop(oven.inventory.dropPosition, oven.inventory.dropVelocity); } } #endregion #region Plants/Trees/Ores/Food private void OnDispenserGather(ResourceDispenser dispenser, BaseEntity entity, Item item) { if (dispenser == null || entity == null || item == null) return; var player = entity.ToPlayer(); if (player == null || !player.userID.IsSteamId()) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; bool rankboostenabled = false; var gatherType = dispenser.gatherType; double addxp = 0; int skilllevel = 0; double gatherincrease = 0; double apples = config.woodcutter.applechance * 100; double metal = 100; var tool = player.GetActiveItem().ToString().ToLower(); if (gatherType == ResourceDispenser.GatherType.Tree) { addxp = config.xpGather.treexp; double toolxpchance = config.xpGather.toolxpchance * 100; if (!config.xpGather.noxptools && tool.Contains("chainsaw")) { if ((Random.Range(0, 101) <= toolxpchance) == true) { addxp = config.xpGather.toolxppercent * config.xpGather.treexp; } else { addxp = 0; } apples = 0; } else if (config.xpGather.noxptools && tool.Contains("chainsaw") || config.xpGather.onetimexp) { addxp = 0; apples = 0; } gatherincrease = config.woodcutter.gatherrate; if (config.Rankboostssettings.woodcuttergr) { rankboostenabled = true; } skilllevel = xprecord.WoodCutter; double chance = (config.woodcutter.applechance * skilllevel) * apples; if ((Random.Range(1, 101) <= chance) == true) { var roll = Random.Range(0, 11); if (roll < 5) { if (config.defaultOptions.dropsgotoplayerinventory) { player.GiveItem(ItemManager.CreateByItemID(352130972, 1)); } else { // Bad player.Command("note.inv", 352130972, 1.ToString()); ItemManager.CreateByName("apple.spoiled", 1)?.DropAndTossUpwards(entity.GetDropPosition()); player.RunEffect("assets/bundled/prefabs/fx/notice/loot.drag.itemdrop.fx.prefab"); } } if (roll > 5) { if (config.defaultOptions.dropsgotoplayerinventory) { player.GiveItem(ItemManager.CreateByItemID(1548091822, 1)); } else { // good player.Command("note.inv", 1548091822, 1.ToString()); ItemManager.CreateByName("apple", 1)?.DropAndTossUpwards(entity.GetDropPosition()); player.RunEffect("assets/bundled/prefabs/fx/notice/loot.drag.itemdrop.fx.prefab"); } } } } else if (gatherType == ResourceDispenser.GatherType.Ore) { addxp = config.xpGather.orexp; if (item.info.shortname.Contains("metal")) { addxp = config.xpGather.metalorexp; } if (item.info.shortname.Contains("sulfur")) { addxp = config.xpGather.sulfurorexp; } if (item.info.shortname.Contains("stone")) { addxp = config.xpGather.stoneorexp; } double toolxpchance = config.xpGather.toolxpchance * 100; if (!config.xpGather.noxptools && tool.Contains("jackhammer")) { if ((Random.Range(0, 101) <= toolxpchance) == true) { addxp = config.xpGather.toolxppercent * config.xpGather.orexp; } else { addxp = 0; } metal = 0.1; } else if (config.xpGather.noxptools && tool.Contains("jackhammer") || config.xpGather.onetimexp) { addxp = 0; metal = 0.1; } gatherincrease = config.miner.gatherrate; if (config.Rankboostssettings.minergr) { rankboostenabled = true; } skilllevel = xprecord.Miner; if (item.info.shortname.Contains("metal") && skilllevel > 0) { double metalchance = (skilllevel * config.miner.metalchance) * metal; int metalamount = skilllevel * config.miner.metalamount; if (metalamount < 1) { metalamount = 1; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.minermfc) { double rankboostfragchance = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * metalchance; int rankboostfragamt = (int)Math.Ceiling((xprecord.rank * config.xpLevelRanks.rankstatboostamount) * metalamount); metalchance += rankboostfragchance; if (config.Rankboostssettings.minermfa) { metalamount += rankboostfragamt; } } if ((Random.Range(0, 101) <= metalchance) == true) { if (config.defaultOptions.dropsgotoplayerinventory) { player.GiveItem(ItemManager.CreateByItemID(69511070, metalamount)); } else { player.Command("note.inv", 69511070, metalamount.ToString()); ItemManager.CreateByName("metal.fragments", metalamount)?.DropAndTossUpwards(entity.GetDropPosition()); player.RunEffect("assets/bundled/prefabs/fx/notice/loot.drag.itemdrop.fx.prefab"); } } } if (item.info.shortname.Contains("metal") && xprecord.Smithy > 0) { double hmetalchance = (xprecord.Smithy * config.smithy.metalchance) * metal; int hmetalamount = xprecord.Smithy * config.smithy.metalamount; if (hmetalamount < 1) { hmetalamount = 1; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.smithyhqmc) { double rankboostmetalchance = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * hmetalchance; int rankboostmetalamt = (int)Math.Ceiling((xprecord.rank * config.xpLevelRanks.rankstatboostamount) * hmetalamount); hmetalchance += rankboostmetalchance; if (config.Rankboostssettings.smithyhqma) { hmetalamount += rankboostmetalamt; } } if ((Random.Range(0, 101) <= hmetalchance) == true) { if (config.defaultOptions.dropsgotoplayerinventory) { player.GiveItem(ItemManager.CreateByItemID(317398316, hmetalamount)); } else { player.Command("note.inv", 317398316, hmetalamount.ToString()); ItemManager.CreateByName("metal.refined", hmetalamount)?.DropAndTossUpwards(entity.GetDropPosition()); player.RunEffect("assets/bundled/prefabs/fx/notice/loot.drag.itemdrop.fx.prefab"); } } } } else if (gatherType == ResourceDispenser.GatherType.Flesh || item.info.shortname == "cactusflesh") { addxp = config.xpGather.harvestxp; double toolxpchance = config.xpGather.toolxpchance * 100; if (!config.xpGather.noxptools && tool.Contains("jackhammer")) { if ((Random.Range(0, 101) <= toolxpchance) == true) { addxp = config.xpGather.toolxppercent * config.xpGather.orexp; } else { addxp = 0; } } else if (config.xpGather.noxptools && tool.Contains("jackhammer") || config.xpGather.onetimexp) { addxp = 0; } gatherincrease = config.hunter.gatherrate; if (config.Rankboostssettings.huntergr) { rankboostenabled = true; } skilllevel = xprecord.Hunter; } double results = item.amount + (item.amount * (gatherincrease * skilllevel)); // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * results; results += captaincyboost; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && rankboostenabled) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * results; results += rankboost; } if (skilllevel >= 1) { item.amount = (int)results; } GainExp(player, addxp); // Harvest Tracking if (item.info.shortname.Contains("wood")) { HarvestRecord(player, "wood", (int)results); } if (item.info.shortname.Contains("stone")) { HarvestRecord(player, "stone", (int)results); } if (item.info.shortname.Contains("metal")) { HarvestRecord(player, "metal", (int)results); } if (item.info.shortname.Contains("sulfur")) { HarvestRecord(player, "sulfur", (int)results); } if (item.info.shortname.Contains("cactus")) { HarvestRecord(player, "cactus", (int)results); } } private void OnDispenserBonus(ResourceDispenser dispenser, BasePlayer player, Item item) { if (player == null || !player.userID.IsSteamId() || dispenser == null || item == null) return; XPRecord xprecord = GetXPRecord(player); var gatherType = dispenser.gatherType; double addxp = 0; int skilllevel = 0; double bonus = 0; double increaseamount; bool rankboostenabled = false; if (gatherType == ResourceDispenser.GatherType.Tree) { addxp = config.xpGather.treexp; bonus = config.woodcutter.bonusincrease; skilllevel = xprecord.WoodCutter; if (config.Rankboostssettings.woodcutterbonus) { rankboostenabled = true; } } else if (gatherType == ResourceDispenser.GatherType.Ore) { addxp = config.xpGather.orexp; if (item.info.shortname.Contains("metal")) { addxp = config.xpGather.metalorexp; } if (item.info.shortname.Contains("sulfur")) { addxp = config.xpGather.sulfurorexp; } if (item.info.shortname.Contains("stone")) { addxp = config.xpGather.stoneorexp; } bonus = config.miner.bonusincrease; skilllevel = xprecord.Miner; if (config.Rankboostssettings.minerbonus) { rankboostenabled = true; } } else if (gatherType == ResourceDispenser.GatherType.Flesh || item.info.shortname == "cactusflesh") { addxp = config.xpGather.harvestxp; bonus = config.hunter.bonusincrease; skilllevel = xprecord.Hunter; if (config.Rankboostssettings.hunterbonus) { rankboostenabled = true; } } increaseamount = item.amount + (item.amount * (bonus * skilllevel)); // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * increaseamount; increaseamount += captaincyboost; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && rankboostenabled) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * increaseamount; increaseamount += rankboost; } if (skilllevel >= 1) { item.amount = (int)increaseamount; } GainExp(player, addxp); // Harvest Tracking if (item.info.shortname.Contains("wood")) { HarvestRecord(player, "wood", (int)increaseamount); } if (item.info.shortname.Contains("stone")) { HarvestRecord(player, "stone", (int)increaseamount); } if (item.info.shortname.Contains("metal")) { HarvestRecord(player, "metal", (int)increaseamount); } if (item.info.shortname.Contains("sulfur")) { HarvestRecord(player, "sulfur", (int)increaseamount); } if (item.info.shortname.Contains("cactus")) { HarvestRecord(player, "cactus", (int)increaseamount); } } private void OnCollectiblePickup(CollectibleEntity collectible, BasePlayer player) { if (player == null || !player.userID.IsSteamId() || collectible == null) return; XPRecord xprecord = GetXPRecord(player); double addxp = 0; double gatherincrease = config.forager.gatherrate; int skilllevel = xprecord.Forager; //Custom Items Forager if (config.forager.randomchance != 0) { RandomForagerItem(player); } foreach (var item in collectible.itemList) { var name = item.itemDef.shortname; // Seeds if (name.StartsWith("seed")) { double chance = (config.forager.chanceincrease * skilllevel) * 100; if ((Random.Range(0, 101) <= chance) == true) { double addseeds = (config.forager.chanceincrease * skilllevel) * 10; if (addseeds <= 1) { addseeds = 1; } item.amount += (int)addseeds; } } // XP / Gather Rate if (name.Contains("wood")) { addxp = config.xpGather.treexp; } else if (name.Contains("ore") || name.Contains("stone")) { addxp = config.xpGather.orexp; if (name.Contains("metal")) { addxp = config.xpGather.metalorexp; } if (name.Contains("sulfur")) { addxp = config.xpGather.sulfurorexp; } if (name.Contains("stone")) { addxp = config.xpGather.stoneorexp; } } else if (name.Contains("berry") || name == "mushroom" || name == "cloth" || name == "pumpkin" || name == "corn" || name == "potato") { addxp = config.xpGather.plantxp; } double results = item.amount + (item.amount * (gatherincrease * skilllevel)); // Grub / Worm Chance double grubchance = (config.forager.grubwormincrease * skilllevel) * 100; if ((Random.Range(0, 101) <= grubchance) == true) { var roll = Random.Range(0, 11); if (roll < 5) { if (config.defaultOptions.dropsgotoplayerinventory) { player.GiveItem(ItemManager.CreateByItemID(1770475779, 1)); } else { // Worm player.Command("note.inv", 1770475779, 1.ToString()); ItemManager.CreateByName("worm", 1)?.DropAndTossUpwards(collectible.GetDropPosition()); player.RunEffect("assets/bundled/prefabs/fx/notice/loot.drag.itemdrop.fx.prefab"); } } if (roll > 5) { if (config.defaultOptions.dropsgotoplayerinventory) { player.GiveItem(ItemManager.CreateByItemID(-568419968, 1)); } else { // Grub player.Command("note.inv", -568419968, 1.ToString()); ItemManager.CreateByName("grub", 1)?.DropAndTossUpwards(collectible.GetDropPosition()); player.RunEffect("assets/bundled/prefabs/fx/notice/loot.drag.itemdrop.fx.prefab"); } } } // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * results; results += captaincyboost; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.foragergr) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * results; results += rankboost; } if (skilllevel >= 1) { if (results <= 1.5 && gatherincrease != 0) { item.amount = 2; } else { item.amount = (int)results; } } GainExp(player, addxp); // Harvest Tracking if (name.Contains("wood")) { HarvestRecord(player, "wood", (int)results); } if (name.Contains("stone")) { HarvestRecord(player, "stone", (int)results); } if (name.Contains("metal")) { HarvestRecord(player, "metal", (int)results); } if (name.Contains("sulfur")) { HarvestRecord(player, "sulfur", (int)results); } if (name.Contains("cactus")) { HarvestRecord(player, "cactus", (int)results); } if (name.Contains("berry") && !name.Contains("seed")) { HarvestRecord(player, "berries", (int)results); } if (name.Contains("seed") && !name.Contains("berry")) { HarvestRecord(player, "seed", (int)results); } if (name.Contains("mushroom")) { HarvestRecord(player, "mushroom", (int)results); } if (name.Contains("cloth")) { HarvestRecord(player, "hemp", (int)results); } if (name.Contains("pumpkin")) { HarvestRecord(player, "pumpkin", (int)results); } if (name.Contains("corn")) { HarvestRecord(player, "corn", (int)results); } if (name.Contains("potato")) { HarvestRecord(player, "potato", (int)results); } } } private void OnGrowableGathered(GrowableEntity growable, Item item, BasePlayer player) { if (player == null || !player.userID.IsSteamId() || growable == null || item == null) return; XPRecord xprecord = GetXPRecord(player); double addxp = 0; double gatherincrease = config.forager.gatherrate; int skilllevel = xprecord.Forager; var name = item.info.shortname; if (name.StartsWith("seed")) { double chance = (config.forager.chanceincrease * skilllevel) * 100; if ((Random.Range(0, 101) <= chance) == true) { double addseeds = (config.forager.chanceincrease * skilllevel) * 2; if (addseeds <= 1) { addseeds = 1; } item.amount += (int)addseeds; } return; } if (name.Contains("wood")) { addxp = config.xpGather.treexp; } if (name.Contains("berry") || name.Contains("clone") || name == "mushroom" || name == "cloth" || name == "pumpkin" || name == "corn" || name == "potato") { addxp = config.xpGather.plantxp; } //double results = item.amount * (gatherincrease * skilllevel); double results = item.amount + (item.amount * (gatherincrease * skilllevel)); // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * results; results += captaincyboost; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.foragergr) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * results; results += rankboost; } if (skilllevel >= 1) { if (results <= 1.5 && gatherincrease != 0) { item.amount = 2; } else { item.amount = (int)results; } } GainExp(player, addxp); // Harvest Tracking if (name.Contains("wood")) { HarvestRecord(player, "wood", (int)results); } if (name.Contains("cactus")) { HarvestRecord(player, "cactus", (int)results); } if (name.Contains("berry") && !name.Contains("seed")) { HarvestRecord(player, "berries", (int)results); } if (name.Contains("seed") && !name.Contains("berry")) { HarvestRecord(player, "seed", (int)results); } if (name.Contains("mushroom")) { HarvestRecord(player, "mushroom", (int)results); } if (name.Contains("cloth")) { HarvestRecord(player, "hemp", (int)results); } if (name.Contains("pumpkin")) { HarvestRecord(player, "pumpkin", (int)results); } if (name.Contains("corn")) { HarvestRecord(player, "corn", (int)results); } if (name.Contains("potato")) { HarvestRecord(player, "potato", (int)results); } } #endregion #region Player Health/Recovery private object PlayerMetabolismControl(PlayerMetabolism metabolism, BasePlayer player, float delta, int might) { // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return null; } } // Reduce Bleeding if (metabolism.bleeding.value > 0) { metabolism.bleeding.value -= ((float)config.might.bleedreduction * might) * metabolism.bleeding.value; } // Reduce Radiation if (metabolism.radiation_level.value > 0) { metabolism.radiation_level.value -= ((float)config.might.radreduction * might) * metabolism.radiation_level.value; } if (metabolism.radiation_poison.value > 0) { metabolism.radiation_poison.value -= ((float)config.might.radreduction * might) * metabolism.radiation_poison.value; } // Heat Reduction if (metabolism.temperature.lastValue >= 35) { metabolism.temperature.value -= ((float)config.might.heattolerance * might) * 20; } // Cold Reduction if (metabolism.temperature.lastValue <= 10) { metabolism.temperature.value += (int)Math.Round(((float)config.might.coldtolerance * might) * 20, 0); } return null; } private object OnRunPlayerMetabolism(PlayerMetabolism metabolism, BasePlayer player, float delta) { if (player == null || metabolism == null || !player.userID.IsSteamId()) return null; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return null; } } XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return null; if (xprecord.Might > 0) { PlayerMetabolismControl(metabolism, player, delta, xprecord.Might); } // Fisher if (xprecord.Fisher > 0 && metabolism.oxygen.value < 1) { metabolism.oxygen.value += (((float)config.fisher.oxygenreduction * xprecord.Fisher) * 0.1f); } return null; } private void OnPlayerHealthChange(BasePlayer player) { if (player == null || !player.userID.IsSteamId() || player.IsNpc) return; if (!player.IsConnected) return; if (!player.isSpawned) return; LiveStats(player, true); } private void OnPlayerRevive(BasePlayer reviver, BasePlayer player) { if (reviver == null || !reviver.userID.IsSteamId() || player == null || !player.userID.IsSteamId()) return; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return; } } XPRecord xprecord = GetXPRecord(reviver); double addxp = config.xpGain.playerrevive; GainExp(reviver, addxp); if (xprecord.Medic <= 0) return; double addhealth = xprecord.Medic * config.medic.revivehp; // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * addhealth; addhealth += captaincyboost; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.medicrevivala) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * addhealth; addhealth += rankboost; } player._health = (float)(player._health + addhealth); player.ChatMessage(XPLang("medicreviveplayer", player.UserIDString, addhealth)); reviver.ChatMessage(XPLang("medicrevivereviver", reviver.UserIDString, addhealth)); } private void OnPlayerRecovered(BasePlayer player) { if (player == null || !player.userID.IsSteamId()) return; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return; } } XPRecord xprecord = GetXPRecord(player); if (xprecord.Medic <= 0) return; double addhealth = xprecord.Medic * config.medic.revivehp; // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * addhealth; addhealth += captaincyboost; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.medicrecovera) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * addhealth; addhealth += rankboost; } player._health = (float)(player._health + addhealth); player.ChatMessage(XPLang("medicrecoverplayer", player.UserIDString, addhealth)); } private object OnLoseCondition(Item item, ref float amount) { if (item == null) return null; BasePlayer player = item.GetOwnerPlayer(); if (player == null || !player.userID.IsSteamId() || player.IsNpc) return null; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return null; } } XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return null; var activeitem = player.GetActiveItem(); // Weaponry Stat if (xprecord.Weaponry >= 1) { // Chance to reduce condition damage double reductionchance = (config.weaponry.reductionchance * xprecord.Weaponry) * 100; if ((Random.Range(0, 101) <= reductionchance) == true) { //Tools if (item.info.shortname.Contains("hatchet") || item.info.shortname.Contains("axe") || item.info.shortname.Contains("pickaxe") || item.info.shortname.Contains("icepick")) { double reducecondition = amount * (xprecord.Weaponry * config.weaponry.tool); amount -= (float)reducecondition; // Make sure reduction does not go 0 or add condition if (amount < config.weaponry.mindamage) { amount = (float)config.weaponry.mindamage; } } // Power Tools if (item.info.shortname.Contains("chainsaw") || item.info.shortname.Contains("jackhammer")) { double reducecondition = amount * (xprecord.Weaponry * config.weaponry.powertools); amount -= (float)reducecondition; // Make sure reduction does not go 0 or add condition if (amount < config.weaponry.mindamage) { amount = (float)config.weaponry.mindamage; } } // Melee Weapons if (item.info.shortname.Contains("spear") || item.info.shortname.Contains("knife") || item.info.shortname.Contains("mace") || item.info.shortname.Contains("machete") || item.info.shortname.Contains("club") || item.info.shortname.Contains("sword") || item.info.shortname.Contains("longsword") || item.info.shortname.Contains("cleaver")) { double reducecondition = amount * (xprecord.Weaponry * config.weaponry.meleeweapons); amount -= (float)reducecondition; // Make sure reduction does not go 0 or add condition if (amount < config.weaponry.mindamage) { amount = (float)config.weaponry.mindamage; } } // Projectile Weapons if (item.info.shortname.Contains("rifle") || item.info.shortname.Contains("smg") || item.info.shortname.Contains("shotgun") || item.info.shortname.Contains("bow") || item.info.shortname.Contains("pistol") || item.info.shortname.Contains("lmg")) { double reducecondition = amount * (xprecord.Weaponry * config.weaponry.projectileweapons); amount -= (float)reducecondition; // Make sure reduction does not go 0 or add condition if (amount < config.weaponry.mindamage) { amount = (float)config.weaponry.mindamage; } } } return amount; } // Fisher Diving Tank Reduction if (xprecord.Fisher >= 1 && item.info.shortname.Equals("diving.tank")) { double reducedair = amount * (xprecord.Fisher * config.fisher.oxygentankreduction); amount -= (float)reducedair; // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.fisherotr) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * amount; amount -= (float)rankboost; } if (amount <= 0) { amount = 0.25f; } return amount; } return null; } private void MightAttributes(BasePlayer player) { if (player == null || !player.userID.IsSteamId() || !player.isSpawned) return; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return; } } XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; if (xprecord.Might > 0) { // Increase Hunger Max - Reset to default then calculate new max player.metabolism.calories.max = 500; double maxcalories = (config.might.metabolism * xprecord.Might) * player.metabolism.calories.max; // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.metabolism) { maxcalories += xprecord.rank * config.xpLevelRanks.rankstatboostamount; } player.metabolism.calories.max += (float)maxcalories; // Increase Thirst Max - Reset to default then calculate new max player.metabolism.hydration.max = 250; double maxhydration = (config.might.metabolism * xprecord.Might) * player.metabolism.hydration.max; // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.metabolism) { maxhydration += xprecord.rank * config.xpLevelRanks.rankstatboostamount; } player.metabolism.hydration.max += (float)maxhydration; } } private object OnPlayerAddModifiers(BasePlayer player, Item item, ItemModConsumable consumable) { // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return null; } } // Update LiveUI for Armor if (item.info.shortname.Contains("maxhealthtea")) { LiveStats(player, true, item.info.shortname); } // Medic Skill Increase XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return null; if (xprecord.Medic <= 0) return null; string tea = item.info.shortname; double addhealth = xprecord.Medic * config.medic.teas; if (tea == "healingtea") { addhealth = 30 * addhealth; } if (tea == "healingtea.advanced") { addhealth = 50 * addhealth; } if (tea == "healingtea.pure") { addhealth = 75 * addhealth; } player._health += (float)addhealth; return null; } private void PlayerArmor(BasePlayer player) { if (player == null || !player.userID.IsSteamId() || !player.isSpawned) return; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return; } } XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; if (xprecord.Might <= 0) return; var maxarmor = 100 + ((xprecord.Might * config.might.armor) * 100); player._maxHealth = (float)maxarmor; LiveStats(player, true); } #endregion #region Player Actions private object OnHealingItemUse(MedicalTool tool, BasePlayer player) { if (player == null || !player.userID.IsSteamId() || tool == null) return null; // Check for Addon and Special Item string item = player.GetActiveItem().name; if (XPerienceAddon != null && item != null) { string itemname = String.Concat(item.ToLower().Where(c => !Char.IsWhiteSpace(c))); if(XPerienceAddon.Call("GetBoosters", player, itemname, "item")) { return true; } } // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return null; } } // If Addon not present or not special item continue var toolused = tool.name; if (tool.name.Contains("bandage")) { toolused = "Bandage"; } if (tool.name.Contains("syringe")) { toolused = "Medical Syringe"; } XPRecord xprecord = GetXPRecord(player); if (xprecord.Medic <= 0) return null; if ((!config.medic.preventbandageboost && toolused == "Bandage") || toolused == "Medical Syringe") { double addhealth = xprecord.Medic * config.medic.tools; // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * addhealth; addhealth += captaincyboost; } // Ranks if (xprecord.rank > 0 && config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.medictools) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * addhealth; addhealth += rankboost; } player._health = (float)(player._health + addhealth); player.ChatMessage(XPLang("medictooluse", player.UserIDString, addhealth, toolused)); return null; } return null; } private void OnPlayerInput(BasePlayer player, InputState input) { if (player == null || input == null) return; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return; } } XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; if (xprecord.Dexterity <= 0) return; if (input.WasJustPressed(BUTTON.USE) && player.isMounted) { ChangeHorseSpeed(player); } if (input.WasJustPressed(BUTTON.RELOAD) && player.isMounted) { ChangeBoatSpeed(player); if (config.dexterity.vehiclespeed > 0) { ChangeVehicleSpeed(player); ChangeMiniCopterSpeed(player); ChangeSnowMobSpeed(player); } } } private void OnItemAction(Item item, string action, BasePlayer player) { if (player == null || !player.userID.IsSteamId() || item == null || action == null || item.info.shortname == null) return; if(XPerienceAddon != null && item.name != null) { string itemname = String.Concat(item.name.ToLower().Where(c => !Char.IsWhiteSpace(c))); if (XPerienceAddon.Call("IsSpecialItem", player, itemname)) return; } var itemshortname = item.info.shortname; double addxp = 0; switch(action) { case "upgrade_item": switch (itemshortname) { case "xmas.present.small": addxp = config.xpGain.upgradegiftsmed; break; case "xmas.present.medium": addxp = config.xpGain.upgradegiftslarge; break; } break; case "unwrap": switch(itemshortname) { case "xmas.present.small": addxp = config.xpGain.opengifts; break; case "xmas.present.medium": addxp = config.xpGain.opengiftsmed; break; case "xmas.present.large": addxp = config.xpGain.opengiftslarge; break; } break; } GainExp(player, addxp); } #endregion #region Stat & Skill Hooks/Helpers private readonly Dictionary rarityValues = new Dictionary { {Rarity.None, 500}, {Rarity.Common, 20}, {Rarity.Uncommon, 75}, {Rarity.Rare, 125}, {Rarity.VeryRare, 500}, }; private object OnResearchCostDetermine(Item item, ResearchTable researchTable) { int rarityvalue = item.info != null ? rarityValues[item.info.rarity] : 500; if (config.mentality.researchcost == 0) return rarityvalue; if (researchTable == null || researchTable.user == null) return rarityvalue; XPRecord xprecord = GetXPRecord(researchTable.user); if (xprecord.Mentality == 0 || xprecord == null) return rarityvalue; double reducecost = (config.mentality.researchcost * xprecord.Mentality) * rarityvalue; // Captaincy if (researchTable.user.Team != null && researchTable.user.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(researchTable.user) * reducecost; reducecost += captaincyboost; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.researchcost) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * reducecost; reducecost += rankboost; } double researchcost = rarityvalue - reducecost; return (int)researchcost; } [HookMethod("OnResearchCost")] private int OnResearchCost(int rarityvalue, BasePlayer player) { if (player == null) { return rarityvalue; } XPRecord xprecord = GetXPRecord(player); if (xprecord.Mentality == 0) return rarityvalue; double reducecost = (config.mentality.researchcost * xprecord.Mentality) * rarityvalue; double researchcost = rarityvalue - reducecost; return (int)researchcost; } [HookMethod("OnItemResearchReduction")] private float OnItemResearchReduction(float value, BasePlayer player) { XPRecord xprecord = GetXPRecord(player); if (xprecord == null || xprecord.Mentality == 0) return value; double researchspeed = (config.mentality.researchspeed * xprecord.Mentality) * value; return value - (float)researchspeed; } private bool CheckUnlockPath(BasePlayer player, TechTreeData.NodeInstance node, TechTreeData techTree) { if (node.inputs.Count == 0) return true; var unlockPath = false; foreach (int nodeId in node.inputs) { var selectNode = techTree.GetByID(nodeId); if (selectNode.itemDef == null) return true; if (!techTree.HasPlayerUnlocked(player, selectNode)) continue; if (CheckUnlockPath(player, selectNode, techTree)) unlockPath = true; } return unlockPath; } private object CanUnlockTechTreeNode(BasePlayer player, TechTreeData.NodeInstance node, TechTreeData techTree) { if (player == null) return null; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return null; // Check Tech Tree Settings if (config.mentality.locktechtree) { if(config.mentality.unlocktechtreelevel == 0) { player.ChatMessage(XPLang("techtreelocked", player.UserIDString)); return false; } if(xprecord.Mentality < config.mentality.unlocktechtreelevel) { player.ChatMessage(XPLang("techtreereq", player.UserIDString, config.mentality.unlocktechtreelevel)); return false; } } // Continue if Tech Tree Unlocked if (xprecord.Mentality == 0) return null; int rarityvalue = rarityValues[node.itemDef.rarity]; double reducecost = (config.mentality.researchcost * xprecord.Mentality) * rarityvalue; double researchcost = rarityvalue - reducecost; var cost = (int)researchcost; var itemdefinition = ItemManager.FindItemDefinition("scrap"); techTree.GetEntryNode().costOverride = cost; if (player.inventory.GetAmount(itemdefinition.itemid) < cost) { player.ChatMessage(XPLang("techtreenode", player.UserIDString, cost, node.itemDef.displayName.english)); return false; } return CheckUnlockPath(player, node, techTree); } private object OnTechTreeNodeUnlock(Workbench workbench, TechTreeData.NodeInstance node, BasePlayer player) { if (workbench == null || player == null) return null; XPRecord xprecord = GetXPRecord(player); if (xprecord == null || xprecord.Mentality == 0) return null; int rarityvalue = rarityValues[node.itemDef.rarity]; double reducecost = (config.mentality.researchcost * xprecord.Mentality) * rarityvalue; double researchcost = rarityvalue - reducecost; var cost = (int)researchcost; int itemid = ItemManager.FindItemDefinition("scrap").itemid; player.inventory.Take((List)null, itemid, cost); player.blueprints.Unlock(node.itemDef); Interface.CallHook("OnTechTreeNodeUnlocked", workbench, node, player); return false; } private void OnItemResearch(ResearchTable table, Item targetItem, BasePlayer player) { if (player == null) return; XPRecord xprecord = GetXPRecord(player); double researchspeed = (config.mentality.researchspeed * xprecord.Mentality) * table.researchDuration; // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * researchspeed; researchspeed += captaincyboost; } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.researchspeed) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * researchspeed; researchspeed += rankboost; } table.researchDuration -= (float)researchspeed; } private void OnMixingTableToggle(MixingTable table, BasePlayer player) { if (table.IsOn()) return; if (player == null) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; if (xprecord.Medic > 0) { NextTick(() => { double reducetotal = (xprecord.Medic * config.medic.crafttime) * table.TotalMixTime; double reduceremaining = (xprecord.Medic * config.medic.crafttime) * table.TotalMixTime; table.TotalMixTime -= (float)reducetotal; table.RemainingMixTime -= (float)reduceremaining; table.SendNetworkUpdateImmediate(); }); } } private double CaptaincyTeamSkillBoost(BasePlayer player) { if (!CaptaincyTeamDistance(player) || player == null || !player.userID.IsSteamId() || player.Team == null || player.Team.members.Count <= 1) return 0; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return 0; } } foreach (var team in player.Team.members) { if (team == player.userID) continue; BasePlayer teammember = RelationshipManager.FindByID(team); if (teammember == null || !teammember.IsConnected) continue; XPRecord teamxprecord = GetXPRecord(teammember); if (teamxprecord.Captaincy <= 0) continue; double skillboost = teamxprecord.Captaincy * config.captaincy.skillboost; return skillboost; } return 0; } private double CaptaincyTeamXPBoost(BasePlayer player) { if (!CaptaincyTeamDistance(player) || player == null || !player.userID.IsSteamId() || player.Team == null || player.Team.members.Count <= 1) return 0; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return 0; } } foreach (var team in player.Team.members) { if (!team.IsSteamId()) continue; if (team == player.userID) continue; BasePlayer teammember = RelationshipManager.FindByID(team); XPRecord teamxprecord = GetXPRecord(teammember); if (teammember == null || teamxprecord == null) continue; if (teamxprecord.Captaincy <= 0) continue; double addxp = (teamxprecord.Captaincy * config.captaincy.xpboost); return addxp; } return 0; } private bool CaptaincyTeamDistance(BasePlayer player) { if (player == null || !player.userID.IsSteamId() || player.Team == null || player.Team.members.Count <= 1) return false; foreach (var team in player.Team.members) { if (team == player.userID) continue; BasePlayer teammember = RelationshipManager.FindByID(team); if (teammember == null || !teammember.IsConnected) continue; XPRecord teamxprecord = GetXPRecord(teammember); if (teamxprecord.Captaincy <= 0) continue; float teamdistance = teamxprecord.Captaincy * config.captaincy.captaincydistance; // Ranks if (config.xpLevelRanks.rankskillboost && !teamxprecord.DisableRank && config.Rankboostssettings.distance) { double rankboost = (teamxprecord.rank * config.xpLevelRanks.rankstatboostamount) * teamdistance; teamdistance += (float)rankboost; } if (Vector3.Distance(player.transform.position, teammember.transform.position) >= teamdistance) continue; return true; } return false; } private void RandomForagerItem(BasePlayer player) { if (player == null) return; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return; } } XPRecord xprecord = GetXPRecord(player); if (xprecord == null || xprecord.Forager <= 0) return; double itemchance = (config.forager.randomchance * xprecord.Forager) * 100; // Rank Boost if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.foragerric) { double rankboostitem = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * itemchance; itemchance += rankboostitem; } // Item Chance if ((Random.Range(0, 101) <= itemchance) == true) { int randomroll = Random.Range(0, config.forager.randomChanceList.Count); var selected = config.forager.randomChanceList[randomroll]; ItemDefinition definition = ItemManager.FindItemDefinition(selected.shortname); if (definition == null) { Puts($"[Forager] Invalid shortname in config for item number {selected}"); return; } if (config.defaultOptions.dropsgotoplayerinventory) { Item createitem = ItemManager.CreateByItemID(definition.itemid, selected.amount, selected.SkinID); if (!string.IsNullOrEmpty(selected.displayname)) { createitem.name = selected.displayname; createitem.MarkDirty(); } // Return if Item is Null if (createitem == null) { Puts($"[Forager List] Error creating item with skinid {selected.SkinID} for item {selected.shortname}"); return; } // Give Item to Player player.GiveItem(createitem); } else { Item createitem = ItemManager.CreateByItemID(definition.itemid, selected.amount, selected.SkinID); if (!string.IsNullOrEmpty(selected.displayname)) { createitem.name = selected.displayname; createitem.MarkDirty(); } // Return if Item is Null if (createitem == null) { Puts($"[Forager List] Error creating item with skinid {selected.SkinID} for item {selected.shortname}"); return; } player.Command("note.inv", definition.itemid, selected.amount, selected.SkinID); // Give Item to Player player.GiveItem(createitem); } // Sound Effect if (config.soundEffects.foragerloot) { player.RunEffect($"{config.soundEffects.foragerlooteffect}"); } } } private void RandomScavengerItem(BasePlayer player) { if (player == null) return; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return; } } XPRecord xprecord = GetXPRecord(player); if (xprecord == null || xprecord.Scavenger <= 0) return; var scavChanceLists = new Dictionary(); int number = 0; foreach (var item in config.scavenger.scavChanceList) { if (item.Value.requiredlevel <= xprecord.Scavenger) { scavChanceLists.Add(number, item.Value); number++; } } double scavchance = (config.scavenger.scavchance * xprecord.Scavenger) * 100; // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.scavcic) { double rankboostchance = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * scavchance; scavchance += rankboostchance; } if ((Random.Range(0, 101) <= scavchance) == true) { int scavroll = Random.Range(0, scavChanceLists.Count); var scavitem = scavChanceLists[scavroll]; ItemDefinition definition = ItemManager.FindItemDefinition(scavitem.shortname); if (definition == null) { Puts($"[Scavenger] Invalid shortname in config for item number {scavitem}"); return; } var scavmultiplier = Math.Ceiling(xprecord.Scavenger * (scavitem.amount * config.scavenger.customscavmultiplier)); if (config.scavenger.customscavrandom) { scavmultiplier = Random.Range(scavitem.amount, (float)scavmultiplier); } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.scavcim) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * scavmultiplier; scavmultiplier += rankboost; } if (scavmultiplier > scavitem.maxamount) { scavmultiplier = scavitem.maxamount; } if (config.defaultOptions.dropsgotoplayerinventory) { Item createitem = ItemManager.CreateByItemID(definition.itemid, (int)scavmultiplier, scavitem.SkinID); if (!string.IsNullOrEmpty(scavitem.displayname)) { createitem.name = scavitem.displayname; createitem.MarkDirty(); } // Return if Item is Null if (createitem == null) { Puts($"[Scavenger List] Error creating item with skinid {scavitem.SkinID} for item {scavitem.shortname}"); return; } // Give Item to Player player.GiveItem(createitem); } else { Item createitem = ItemManager.CreateByItemID(definition.itemid, (int)scavmultiplier, scavitem.SkinID); if (!string.IsNullOrEmpty(scavitem.displayname)) { createitem.name = scavitem.displayname; createitem.MarkDirty(); } // Return if Item is Null if (createitem == null) { Puts($"[Scavenger List] Error creating item with skinid {scavitem.SkinID} for item {scavitem.shortname}"); return; } player.Command("note.inv", definition.itemid, scavitem.amount, scavitem.SkinID); // Give Item to Player player.GiveItem(createitem); } // Sound Effect if (config.soundEffects.scavengerloot) { player.RunEffect($"{config.soundEffects.scavengerlooteffect}"); } } } private void IncreaseLootContainers(BasePlayer player, LootContainer lootcontainer) { if (player == null) return; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return; } } XPRecord xprecord = GetXPRecord(player); if (xprecord.Scavenger <= 0) return; double scavlootchance = (config.scavenger.scavlootchance * xprecord.Scavenger) * 100; // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.scavelc) { double rankboostchance = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * scavlootchance; scavlootchance += rankboostchance; } if ((Random.Range(0, 101) <= scavlootchance) == true) { if (lootcontainer.inventory == null) return; lootcontainer.inventory.itemList.ForEach(item => { if (config.scavenger.componentsonly) { if (item != null && item.info.category == ItemCategory.Component) { int newamount = (int)Math.Ceiling((xprecord.Scavenger * config.scavenger.scavmultiplier) * item.amount); // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.scavelm) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * newamount; newamount += (int)Math.Ceiling(rankboost); } item.amount = newamount; } } else { if (item != null) { int newamount = (int)Math.Ceiling((xprecord.Scavenger * config.scavenger.scavmultiplier) * item.amount); // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * newamount; newamount += (int)Math.Ceiling(rankboost); } item.amount = newamount; } } }); // Sound Effect if (config.soundEffects.scavengerloot) { player.RunEffect($"{config.soundEffects.scavengerlooteffect}"); } } } private void IncreaseLootContainerDrops(ItemContainer lootcontainer) { if (lootcontainer == null) return; var lootentity = lootcontainer.entityOwner as LootContainer; if (lootentity == null || lootentity.IsDestroyed) return; var player = lootentity.lastAttacker as BasePlayer; if (player == null) return; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return; } } XPRecord xprecord = GetXPRecord(player); if (xprecord == null || xprecord.Scavenger <= 0) return; double scavlootchance = (config.scavenger.scavlootchance * xprecord.Scavenger) * 100; // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.scavelc) { double rankboostchance = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * scavlootchance; scavlootchance += rankboostchance; } if ((Random.Range(0, 101) <= scavlootchance) == true) { lootcontainer.itemList.ForEach(item => { if (config.scavenger.componentsonly) { if (item != null && item.info.category == ItemCategory.Component) { int newamount = (int)Math.Ceiling((xprecord.Scavenger * config.scavenger.scavmultiplier) * item.amount); // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * newamount; newamount += (int)Math.Ceiling(rankboost); } item.amount = newamount; } } else { if (item != null) { int newamount = (int)Math.Ceiling((xprecord.Scavenger * config.scavenger.scavmultiplier) * item.amount); // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.scavelm) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * newamount; newamount += (int)Math.Ceiling(rankboost); } item.amount = newamount; } } }); // Sound Effect if (config.soundEffects.scavengerloot) { player.RunEffect($"{config.soundEffects.scavengerlooteffect}"); } } } private void IncreaseLootCorpse(BasePlayer player, LootableCorpse corpse) { XPRecord xprecord = GetXPRecord(player); // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return; } } if (xprecord.Scavenger <= 0) return; double scavlootchance = (config.scavenger.scavlootchance * xprecord.Scavenger) * 100; // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.scavelc) { double rankboostchance = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * scavlootchance; scavlootchance += rankboostchance; } if ((Random.Range(0, 101) <= scavlootchance) == true) { foreach (var corpseContainer in corpse.containers) { if (corpseContainer.itemList.Count == 0) continue; foreach (var item in corpseContainer.itemList) { if (config.scavenger.componentsonly) { if (item != null && item.info.category == ItemCategory.Component) { int newamount = (int)Math.Ceiling((xprecord.Scavenger * config.scavenger.scavmultiplier) * item.amount); // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.scavelm) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * newamount; newamount += (int)Math.Ceiling(rankboost); } item.amount = newamount; } } else { if (item != null) { int newamount = (int)Math.Ceiling((xprecord.Scavenger * config.scavenger.scavmultiplier) * item.amount); // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.scavelm) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * newamount; newamount += (int)Math.Ceiling(rankboost); } item.amount = newamount; } } } } // Sound Effect if (config.soundEffects.scavengerloot) { player.RunEffect($"{config.soundEffects.scavengerlooteffect}"); } } } private void OnFishCatch(Item fish, BaseFishingRod fishingRod, BasePlayer player) { if (player == null || fish == null) return; XPRecord xprecord = GetXPRecord(player); double addxp = config.xpGain.fishxp; GainExp(player, addxp); // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return; } } if (xprecord.Fisher > 0) { var fishname = fish.info.shortname; if (fishname.Contains("anchovy") || fishname.Contains("catfish") || fishname.Contains("herring") || fishname.Contains("minnow") || fishname.Contains("roughy") || fishname.Contains("salmon") || fishname.Contains("sardine") || fishname.Contains("shark") || fishname.Contains("trout") || fishname.Contains("Perch")) { double results = Math.Round(fish.amount + (xprecord.Fisher * config.fisher.fishamountincrease)); // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * results; results += (int)Math.Ceiling(captaincyboost); } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.fisherfa) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * results; results += (int)Math.Ceiling(rankboost); } fish.amount = (int)results; } else { double results = Math.Round(fish.amount + (xprecord.Fisher * config.fisher.itemamountincrease)); // Captaincy if (player.Team != null && player.Team.members.Count > 1) { double captaincyboost = CaptaincyTeamSkillBoost(player) * results; results += (int)Math.Ceiling(captaincyboost); } // Ranks if (config.xpLevelRanks.rankskillboost && !xprecord.DisableRank && config.Rankboostssettings.fisheria) { double rankboost = (xprecord.rank * config.xpLevelRanks.rankstatboostamount) * results; results += (int)Math.Ceiling(rankboost); } fish.amount = (int)results; } } } private void OnMagazineReload(BaseProjectile projectile, int desiredAmount, BasePlayer player) { if (config.weaponry.reloadhook != "OnMagazineReload") return; if (player == null || !player.userID.IsSteamId() || player.IsNpc) return; if (config.weaponry.maxammo == 0) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; bool skinboxdetected = false; // Check for SkinBox mod as conflict occur if (SkinBox != null && config.weaponry.skinboxdisable) { skinboxdetected = true; } if (skinboxdetected && projectile.skinID != 0) return; // Add New Weapon Data if (!_weaponCache.ContainsKey(projectile.net.ID)) { int defaultammo = projectile.primaryMagazine.capacity; int maxammo = projectile.primaryMagazine.capacity; if (xprecord.Weaponry >= 1) { maxammo = (int)Math.Ceiling(projectile.primaryMagazine.capacity + ((config.weaponry.maxammo * xprecord.Weaponry) * projectile.primaryMagazine.capacity)); } AddWeaponData(player, projectile, defaultammo, maxammo); if(maxammo >= defaultammo * config.weaponry.maxammolimit) { maxammo = (int)Math.Ceiling(defaultammo * config.weaponry.maxammolimit); projectile.primaryMagazine.capacity = maxammo; return; } projectile.primaryMagazine.capacity = maxammo; return; } // Get Weapon Data Weapon weapon; if (_weaponCache.TryGetValue(projectile.net.ID, out weapon)) { // Weapon Found / Reset Weapon / Boost Max Ammo if Player Has Ability int maxammo = weapon.defaultammo; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) projectile.primaryMagazine.capacity = maxammo; return; } } if (xprecord.Weaponry >= 1) { maxammo = (int)Math.Ceiling(weapon.defaultammo + ((config.weaponry.maxammo * xprecord.Weaponry) * weapon.defaultammo)); } if (maxammo >= weapon.defaultammo * config.weaponry.maxammolimit) { maxammo = (int)Math.Ceiling(weapon.defaultammo * config.weaponry.maxammolimit); projectile.primaryMagazine.capacity = maxammo; return; } projectile.primaryMagazine.capacity = maxammo; return; } } private void OnWeaponReload(BaseProjectile projectile, BasePlayer player) { if (config.weaponry.reloadhook != "OnWeaponReload") return; if (player == null || !player.userID.IsSteamId() || player.IsNpc) return; if (config.weaponry.maxammo == 0) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; bool skinboxdetected = false; // Check for SkinBox mod as conflict occur if (SkinBox != null && config.weaponry.skinboxdisable) { skinboxdetected = true; } if (skinboxdetected && projectile.skinID != 0) return; // Add New Weapon Data if (!_weaponCache.ContainsKey(projectile.net.ID)) { int defaultammo = projectile.primaryMagazine.capacity; int maxammo = projectile.primaryMagazine.capacity; if (xprecord.Weaponry >= 1) { maxammo = (int)Math.Ceiling(projectile.primaryMagazine.capacity + ((config.weaponry.maxammo * xprecord.Weaponry) * projectile.primaryMagazine.capacity)); } AddWeaponData(player, projectile, defaultammo, maxammo); if (maxammo >= defaultammo * config.weaponry.maxammolimit) { maxammo = (int)Math.Ceiling(defaultammo * config.weaponry.maxammolimit); projectile.primaryMagazine.capacity = maxammo; return; } projectile.primaryMagazine.capacity = maxammo; return; } // Get Weapon Data Weapon weapon; if (_weaponCache.TryGetValue(projectile.net.ID, out weapon)) { // Weapon Found / Reset Weapon / Boost Max Ammo if Player Has Ability int maxammo = weapon.defaultammo; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) projectile.primaryMagazine.capacity = maxammo; return; } } if (xprecord.Weaponry >= 1) { maxammo = (int)Math.Ceiling(weapon.defaultammo + ((config.weaponry.maxammo * xprecord.Weaponry) * weapon.defaultammo)); } if (maxammo >= weapon.defaultammo * config.weaponry.maxammolimit) { maxammo = (int)Math.Ceiling(weapon.defaultammo * config.weaponry.maxammolimit); projectile.primaryMagazine.capacity = maxammo; return; } projectile.primaryMagazine.capacity = maxammo; return; } } private void OnSolarPanelSunUpdate(SolarPanel panel, int currentEnergy) { panel.maximalPowerOutput = config.electrician.solarpaneldefault; string panelowner = panel.OwnerID.ToString(); if (!panelowner.IsSteamId()) return; var player = FindPlayer(panelowner); if (player == null) return; XPRecord xprecord = GetXPRecord(player); // Max Output // Add new solar panel if missing if (!_electricianCache.ContainsKey(panel.net.ID)) { if (xprecord.Electrician < 1) { AddElectricianData(panel.net.ID, "solarpanel", config.electrician.solarpaneldefault, config.electrician.solarpaneldefault, panel.OwnerID); return; } if (xprecord.Electrician >= 1) { double newmaxenergy = ((config.electrician.solarpanelmaxincrease * xprecord.Electrician) * panel.maximalPowerOutput) + panel.maximalPowerOutput; AddElectricianData(panel.net.ID, "solarpanel", config.electrician.solarpaneldefault, (int)Math.Round(newmaxenergy), panel.OwnerID); panel.maximalPowerOutput = (int)Math.Round(newmaxenergy); } } // Load solar panel data if found ElectricianD loadpanel; if (_electricianCache.TryGetValue(panel.net.ID, out loadpanel)) { if (xprecord.Electrician < 1) { loadpanel.newmaxoutput = config.electrician.solarpaneldefault; return; } double maxoutput = ((config.electrician.solarpanelmaxincrease * xprecord.Electrician) * panel.maximalPowerOutput) + panel.maximalPowerOutput; if((int)maxoutput != loadpanel.newmaxoutput) { loadpanel.newmaxoutput = (int)Math.Round(maxoutput); panel.maximalPowerOutput = (int)Math.Round(maxoutput); } else { panel.maximalPowerOutput = loadpanel.newmaxoutput; } } // Current Input & Output if (xprecord.Electrician >= 1) { double increaseinput = ((config.electrician.solarpanelinputincrease * xprecord.Electrician) * currentEnergy) + currentEnergy; if (increaseinput > panel.maximalPowerOutput) { increaseinput = panel.maximalPowerOutput; } panel.currentEnergy = (int)Math.Round(increaseinput); if (currentEnergy <= 0 && config.electrician.allowminsolarinput) { panel.currentEnergy = config.electrician.minsolarinput * xprecord.Electrician; } } } private void OnInputUpdate(IOEntity entity, int inputAmount, int slot) { // ElectricBattery if (entity.GetType().Name == "ElectricBattery") { ElectricBattery electricBattery = (ElectricBattery)entity; string batteryowner = electricBattery.OwnerID.ToString(); if (!batteryowner.IsSteamId()) return; var player = FindPlayer(batteryowner); if (player == null) return; XPRecord xprecord = GetXPRecord(player); int defaultmaxoutput = 0; double newmaxoutput = 0; string name = ""; switch (electricBattery.ShortPrefabName) { case "smallrechargablebattery.deployed": defaultmaxoutput = config.electrician.smallbatterydefault; newmaxoutput = config.electrician.smallbatterymaxincrease; name = "SmallBattery"; break; case "medium.rechargable.battery.deployed": defaultmaxoutput = config.electrician.mediumbatterydefault; newmaxoutput = config.electrician.mediumbatterymaxincrease; name = "MediumBattery"; break; case "large.rechargable.battery.deployed": defaultmaxoutput = config.electrician.largebatterydefault; newmaxoutput = config.electrician.largebatterymaxincrease; name = "LargeBattery"; break; } // Add new battery if missing if (!_electricianCache.ContainsKey(electricBattery.net.ID)) { if (xprecord.Electrician < 1) { electricBattery.maxOutput = defaultmaxoutput; AddElectricianData(electricBattery.net.ID, name, defaultmaxoutput, defaultmaxoutput, electricBattery.OwnerID); return; } if (xprecord.Electrician >= 1) { electricBattery.maxOutput = defaultmaxoutput; double newmaxenergy = ((newmaxoutput * xprecord.Electrician) * electricBattery.maxOutput) + electricBattery.maxOutput; AddElectricianData(electricBattery.net.ID, name, defaultmaxoutput, (int)Math.Round(newmaxenergy), electricBattery.OwnerID); electricBattery.maxOutput = (int)Math.Round(newmaxenergy); } } // Load solar panel data if found ElectricianD loadbattery; if (_electricianCache.TryGetValue(electricBattery.net.ID, out loadbattery)) { if (xprecord.Electrician < 1) { electricBattery.maxOutput = defaultmaxoutput; loadbattery.newmaxoutput = defaultmaxoutput; return; } double maxoutput = ((config.electrician.solarpanelmaxincrease * xprecord.Electrician) * electricBattery.maxOutput) + electricBattery.maxOutput; if ((int)maxoutput != loadbattery.newmaxoutput) { loadbattery.newmaxoutput = (int)Math.Round(maxoutput); electricBattery.maxOutput = (int)Math.Round(maxoutput); } else { electricBattery.maxOutput = loadbattery.newmaxoutput; } } } } private void OnOutputUpdate(IOEntity entity) { // Fuel Generator if (entity.GetType().Name == "FuelGenerator") { FuelGenerator generator = (FuelGenerator)entity; string generatorowner = generator.OwnerID.ToString(); if (!generatorowner.IsSteamId()) return; var player = FindPlayer(generatorowner); if (player == null) return; XPRecord xprecord = GetXPRecord(player); // Add new generator if missing if (!_electricianCache.ContainsKey(generator.net.ID)) { if (xprecord.Electrician < 1) { generator.outputEnergy = config.electrician.smallgeneratordefault; AddElectricianData(generator.net.ID, "SmallGenerator", config.electrician.smallgeneratordefault, config.electrician.smallgeneratordefault, generator.OwnerID); return; } if (xprecord.Electrician >= 1) { generator.outputEnergy = config.electrician.smallgeneratordefault; double newmaxenergy = ((config.electrician.smallgeneratormaxincrease * xprecord.Electrician) * generator.outputEnergy) + generator.outputEnergy; AddElectricianData(generator.net.ID, "SmallGenerator", config.electrician.smallgeneratordefault, (int)Math.Round(newmaxenergy), generator.OwnerID); generator.outputEnergy = (int)Math.Round(newmaxenergy); } } // Load generator data if found ElectricianD loadgenerator; if (_electricianCache.TryGetValue(generator.net.ID, out loadgenerator)) { if (xprecord.Electrician < 1) { generator.outputEnergy = config.electrician.smallgeneratordefault; loadgenerator.newmaxoutput = config.electrician.smallgeneratordefault; return; } double maxoutput = ((config.electrician.smallgeneratormaxincrease * xprecord.Electrician) * config.electrician.smallgeneratordefault) + config.electrician.smallgeneratordefault; if ((int)maxoutput != loadgenerator.newmaxoutput) { loadgenerator.newmaxoutput = (int)Math.Round(maxoutput); generator.outputEnergy = (int)Math.Round(maxoutput); } else { generator.outputEnergy = loadgenerator.newmaxoutput; } } } // Electric Battery if (entity.GetType().Name == "ElectricBattery") { ElectricBattery electricBattery = (ElectricBattery)entity; string batteryowner = electricBattery.OwnerID.ToString(); if (!batteryowner.IsSteamId()) return; var player = FindPlayer(batteryowner); if (player == null) return; XPRecord xprecord = GetXPRecord(player); int defaultbattmaxoutput = 0; double newbattmaxoutput = 0; string battname = ""; switch (electricBattery.ShortPrefabName) { case "smallrechargablebattery.deployed": defaultbattmaxoutput = config.electrician.smallbatterydefault; newbattmaxoutput = config.electrician.smallbatterymaxincrease; battname = "SmallBattery"; break; case "medium.rechargable.battery.deployed": defaultbattmaxoutput = config.electrician.mediumbatterydefault; newbattmaxoutput = config.electrician.mediumbatterymaxincrease; battname = "MediumBattery"; break; case "large.rechargable.battery.deployed": defaultbattmaxoutput = config.electrician.largebatterydefault; newbattmaxoutput = config.electrician.largebatterymaxincrease; battname = "LargeBattery"; break; } // Add new battery if missing if (!_electricianCache.ContainsKey(electricBattery.net.ID)) { if (xprecord.Electrician < 1) { electricBattery.maxOutput = defaultbattmaxoutput; AddElectricianData(electricBattery.net.ID, battname, defaultbattmaxoutput, defaultbattmaxoutput, electricBattery.OwnerID); return; } if (xprecord.Electrician >= 1) { electricBattery.maxOutput = defaultbattmaxoutput; double newmaxenergy = ((newbattmaxoutput * xprecord.Electrician) * electricBattery.maxOutput) + electricBattery.maxOutput; AddElectricianData(electricBattery.net.ID, battname, defaultbattmaxoutput, (int)Math.Round(newmaxenergy), electricBattery.OwnerID); electricBattery.maxOutput = (int)Math.Round(newmaxenergy); } } // Load battery data if found ElectricianD loadbattery; if (_electricianCache.TryGetValue(electricBattery.net.ID, out loadbattery)) { if (xprecord.Electrician < 1) { electricBattery.maxOutput = defaultbattmaxoutput; loadbattery.newmaxoutput = defaultbattmaxoutput; return; } double maxoutput = ((config.electrician.solarpanelmaxincrease * xprecord.Electrician) * defaultbattmaxoutput) + defaultbattmaxoutput; if ((int)maxoutput != loadbattery.newmaxoutput) { loadbattery.newmaxoutput = (int)Math.Round(maxoutput); electricBattery.maxOutput = (int)Math.Round(maxoutput); } else { electricBattery.maxOutput = loadbattery.newmaxoutput; } } } // Electric Windmill if(entity.GetType().Name == "ElectricWindmill") { ElectricWindmill windmill = (ElectricWindmill)entity; string windmillowner = windmill.OwnerID.ToString(); if (!windmillowner.IsSteamId()) return; var player = FindPlayer(windmillowner); if (player == null) return; XPRecord xprecord = GetXPRecord(player); // Max Output // Add new windmill if missing if (!_electricianCache.ContainsKey(windmill.net.ID)) { if (xprecord.Electrician < 1) { AddElectricianData(windmill.net.ID, "ElectricWindmill", config.electrician.electricwindmilldefault, config.electrician.electricwindmilldefault, windmill.OwnerID); return; } if (xprecord.Electrician >= 1) { double newmaxenergy = ((config.electrician.electricwindmillmaxincrease * xprecord.Electrician) * config.electrician.electricwindmilldefault) + config.electrician.electricwindmilldefault; AddElectricianData(windmill.net.ID, "ElectricWindmill", config.electrician.electricwindmilldefault, (int)Math.Round(newmaxenergy), windmill.OwnerID); windmill.maxPowerGeneration = (int)Math.Round(newmaxenergy); } } // Load windmill data if found ElectricianD loadwindmill; if (_electricianCache.TryGetValue(windmill.net.ID, out loadwindmill)) { if (xprecord.Electrician < 1) { loadwindmill.newmaxoutput = config.electrician.electricwindmilldefault; return; } double maxoutput = ((config.electrician.electricwindmillmaxincrease * xprecord.Electrician) * config.electrician.electricwindmilldefault) + config.electrician.electricwindmilldefault; if ((int)maxoutput != loadwindmill.newmaxoutput) { loadwindmill.newmaxoutput = (int)Math.Round(maxoutput); windmill.maxPowerGeneration = (int)Math.Round(maxoutput); } else { windmill.maxPowerGeneration = loadwindmill.newmaxoutput; } } // Current Input & Output if (xprecord.Electrician >= 1) { double increaseinput = ((config.electrician.electricwindmillincrease * xprecord.Electrician) * windmill.currentEnergy) + windmill.currentEnergy; if (increaseinput > windmill.maxPowerGeneration) { increaseinput = windmill.maxPowerGeneration; } windmill.currentEnergy = (int)Math.Round(increaseinput); } } } #endregion #region Vehicle / Mount Hooks and Helpers private void OnEntityMounted(BaseMountable entity, BasePlayer player) { if (player == null || entity == null || player.IsNpc || !player.userID.IsSteamId() || entity.GetParentEntity() == null) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; // Horse var horse = entity.GetParentEntity() as RidableHorse; if (horse != null) { if (_horseCache.ContainsKey(horse.net.ID)) { DefaultHorseData(horse); } if (xprecord.Dexterity >= 1) { player.ChatMessage(XPLang("horsespeedmessage", player.UserIDString)); } } // Boat var boat = entity.GetParentEntity() as BaseBoat; if (boat != null) { AddBoatData(player, boat); if (xprecord.dash == 1 && config.defaultOptions.enabledashpanel) { DashPanel(player, true, entity); } if (xprecord.Dexterity >= 1) { player.ChatMessage(XPLang("boatspeedmessage", player.UserIDString)); } } // Car var car = entity.VehicleParent() as ModularCar; if (car != null) { AddVehicleData(player, car); if (xprecord.dash == 1 && config.defaultOptions.enabledashpanel) { DashPanel(player, true, entity); } if (xprecord.Dexterity >= 1 && config.dexterity.vehiclespeed > 0) { player.ChatMessage(XPLang("vehiclespeedmessage", player.UserIDString)); } } // Mini Copter var mini = entity.VehicleParent() as MiniCopter; if (mini != null) { AddMiniCopterData(player, mini); if (xprecord.dash == 1 && config.defaultOptions.enabledashpanel) { DashPanel(player, true, entity); } if (xprecord.Dexterity >= 1 && config.dexterity.vehiclespeed > 0) { player.ChatMessage(XPLang("minispeedmessage", player.UserIDString)); } } // Snow Mobile var snowmob = entity.VehicleParent() as Snowmobile; if (snowmob != null) { AddSnowMobData(player, snowmob); if (xprecord.dash == 1 && config.defaultOptions.enabledashpanel) { DashPanel(player, true, entity); } } } private void OnEntityDismounted(BaseMountable entity, BasePlayer player) { if (entity == null || player == null || player.IsNpc || !player.userID.IsSteamId()) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; if (xprecord.dash == 1 && config.defaultOptions.enabledashpanel) { DestroyUi(player, XPerienceLiveDashPanel); DashPanelTimer?.Destroy(); } // Horses var horse = entity.GetParentEntity() as RidableHorse; if (horse != null && _horseCache.ContainsKey(horse.net.ID)) { Horse defaulthorse; if (_horseCache.TryGetValue(horse.net.ID, out defaulthorse)) { if (horse.IsAlive()) DefaultHorseData(horse); } return; } // Boats var boat = entity.GetParentEntity() as BaseBoat; if (boat != null && _boatCache.ContainsKey(boat.net.ID)) { Boat defaultboat; if (_boatCache.TryGetValue(boat.net.ID, out defaultboat)) { DefaultBoatData(boat); if (xprecord.dash == 1 && config.defaultOptions.enabledashpanel) { DashPanel(player, false, entity); } } return; } // Vehicles var car = entity.VehicleParent() as ModularCar; if (car != null && _vehicleCache.ContainsKey(car.net.ID)) { Vehicle vehicle; if (_vehicleCache.TryGetValue(car.net.ID, out vehicle)) { DefaultVehicleData(car); if (xprecord.dash == 1 && config.defaultOptions.enabledashpanel) { DashPanel(player, false, entity); } } return; } // Mini Copter var mini = entity.VehicleParent() as MiniCopter; if (mini != null && _minicopterCache.ContainsKey(mini.net.ID)) { Minicopter minicopter; if (_minicopterCache.TryGetValue(mini.net.ID, out minicopter)) { DefaultMiniCopterData(mini); if (xprecord.dash == 1 && config.defaultOptions.enabledashpanel) { DashPanel(player, false, entity); } } } // SnowMobile var snowmob = entity.VehicleParent() as Snowmobile; if (snowmob != null && _snowmobCache.ContainsKey(snowmob.net.ID)) { Snowmob snowmobile; if (_snowmobCache.TryGetValue(snowmob.net.ID, out snowmobile)) { DefaultSnowMobData(snowmob); if (xprecord.dash == 1 && config.defaultOptions.enabledashpanel) { DashPanel(player, false, entity); } } } } private void DefaultHorseData(RidableHorse horse) { Horse defaulthorse; if (_horseCache.TryGetValue(horse.net.ID, out defaulthorse)) { horse.maxSpeed = defaulthorse.maxSpeed; horse.runSpeed = defaulthorse.runSpeed; horse.trotSpeed = defaulthorse.trotSpeed; horse.walkSpeed = defaulthorse.walkSpeed; } _horseCache.Remove(horse.net.ID); } private void DefaultBoatData(BaseBoat boat) { Boat defaultboat; if (_boatCache.TryGetValue(boat.net.ID, out defaultboat)) { boat.engineThrust = defaultboat.defaultSpeed; } _boatCache.Remove(boat.net.ID); } private void DefaultVehicleData(ModularCar car) { Vehicle vehicle; if (_vehicleCache.TryGetValue(car.net.ID, out vehicle)) { car.carSettings.maxDriveSlip = vehicle.maxDriveSlip; car.carSettings.reversePercentSpeed = vehicle.reversePercentSpeed; car.carSettings.driveForceToMaxSlip = vehicle.driveForceToMaxSlip; } _vehicleCache.Remove(car.net.ID); } private void DefaultMiniCopterData(MiniCopter mini) { Minicopter minicopter; if (_minicopterCache.TryGetValue(mini.net.ID, out minicopter)) { mini.maxRotorSpeed = minicopter.maxRotorSpeed; } _minicopterCache.Remove(mini.net.ID); } private void DefaultSnowMobData(Snowmobile snowmob) { Snowmob snowmobile; if (_snowmobCache.TryGetValue(snowmob.net.ID, out snowmobile)) { snowmob.engineKW = (int)snowmobile.engineKW; snowmob.badTerrainDrag = snowmobile.terrain; } _snowmobCache.Remove(snowmob.net.ID); } private void ChangeHorseSpeed(BasePlayer player) { if (player == null) return; var horse = player.GetMountedVehicle() as RidableHorse; if (horse == null) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; if (xprecord.Dexterity >= 1) { if (_horseCache.ContainsKey(horse.net.ID)) { DefaultHorseData(horse); player.ChatMessage(XPLang("horsespeedoff", player.UserIDString)); } else { AddHorseData(player, horse); var increase = (float)(xprecord.Dexterity * config.dexterity.horsespeed); horse.maxSpeed += increase * horse.maxSpeed; horse.runSpeed += increase * horse.runSpeed; horse.trotSpeed += increase * horse.trotSpeed; horse.walkSpeed += increase * horse.walkSpeed; player.ChatMessage(XPLang("horsespeedon", player.UserIDString)); } } } private void ChangeBoatSpeed(BasePlayer player) { if (player == null) return; var boat = player.GetMountedVehicle() as BaseBoat; if (boat == null) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; if (xprecord.Dexterity >= 1) { Boat boatdata; if (_boatCache.TryGetValue(boat.net.ID, out boatdata)) { if (boatdata.player == player.userID) { DefaultBoatData(boat); player.ChatMessage(XPLang("boatspeedoff", player.UserIDString)); } } else { AddBoatData(player, boat); var increase = (float)(xprecord.Dexterity * config.dexterity.boatspeed); boat.engineThrust += increase * boat.engineThrust; player.ChatMessage(XPLang("boatspeedon", player.UserIDString)); } } } private void ChangeVehicleSpeed(BasePlayer player) { if (player == null) return; var car = player.GetMountedVehicle() as ModularCar; if (car == null) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; if (xprecord.Dexterity >= 1 && config.dexterity.vehiclespeed > 0) { Vehicle vehicle; if (_vehicleCache.TryGetValue(car.net.ID, out vehicle)) { if (vehicle.player == player.userID) { DefaultVehicleData(car); player.ChatMessage(XPLang("vehiclespeedoff", player.UserIDString)); } } else { AddVehicleData(player, car); double increase = config.dexterity.vehiclespeed * xprecord.Dexterity; car.GetMaxForwardSpeed(); car.carSettings.maxDriveSlip -= (float)(increase * car.carSettings.maxDriveSlip); car.carSettings.reversePercentSpeed += (float)(increase * car.carSettings.reversePercentSpeed); car.carSettings.driveForceToMaxSlip += (float)(increase * car.carSettings.driveForceToMaxSlip); player.ChatMessage(XPLang("vehiclespeedon", player.UserIDString)); } } } private void ChangeMiniCopterSpeed(BasePlayer player) { if (player == null) return; var mini = player.GetMountedVehicle() as MiniCopter; if (mini == null) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; if (xprecord.Dexterity >= 1) { Minicopter minicopter; if (_minicopterCache.TryGetValue(mini.net.ID, out minicopter)) { if (minicopter.player == player.userID) { DefaultMiniCopterData(mini); player.ChatMessage(XPLang("minispeedoff", player.UserIDString)); } } else { AddMiniCopterData(player, mini); double increase = config.dexterity.vehiclespeed * xprecord.Dexterity; mini.maxRotorSpeed += (float)(increase * mini.maxRotorSpeed); player.ChatMessage(XPLang("minispeedon", player.UserIDString)); } } } private void ChangeSnowMobSpeed(BasePlayer player) { if (player == null) return; var snowmob = player.GetMountedVehicle() as Snowmobile; if (snowmob == null) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; if (xprecord.Dexterity >= 1 && config.dexterity.vehiclespeed > 0) { Snowmob snowmobile; if (_snowmobCache.TryGetValue(snowmob.net.ID, out snowmobile)) { if (snowmobile.player == player.userID) { DefaultSnowMobData(snowmob); player.ChatMessage(XPLang("vehiclespeedoff", player.UserIDString)); } } else { AddSnowMobData(player, snowmob); double speedincrease = (config.dexterity.vehiclespeed * snowmob.engineKW) * xprecord.Dexterity; double terrainincrease = (config.dexterity.vehiclespeed * snowmob.badTerrainDrag) * xprecord.Dexterity; snowmob.engineKW += (int)speedincrease; snowmob.badTerrainDrag += (float)terrainincrease; player.ChatMessage(XPLang("vehiclespeedon", player.UserIDString)); } } } private int GetFuel(BaseMountable entity) { int fuel = -1; if (entity == null) return fuel; // Boat var boat = entity?.GetParentEntity() as BaseBoat; if (boat != null) { fuel = boat?.GetFuelSystem()?.GetFuelAmount() ?? 0; } // Car var car = entity?.VehicleParent() as ModularCar; if (car != null) { fuel = car?.GetFuelSystem()?.GetFuelAmount() ?? 0; } // Mini var mini = entity?.VehicleParent() as MiniCopter; if (mini != null) { fuel = mini?.GetFuelSystem()?.GetFuelAmount() ?? 0; } // Snowmobile var snowmob = entity.VehicleParent() as Snowmobile; if (snowmob != null) { fuel = snowmob?.GetFuelSystem()?.GetFuelAmount() ?? 0; } // Return Fuel if (fuel > 500) { fuel = 500; } return fuel; } private string GetSpeed(BasePlayer player, BaseMountable entity) { string speedometer = ""; if (player == null || entity == null) return speedometer; // Boat var boat = entity?.GetParentEntity() as BaseBoat; if (boat != null) { speedometer = $"{(int)boat.engineThrust} ≜"; } // Modular Car var car = entity?.VehicleParent() as ModularCar; if (car != null) { int speed = (int)car.GetSpeed() * 2; XPRecord xprecord = GetXPRecord(player); switch (xprecord.speedometertype) { case 1: speedometer = $"{speed} MPH"; break; case 2: speedometer = $"{(int)Math.Ceiling(speed * 1.609344)} KMH"; break; } } // Minicopter var mini = entity?.VehicleParent() as MiniCopter; if (mini != null) { speedometer = $"{(int)mini.maxRotorSpeed}"; } // Snowmobile var snowmob = entity.VehicleParent() as Snowmobile; if (snowmob != null) { speedometer = $"{(int)snowmob.engineKW} KW"; } // Return Results return speedometer; } private object CanUseFuel(EntityFuelSystem fuelSystem) { // Boat var boat = fuelSystem.GetFuelContainer().GetParentEntity() as BaseBoat; if (boat != null) { Boat boatdata; if (_boatCache.TryGetValue(boat.net.ID, out boatdata)) { var player = FindPlayer(boatdata.player.ToString()); if (player == null) return null; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return null; } } XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return null; if (xprecord.Dexterity >= 1) { var chance = (config.dexterity.fuelreduce * xprecord.Dexterity) * 100; if ((Random.Range(0, 101) <= chance) == true) { return 0; } } } } // Car var car = fuelSystem.GetFuelContainer().GetParentEntity() as ModularCar; if (car != null) { Vehicle vehicle; if (_vehicleCache.TryGetValue(car.net.ID, out vehicle)) { var player = FindPlayer(vehicle.player.ToString()); if (player == null) return null; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return null; } } XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return null; if (xprecord.Dexterity >= 1) { var chance = (config.dexterity.fuelreduce * xprecord.Dexterity) * 100; if ((Random.Range(0, 101) <= chance) == true) { return 0; } } } } // MiniCopter var mini = fuelSystem.GetFuelContainer().GetParentEntity() as MiniCopter; if (mini != null) { Minicopter minicopter; if (_minicopterCache.TryGetValue(mini.net.ID, out minicopter)) { var player = FindPlayer(minicopter.player.ToString()); if (player == null) return null; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return null; } } XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return null; if (xprecord.Dexterity >= 1) { var chance = (config.dexterity.fuelreduce * xprecord.Dexterity) * 100; if ((Random.Range(0, 101) <= chance) == true) { return 0; } } } } // SnowMobile var snowmob = fuelSystem.GetFuelContainer().GetParentEntity() as Snowmobile; if (snowmob != null) { Snowmob snowmobile; if (_snowmobCache.TryGetValue(snowmob.net.ID, out snowmobile)) { var player = FindPlayer(snowmobile.player.ToString()); if (player == null) return null; // Zone Manager Check if (ZoneManager != null) { string[] excludedzones = config.zonemanagermod.disablestatsandskills.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string zone in excludedzones) { bool playerinzone = (bool)ZoneManager?.Call("IsPlayerInZone", zone, player); if (playerinzone) return null; } } XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return null; if (xprecord.Dexterity >= 1) { var chance = (config.dexterity.fuelreduce * xprecord.Dexterity) * 100; if ((Random.Range(0, 101) <= chance) == true) { return 0; } } } } // Return Default return null; } #endregion #region Chat Commands // Chat Commands private void Openhelp(BasePlayer player, string command, string[] args) { PlayerControlPanelFullMain(player); PlayerHelpPage(player, 0); } private void Openplayerstats(BasePlayer player, string command, string[] args) { /* if (!_isXPReady) { player.ChatMessage(XPLang("imgwaiting", player.UserIDString)); return; } */ if (args.Length == 0) { DestroyUi(player, XPerienceAdminPanelMain); DestroyUi(player, XPeriencePlayerControlFullMain); PlayerControlPanelFullMain(player); PlayerInfoPage(player); if (XPerienceAddon != null) { XPerienceAddon?.Call("ClearNotify", player); } } else { if (config.defaultOptions.allowplayersearch || (!config.defaultOptions.allowplayersearch && player.IsAdmin && permission.UserHasPermission(player.UserIDString, XPerience.Admin))) { DestroyUi(player, XPeriencePlayerControlFullMain); var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.displayname.ToString().ToLower().Contains(args[0].ToLower())); if (user.Value == null) return; SelectedPlayerPanelFullMain(player, user.Value.id); SelectedPlayerInfoPage(player, user.Value.id); if (XPerienceAddon != null) { XPerienceAddon?.Call("ClearNotify", player); } } else { player.ChatMessage(XPLang("playersearchdisabled", player.UserIDString)); } } } private void Showplayerstatschat(BasePlayer player, string command, string[] args) { PlayerStatsChat(player); } private void Opentopplayers(BasePlayer player, string command, string[] args) { if (config.defaultOptions.allowplayersearch || (!config.defaultOptions.allowplayersearch && player.IsAdmin && permission.UserHasPermission(player.UserIDString, XPerience.Admin))) { TopPlayerPanelFullMain(player, "level"); TopLevels(player, 1, "level", 0); return; } else { player.ChatMessage(XPLang("playersearchdisabled", player.UserIDString)); } } private void Playeraddstat(BasePlayer player, string command, string[] args) { if (args.Length == 0) { PlayerControlPanelFullMain(player); PlayerHelpPage(player, 1); return; } StatUp(player, args[0].ToLower()); } private void Playeraddskill(BasePlayer player, string command, string[] args) { if (args.Length == 0) { PlayerControlPanelFullMain(player); PlayerHelpPage(player, 1); return; } SkillUp(player, args[0].ToLower()); } private void Playerresetstats(BasePlayer player, string command, string[] args) { if (config.defaultOptions.hardcorenoreset) { player.ChatMessage(XPLang("hardcorenoreset", player.UserIDString)); return; } StatsResetAll(player); } private void Playerresetskills(BasePlayer player, string command, string[] args) { if (config.defaultOptions.hardcorenoreset) { player.ChatMessage(XPLang("hardcorenoreset", player.UserIDString)); return; } SkillsResetAll(player); } private void Playerresetall(BasePlayer player, string command, string[] args) { if (!config.defaultOptions.allowplayerreset) { player.ChatMessage(XPLang("playerresetdisabled", player.UserIDString)); return; } PlayerReset(player); } private void Playerliveuichange(BasePlayer player, string command, string[] args) { if (!config.defaultOptions.liveuistatslocationmoveable) return; if (args.Length == 0) { player.ChatMessage(XPLang("liveuilocation", player.UserIDString, _xperienceCache[player.UserIDString].UILocation)); return; } var cmdArg = args[0].ToLower(); switch (cmdArg) { case "0": _xperienceCache[player.UserIDString].UILocation = 0; player.ChatMessage(XPLang("liveuilocationoff", player.UserIDString, cmdArg)); LiveStats(player, true); break; case "1": _xperienceCache[player.UserIDString].UILocation = 1; player.ChatMessage(XPLang("liveuilocation", player.UserIDString, cmdArg)); LiveStats(player, true); break; case "2": _xperienceCache[player.UserIDString].UILocation = 2; player.ChatMessage(XPLang("liveuilocation", player.UserIDString, cmdArg)); LiveStats(player, true); break; case "3": _xperienceCache[player.UserIDString].UILocation = 3; player.ChatMessage(XPLang("liveuilocation", player.UserIDString, cmdArg)); LiveStats(player, true); break; case "4": _xperienceCache[player.UserIDString].UILocation = 4; player.ChatMessage(XPLang("liveuilocation", player.UserIDString, cmdArg)); LiveStats(player, true); break; case "5": _xperienceCache[player.UserIDString].UILocation = 5; player.ChatMessage(XPLang("liveuilocation", player.UserIDString, cmdArg)); LiveStats(player, true); break; default: player.ChatMessage(XPLang("liveuilocationhelp", player.UserIDString, _xperienceCache[player.UserIDString].UILocation)); break; } } // Admin Commands private void Adminitemchange(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; var item = player.GetActiveItem(); if (args.Length == 0 || args.Length == 1) { player.ChatMessage(XPLang("adminitemchangerequirement", player.UserIDString, item.info.displayName.english, item.condition, item._maxCondition, config.adminchatCommands.adminitemchange)); return; } float condition = float.Parse(args[0]); float maxcondition = float.Parse(args[1]); item.condition = condition; item._maxCondition = maxcondition; player.ChatMessage(XPLang("adminitemchange", player.UserIDString, item.info.displayName.english, condition, maxcondition)); } private void Showadminhelp(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; player.ChatMessage(XPLang("xphelpadmin", player.UserIDString, config.adminchatCommands.openadminpanel, config.adminchatCommands.adminresetxperience, config.adminchatCommands.adminresetplayer, config.adminchatCommands.adminxpgive, config.adminchatCommands.adminxptake, config.adminchatCommands.adminitemchange)); } private void Openadminpanel(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; /* if (!_isXPReady) { player.ChatMessage("Waiting On ImageLibrary to finish the load order"); return; } */ DestroyUi(player, XPeriencePlayerControlFullMain); DestroyUi(player, XPerienceAdminPanelMain); DestroyUi(player, XPerienceTopMain); if (XPerienceAddon != null) { XPerienceAddon?.Call("ClearNotify", player); } AdminControlPanel(player); AdminInfoPage(player); } private void Adminresetxperience(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; _xperienceCache.Clear(); _lootCache.Clear(); _XPerienceData.Clear(); _LootContainData.Clear(); _corpseCache.Clear(); _CorpseContainData.Clear(); if (config.sql.enablesql) { DeleteSQL(); } player.ChatMessage(XPLang("resetxperience", player.UserIDString)); Interface.Oxide.ReloadPlugin("XPerience"); } private void Adminxpgive(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; if (args.Length == 0) { player.ChatMessage(XPLang("xpgiveneedtype", player.UserIDString)); return; } if (args.Length == 1) { player.ChatMessage(XPLang("xpgiveneedname", player.UserIDString)); return; } if (args.Length == 2) { player.ChatMessage(XPLang("xpgiveneedamount", player.UserIDString)); return; } var type = args[0].ToLower(); if (type == "name") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.displayname.ToString().ToLower().Contains(args[1].ToLower())); if (user.Value == null) { player.ChatMessage(XPLang("xpgivenotfound", player.UserIDString)); return; } double amount = Convert.ToDouble(args[2]); var selectplayer = FindPlayer(user.Value.id.ToString()); XPRecord xprecord = GetXPRecord(selectplayer); if (xprecord != null) { GainExpAdmin(selectplayer, amount); player.ChatMessage(XPLang("xpgiveplayer", player.UserIDString, user.Value.displayname, amount, xprecord.experience)); } else { XPRecord vxprecord = GetPlayerRecord(user.Value.id); GainExpAdminFix(user.Value.id, amount); player.ChatMessage(XPLang("xpgiveplayer", player.UserIDString, user.Value.displayname, amount, vxprecord.experience)); } } if (type == "id") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.id.ToString().ToLower().Contains(args[1].ToLower())); if (user.Value == null) { player.ChatMessage(XPLang("xpgivenotfound", player.UserIDString)); return; } double amount = Convert.ToDouble(args[2]); var selectplayer = FindPlayer(user.Value.id.ToString()); XPRecord xprecord = GetXPRecord(selectplayer); if (xprecord != null) { GainExpAdmin(selectplayer, amount); player.ChatMessage(XPLang("xpgiveplayer", player.UserIDString, user.Value.displayname, amount, xprecord.experience)); } else { XPRecord vxprecord = GetPlayerRecord(user.Value.id); GainExpAdminFix(user.Value.id, amount); player.ChatMessage(XPLang("xpgiveplayer", player.UserIDString, user.Value.displayname, amount, vxprecord.experience)); } } } private void Adminpointsgive(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; if (args.Length == 0) { player.ChatMessage(XPLang("pointsgiveneedtype", player.UserIDString)); return; } if (args.Length == 1) { player.ChatMessage(XPLang("pointsgiveneedtype", player.UserIDString)); return; } if (args.Length == 2) { player.ChatMessage(XPLang("pointsgiveneedname", player.UserIDString)); return; } if (args.Length == 3) { player.ChatMessage(XPLang("pointsgiveneedamount", player.UserIDString)); return; } var type1 = args[0].ToLower(); var type2 = args[1].ToLower(); int totalpoints = 0; if (type2 == "name") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.displayname.ToString().ToLower().Contains(args[2].ToLower())); if (user.Value == null) { player.ChatMessage(XPLang("xpgivenotfound", player.UserIDString)); return; } int amount = Convert.ToInt32(args[3]); var selectplayer = FindPlayer(user.Value.id.ToString()); XPRecord xprecord = GetXPRecord(selectplayer); if (xprecord != null) { switch (type1) { case "stat": totalpoints = xprecord.statpoint + amount; break; case "skill": totalpoints = xprecord.skillpoint + amount; break; } GivePoints(selectplayer, type1, amount); player.ChatMessage(XPLang("pointsgiveplayer", player.UserIDString, user.Value.displayname, amount, type1, totalpoints)); } else { XPRecord vxprecord = GetPlayerRecord(user.Value.id); switch (type1) { case "stat": totalpoints = vxprecord.statpoint + amount; break; case "skill": totalpoints = vxprecord.skillpoint + amount; break; } GivePointsOther(user.Value.id, type1, amount); player.ChatMessage(XPLang("pointsgiveplayer", player.UserIDString, user.Value.displayname, amount, type1, totalpoints)); } } if (type2 == "id") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.id.ToString().ToLower().Contains(args[2].ToLower())); if (user.Value == null) { player.ChatMessage(XPLang("xpgivenotfound", player.UserIDString)); return; } int amount = Convert.ToInt32(args[3]); var selectplayer = FindPlayer(user.Value.id.ToString()); XPRecord xprecord = GetXPRecord(selectplayer); if (xprecord != null) { switch (type1) { case "stat": totalpoints = xprecord.statpoint + amount; break; case "skill": totalpoints = xprecord.skillpoint + amount; break; } GivePoints(selectplayer, type1, amount); player.ChatMessage(XPLang("pointsgiveplayer", player.UserIDString, user.Value.displayname, amount, type1, totalpoints)); } else { XPRecord vxprecord = GetPlayerRecord(user.Value.id); switch (type1) { case "stat": totalpoints = vxprecord.statpoint + amount; break; case "skill": totalpoints = vxprecord.skillpoint + amount; break; } GivePointsOther(user.Value.id, type1, amount); player.ChatMessage(XPLang("pointsgiveplayer", player.UserIDString, user.Value.displayname, amount, type1, totalpoints)); } } } private void Adminxpgiveall(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; if (args.Length == 0) { player.ChatMessage(XPLang("xpgiveneedamount", player.UserIDString)); return; } double amount = Convert.ToDouble(args[0]); foreach(var allplayer in BasePlayer.allPlayerList) { GainExpAdmin(allplayer, amount); } player.ChatMessage(XPLang("xpgiveall", player.UserIDString, amount)); } private void Adminxptake(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; if (args.Length == 0) { player.ChatMessage(XPLang("xptakeneedtype", player.UserIDString)); return; } if (args.Length == 1) { player.ChatMessage(XPLang("xptakeneedname", player.UserIDString)); return; } if (args.Length == 2) { player.ChatMessage(XPLang("xptakeneedamount", player.UserIDString)); return; } var type = args[0].ToLower(); if (type == "name") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.displayname.ToString().ToLower().Contains(args[1].ToLower())); if (user.Value == null) { player.ChatMessage(XPLang("xptakenotfound", player.UserIDString)); return; } double amount = Convert.ToDouble(args[2]); var selectplayer = FindPlayer(user.Value.id.ToString()); XPRecord xprecord = GetXPRecord(selectplayer); LoseExpAdmin(selectplayer, amount); player.ChatMessage(XPLang("xptakeplayer", player.UserIDString, amount, user.Value.displayname, xprecord.experience)); } if (type == "id") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.id.ToString().ToLower().Contains(args[1].ToLower())); if (user.Value == null) { player.ChatMessage(XPLang("xptakenotfound", player.UserIDString)); return; } double amount = Convert.ToDouble(args[2]); var selectplayer = FindPlayer(user.Value.id.ToString()); XPRecord xprecord = GetXPRecord(selectplayer); LoseExpAdmin(selectplayer, amount); player.ChatMessage(XPLang("xptakeplayer", player.UserIDString, amount, user.Value.displayname, xprecord.experience)); } } private void Adminfixdata(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; PlayerFixDataAll(player); } private void Adminxpresetplayer(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; if (args.Length == 0) { player.ChatMessage(XPLang("xpresetneedtype", player.UserIDString)); return; } if (args.Length == 1) { player.ChatMessage(XPLang("xpresetneedname", player.UserIDString)); return; } var type = args[0].ToLower(); if (type == "name") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.displayname.ToString().ToLower().Contains(args[1].ToLower())); if (user.Value == null) { player.ChatMessage(XPLang("xpresetnotfound", player.UserIDString)); return; } var selectplayer = FindPlayer(user.Value.id.ToString()); SelectedPlayerReset(player, selectplayer); } if (type == "id") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.id.ToString().ToLower().Contains(args[1].ToLower())); if (user.Value == null) { player.ChatMessage(XPLang("xpresetnotfound", player.UserIDString)); return; } var selectplayer = FindPlayer(user.Value.id.ToString()); SelectedPlayerReset(player, selectplayer); } } private void AdminHarvestReset(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; if (args.Length == 0) { player.ChatMessage(XPLang("xpresetneedname", player.UserIDString)); return; } var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.displayname.ToString().ToLower().Contains(args[0].ToLower())); if (user.Value == null) { player.ChatMessage(XPLang("xpresetnotfound", player.UserIDString)); return; } var selectplayer = FindPlayer(user.Value.id.ToString()); SelectedHarvestReset(player, selectplayer); } private void AdminLevelReset(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; if (args.Length == 0) { player.ChatMessage(XPLang("xpresetneedname", player.UserIDString)); return; } var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.displayname.ToString().ToLower().Contains(args[0].ToLower())); if (user.Value == null) { player.ChatMessage(XPLang("xpresetnotfound", player.UserIDString)); return; } var selectplayer = FindPlayer(user.Value.id.ToString()); SelectedLevelReset(player, selectplayer); } private void AdminRankReset(BasePlayer player, string command, string[] args) { if (!player.IsAdmin && !permission.UserHasPermission(player.UserIDString, Admin)) return; if (args.Length == 0) { player.ChatMessage(XPLang("xpresetneedname", player.UserIDString)); return; } var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.displayname.ToString().ToLower().Contains(args[0].ToLower())); if (user.Value == null) { player.ChatMessage(XPLang("xpresetnotfound", player.UserIDString)); return; } var selectplayer = FindPlayer(user.Value.id.ToString()); SelectedRankReset(player, selectplayer); } private void AdminLevelResetAll(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; PlayerAllLevelReset(player); } private void AdminRankResetAll(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; PlayerAllRankReset(player); } private void AdminExcludePlayer(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; if (args == null || args.Length < 3) { player.ChatMessage("Incorrect Command, Use: xpexcludeplayer "); return; } if (args[0].ToLower() == "name") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.displayname.ToString().ToLower().Contains(args[1].ToLower())); if (user.Value == null) { player.ChatMessage("Player name not found"); return; } var selectplayer = FindPlayer(user.Value.id.ToString()); XPRecord xprecord = GetXPRecord(selectplayer); if (args[2].ToLower() == "true") { xprecord.exclude = true; player.ChatMessage($"Player [{selectplayer.displayName}|{selectplayer.UserIDString}] has been excluded from RustLevels"); } if (args[2].ToLower() == "false") { xprecord.exclude = false; player.ChatMessage($"Player [{selectplayer.displayName}|{selectplayer.UserIDString}] has been included at RustLevels"); } } if (args[0].ToLower() == "id") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.id.ToString().ToLower().Contains(args[1].ToLower())); if (user.Value == null) { player.ChatMessage("Player id not found"); return; } var selectplayer = FindPlayer(user.Value.id.ToString()); XPRecord xprecord = GetXPRecord(selectplayer); if (args[2].ToLower() == "true") { xprecord.exclude = true; player.ChatMessage($"Player [{selectplayer.displayName}|{selectplayer.UserIDString}] has been excluded from RustLevels"); } if (args[2].ToLower() == "false") { xprecord.exclude = false; player.ChatMessage($"Player [{selectplayer.displayName}|{selectplayer.UserIDString}] has been included at RustLevels"); } } } private void AdminGiveItem(BasePlayer player, string command, string[] args) { if (!player.IsAdmin || !permission.UserHasPermission(player.UserIDString, Admin)) return; if (XPerienceAddon != null) { if (args == null || args.Length < 4) { player.ChatMessage($"Invalid command. Use /{config.adminchatCommands.admingiveitem} \"\" "); return; } var type = args[0].ToLower(); string item = String.Concat(args[2].ToLower().Where(c => !Char.IsWhiteSpace(c))); //string item = args[2].ToLower(); int amount = Convert.ToInt32(args[3]); if (type == "name") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.displayname.ToString().ToLower().Contains(args[1].ToLower())); if (user.Value == null) { player.ChatMessage(XPLang("xpgivenotfound", player.UserIDString)); return; } var itemplayer = FindPlayer(user.Value.id); XPerienceAddon?.Call("SpecialDrops", itemplayer, item, amount); } if (type == "id") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.id.ToString().ToLower().Contains(args[1].ToLower())); if (user.Value == null) { player.ChatMessage(XPLang("xpgivenotfound", player.UserIDString)); return; } var itemplayer = FindPlayer(user.Value.id); XPerienceAddon?.Call("SpecialDrops", itemplayer, item, amount); } } } #endregion #region Console Commands // Check Permission private bool CanUseConsole(ConsoleSystem.Arg arg) { if (arg.Connection != null) { if (arg.Connection.authLevel < 1) { SendReply(arg, "You do not have permission to use this command."); return false; } } return true; } // Reset XPerience [ConsoleCommand("xpresetall")] private void Consolereset(ConsoleSystem.Arg arg) { if (!CanUseConsole(arg)) return; _xperienceCache.Clear(); _lootCache.Clear(); _XPerienceData.Clear(); _LootContainData.Clear(); _corpseCache.Clear(); _CorpseContainData.Clear(); if (config.sql.enablesql) { DeleteSQL(); } SendReply(arg, "All player data has been wiped for XPerience... Reloading..."); Interface.Oxide.ReloadPlugin("XPerience"); } // Reset Daily XP All [ConsoleCommand("xpdailyreset")] private void Consoleresetdailyxptimer(ConsoleSystem.Arg arg) { if (!CanUseConsole(arg)) return; DailyLimit(true); SendReply(arg, "Daily limits have been reset for all players."); } // Reset Daily XP Player [ConsoleCommand("xpdailyresetplayer")] private void Consoleresetdailyxpplayer(ConsoleSystem.Arg arg) { if (!CanUseConsole(arg)) return; if (arg.Args == null || arg.Args.Length < 1) { SendReply(arg, "Incorrect Command, Use: xpdailyresetplayer "); return; } var player = FindPlayer(arg.Args[0].ToLower()); if(player == null) { SendReply(arg, $"Player not found with ID: {arg.Args[0].ToLower()}"); return; } DailyLimitPlayer(player, true); SendReply(arg, $"Daily limit has been reset for {player.displayName}."); } // Reset Player [ConsoleCommand("xpexcludeplayer")] private void Consoleexcludeplayer(ConsoleSystem.Arg arg) { if (!CanUseConsole(arg)) return; if (arg.Args == null || arg.Args.Length < 3) { SendReply(arg, "Incorrect Command, Use: xpexcludeplayer "); return; } if (arg.Args[0].ToLower() == "name") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.displayname.ToString().ToLower().Contains(arg.Args[1].ToLower())); if (user.Value == null) { SendReply(arg, "Player name not found"); return; } var selectplayer = FindPlayer(user.Value.id.ToString()); XPRecord xprecord = GetXPRecord(selectplayer); if(arg.Args[2].ToLower() == "true") { xprecord.exclude = true; SendReply(arg, $"Player [{selectplayer.displayName}|{selectplayer.UserIDString}] has been excluded from RustLevels"); } if (arg.Args[2].ToLower() == "false") { xprecord.exclude = false; SendReply(arg, $"Player [{selectplayer.displayName}|{selectplayer.UserIDString}] has been included at RustLevels"); } } if (arg.Args[0].ToLower() == "id") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.id.ToString().ToLower().Contains(arg.Args[1].ToLower())); if (user.Value == null) { SendReply(arg, "Player id not found"); return; } var selectplayer = FindPlayer(user.Value.id.ToString()); XPRecord xprecord = GetXPRecord(selectplayer); if (arg.Args[2].ToLower() == "true") { xprecord.exclude = true; SendReply(arg, $"Player [{selectplayer.displayName}|{selectplayer.UserIDString}] has been excluded from RustLevels"); } if (arg.Args[2].ToLower() == "false") { xprecord.exclude = false; SendReply(arg, $"Player [{selectplayer.displayName}|{selectplayer.UserIDString}] has been included at RustLevels"); } } } // Reset Player [ConsoleCommand("xpresetplayer")] private void Consoleresetplayer(ConsoleSystem.Arg arg) { if (!CanUseConsole(arg)) return; if (arg.Args == null || arg.Args.Length < 2) { SendReply(arg, "Incorrect Command, Use: xpresetplayer "); return; } if (arg.Args[0].ToLower() == "name") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.displayname.ToString().ToLower().Contains(arg.Args[1].ToLower())); if (user.Value == null) { SendReply(arg, "Player name not found"); return; } var selectplayer = FindPlayer(user.Value.id.ToString()); SelectedPlayerResetConsole(selectplayer); } if (arg.Args[0].ToLower() == "id") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.id.ToString().ToLower().Contains(arg.Args[1].ToLower())); if (user.Value == null) { SendReply(arg, "Player id not found"); return; } var selectplayer = FindPlayer(user.Value.id.ToString()); SelectedPlayerResetConsole(selectplayer); } } // Give XP [ConsoleCommand("xpgive")] private void Consolegivexp(ConsoleSystem.Arg arg) { if (!CanUseConsole(arg)) return; if (arg.Args == null || arg.Args.Length < 3) { SendReply(arg, "Incorrect Command, Use: xpgive "); return; } if(arg.Args[0].ToLower() == "name") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.displayname.ToString().ToLower().Contains(arg.Args[1].ToLower())); if (user.Value == null) { SendReply(arg, "Player name not found"); return; } double amount = Convert.ToDouble(arg.Args[2]); var selectplayer = FindPlayer(user.Value.id.ToString()); XPRecord xprecord = GetXPRecord(selectplayer); if (xprecord != null) { GainExpAdmin(selectplayer, amount); SendReply(arg, $"{amount} XP has been given to {user.Value.displayname}. They now have a total of {xprecord.experience} XP"); } else { XPRecord vxprecord = GetPlayerRecord(user.Value.id); GainExpAdminFix(user.Value.id, amount); SendReply(arg, $"{amount} XP has been given to {user.Value.displayname}. They now have a total of {vxprecord.experience} XP"); } } if(arg.Args[0].ToLower() == "id") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.id.ToString().ToLower().Contains(arg.Args[1].ToLower())); if (user.Value == null) { SendReply(arg, "Player id not found"); return; } double amount = Convert.ToDouble(arg.Args[2]); var selectplayer = FindPlayer(user.Value.id.ToString()); XPRecord xprecord = GetXPRecord(selectplayer); if (xprecord != null) { GainExpAdmin(selectplayer, amount); SendReply(arg, $"{amount} XP has been given to {user.Value.displayname}. They now have a total of {xprecord.experience} XP"); } else { XPRecord vxprecord = GetPlayerRecord(user.Value.id); GainExpAdminFix(user.Value.id, amount); SendReply(arg, $"{amount} XP has been given to {user.Value.displayname}. They now have a total of {vxprecord.experience} XP"); } } } // Take XP [ConsoleCommand("xptake")] private void Consoletakexp(ConsoleSystem.Arg arg) { if (!CanUseConsole(arg)) return; if (arg.Args == null || arg.Args.Length < 3) { SendReply(arg, "Incorrect Command, Use: xptake "); return; } if(arg.Args[0].ToLower() == "name") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.displayname.ToString().ToLower().Contains(arg.Args[1].ToLower())); if (user.Value == null) { SendReply(arg, "Player name not found"); return; } double amount = Convert.ToDouble(arg.Args[2]); var selectplayer = FindPlayer(user.Value.id.ToString()); XPRecord xprecord = GetXPRecord(selectplayer); if (xprecord != null) { LoseExpAdmin(selectplayer, amount); SendReply(arg, $"{amount} XP has been taken from {user.Value.displayname}. They now have a total of {xprecord.experience} XP"); } } if(arg.Args[0].ToLower() == "id") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.id.ToString().ToLower().Contains(arg.Args[1].ToLower())); if (user.Value == null) { SendReply(arg, "Player id not found"); return; } double amount = Convert.ToDouble(arg.Args[2]); var selectplayer = FindPlayer(user.Value.id.ToString()); XPRecord xprecord = GetXPRecord(selectplayer); if (xprecord != null) { LoseExpAdmin(selectplayer, amount); SendReply(arg, $"{amount} XP has been taken from {user.Value.displayname}. They now have a total of {xprecord.experience} XP"); } } } // XP Item [ConsoleCommand("xpitem")] private void Consolexpitem(ConsoleSystem.Arg arg) { if (!CanUseConsole(arg)) return; if (XPerienceAddon != null) { if (arg.Args == null || arg.Args.Length < 4) { SendReply(arg, "Incorrect Command, Use: {config.adminchatCommands.admingiveitem} \"\" "); return; } var type = arg.Args[0].ToLower(); string item = String.Concat(arg.Args[2].ToLower().Where(c => !Char.IsWhiteSpace(c))); //string item = arg.Args[2].ToLower(); int amount = Convert.ToInt32(arg.Args[3]); if (type == "name") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.displayname.ToString().ToLower().Contains(arg.Args[1].ToLower())); if (user.Value == null) { SendReply(arg, "Player name not found"); return; } var itemplayer = FindPlayer(user.Value.id); XPerienceAddon?.Call("SpecialDrops", itemplayer, item, amount); SendReply(arg, $"{amount} - {item} have been given to {itemplayer.displayName}"); } if (type == "id") { var user = _xperienceCache.ToList().FirstOrDefault(x => x.Value.id.ToString().ToLower().Contains(arg.Args[1].ToLower())); if (user.Value == null) { SendReply(arg, "Player id not found"); return; } var itemplayer = FindPlayer(user.Value.id); XPerienceAddon?.Call("SpecialDrops", itemplayer, item, amount); SendReply(arg, $"{amount} - {item} have been given to {itemplayer.displayName}"); } } } #endregion #region UI Helpers private void PlayerStatsChat(BasePlayer player) { XPRecord xprecord = GetXPRecord(player); player.ChatMessage(XPLang("playerprofilechatnew", player.UserIDString, xprecord.level, (int)xprecord.experience, (int)xprecord.requiredxp, xprecord.statpoint, xprecord.skillpoint, xprecord.Mentality, xprecord.Dexterity, xprecord.Might, xprecord.Captaincy, xprecord.Weaponry, xprecord.WoodCutter, xprecord.Smithy, xprecord.Miner, xprecord.Forager, xprecord.Hunter, xprecord.Fisher, xprecord.Crafter, xprecord.Framer, xprecord.Medic, xprecord.Scavenger, xprecord.Electrician, xprecord.Tamer)); } private object ServerSettings(string option) { var value = "none"; // Main if (option == "levelstart") { value = config.xpLevel.levelstart.ToString(); } if (option == "levelmultiplier") { value = config.xpLevel.levelmultiplier.ToString(); } if (option == "levelxpboost") { double boost = config.xpLevel.levelxpboost * 100; value = boost.ToString(); } if (option == "statpointsperlvl") { value = config.xpLevel.statpointsperlvl.ToString(); } if (option == "skillpointsperlvl") { value = config.xpLevel.skillpointsperlvl.ToString(); } if (option == "resettimerenabled") { value = config.defaultOptions.restristresets.ToString(); } if (option == "resettimerstats") { value = config.defaultOptions.resetminsstats.ToString(); } if (option == "resettimerskills") { value = config.defaultOptions.resetminsskills.ToString(); } if (option == "vipresettimerstats") { value = config.defaultOptions.vipresetminstats.ToString(); } if (option == "vipresettimerskills") { value = config.defaultOptions.vipresetminsskills.ToString(); } if (option == "nightbonusenable") { value = config.nightBonus.Enable.ToString(); } if (option == "nightbonus") { double nightboost = config.nightBonus.Bonus * 100; value = nightboost.ToString(); } if (option == "nightstart") { value = config.nightBonus.StartTime.ToString(); } if (option == "nightend") { value = config.nightBonus.EndTime.ToString(); } if (option == "nightskill") { value = config.nightBonus.enableskillboosts.ToString(); } // Kills if (option == "chicken") { value = config.xpGain.chickenxp.ToString(); } if (option == "fish") { value = config.xpGain.fishxp.ToString(); } if (option == "boar") { value = config.xpGain.boarxp.ToString(); } if (option == "stag") { value = config.xpGain.stagxp.ToString(); } if (option == "wolf") { value = config.xpGain.wolfxp.ToString(); } if (option == "bear") { value = config.xpGain.bearxp.ToString(); } if (option == "shark") { value = config.xpGain.sharkxp.ToString(); } if (option == "horse") { value = config.xpGain.horsexp.ToString(); } if (option == "scientist") { value = config.xpGain.scientistxp.ToString(); } if (option == "dweller") { value = config.xpGain.dwellerxp.ToString(); } if (option == "player") { value = config.xpGain.playerxp.ToString(); } if (option == "bradley") { value = config.xpGain.bradley.ToString(); } if (option == "heli") { value = config.xpGain.patrolhelicopter.ToString(); } if (option == "revive") { value = config.xpGain.playerrevive.ToString(); } // Gathering / Loot if (option == "loot") { value = config.xpGain.lootcontainerxp.ToString(); } if (option == "uloot") { value = config.xpGain.underwaterlootcontainerxp.ToString(); } if (option == "lloot") { value = config.xpGain.lockedcratexp.ToString(); } if (option == "hloot") { value = config.xpGain.hackablecratexp.ToString(); } if (option == "aharvest") { value = config.xpGain.animalharvestxp.ToString(); } if (option == "charvest") { value = config.xpGain.corpseharvestxp.ToString(); } if (option == "tree") { value = config.xpGather.treexp.ToString(); } if (option == "ore") { value = config.xpGather.orexp.ToString(); } if (option == "gather") { value = config.xpGather.harvestxp.ToString(); } if (option == "plant") { value = config.xpGather.plantxp.ToString(); } // Crafting / Building if (option == "craft") { value = config.xpGain.craftingxp.ToString(); } if (option == "wood") { value = config.xpBuilding.woodstructure.ToString(); } if (option == "stone") { value = config.xpBuilding.stonestructure.ToString(); } if (option == "metal") { value = config.xpBuilding.metalstructure.ToString(); } if (option == "armored") { value = config.xpBuilding.armoredstructure.ToString(); } // Missions if (option == "missionsucceed") { value = config.xpMissions.missionsucceededxp.ToString(); } if (option == "missionfailed") { value = config.xpMissions.missionfailed.ToString(); } if (option == "missionfailedxp") { value = config.xpMissions.missionsucceededxp.ToString(); } // Reductions if (option == "death") { double death = config.xpReducer.deathreduceamount * 100; value = death.ToString(); } if (option == "deathenable") { value = config.xpReducer.deathreduce.ToString(); } if (option == "suicide") { double suicide = config.xpReducer.suicidereduceamount * 100; value = suicide.ToString(); } if (option == "suicideenable") { value = config.xpReducer.suicidereduce.ToString(); } // Mentality if (option == "mentalitylevel") { value = config.mentality.maxlvl.ToString(); } if (option == "mentalitycost") { value = config.mentality.pointcoststart.ToString(); } if (option == "mentalitymultiplier") { value = config.mentality.costmultiplier.ToString(); } if (option == "mentalityresearchcost") { double mentcost = config.mentality.researchcost * 100; value = mentcost.ToString(); } if (option == "mentalityresearchspeed") { double mentspeed = config.mentality.researchspeed * 100; value = mentspeed.ToString(); } if (option == "mentalitycrit") { double mentcrit = config.mentality.criticalchance * 100; value = mentcrit.ToString(); } // Dexterity if (option == "dexlevel") { value = config.dexterity.maxlvl.ToString(); } if (option == "dexcost") { value = config.dexterity.pointcoststart.ToString(); } if (option == "dexmultiplier") { value = config.dexterity.costmultiplier.ToString(); } if (option == "dexblock") { double mentcost = config.dexterity.blockchance * 100; value = mentcost.ToString(); } if (option == "dexblockamt") { double mentspeed = config.dexterity.blockamount * 100; value = mentspeed.ToString(); } if (option == "dexdodge") { double mentcrit = config.dexterity.dodgechance * 100; value = mentcrit.ToString(); } if (option == "dexarmor") { double mentcrit = config.dexterity.reducearmordmg * 100; value = mentcrit.ToString(); } // Might if (option == "mightlevel") { value = config.might.maxlvl.ToString(); } if (option == "mightcost") { value = config.might.pointcoststart.ToString(); } if (option == "mightmultiplier") { value = config.might.costmultiplier.ToString(); } if (option == "mightarmor") { double might = config.might.armor * 100; value = might.ToString(); } if (option == "mightmelee") { double might = config.might.meleedmg * 100; value = might.ToString(); } if (option == "mightmeta") { double might = config.might.metabolism * 100; value = might.ToString(); } if (option == "mightbleed") { double might = config.might.bleedreduction * 100; value = might.ToString(); } if (option == "mightrad") { double might = config.might.radreduction * 100; value = might.ToString(); } if (option == "mightheat") { double might = config.might.heattolerance * 100; value = might.ToString(); } if (option == "mightcold") { double might = config.might.coldtolerance * 100; value = might.ToString(); } // Captaincy if (option == "captlevel") { value = config.captaincy.maxlvl.ToString(); } if (option == "captcost") { value = config.captaincy.pointcoststart.ToString(); } if (option == "captmultiplier") { value = config.captaincy.costmultiplier.ToString(); } if (option == "captdistance") { value = config.captaincy.captaincydistance.ToString(); } if (option == "captskillboost") { double captskillboost = config.captaincy.skillboost * 100; value = captskillboost.ToString(); } if (option == "captxpboost") { double captxpboost = config.captaincy.xpboost * 100; value = captxpboost.ToString(); } if (option == "captxpboostenabled") { value = config.captaincy.enablexpboost.ToString(); } // WoodCutter if (option == "woodcutterlev") { value = config.woodcutter.maxlvl.ToString(); } if (option == "woodcuttercost") { value = config.woodcutter.pointcoststart.ToString(); } if (option == "woodcuttermulti") { value = config.woodcutter.pointcoststart.ToString(); } if (option == "woodcuttergather") { double woodgather = config.woodcutter.gatherrate * 100; value = woodgather.ToString(); } if (option == "woodcutterbonus") { double woodbonus = config.woodcutter.bonusincrease * 100; value = woodbonus.ToString(); } if (option == "woodcutterapple") { double woodapple = config.woodcutter.applechance * 100; value = woodapple.ToString(); } // Smithy if (option == "smithylev") { value = config.smithy.maxlvl.ToString(); } if (option == "smithycost") { value = config.smithy.pointcoststart.ToString(); } if (option == "smithymulti") { value = config.smithy.pointcoststart.ToString(); } if (option == "smithyproduction") { double smithyrate = config.smithy.productionrate * 100; value = smithyrate.ToString(); } if (option == "smithyfuel") { double smithyfuel = config.smithy.fuelconsumption * 100; value = smithyfuel.ToString(); } // Miner if (option == "minerlev") { value = config.forager.maxlvl.ToString(); } if (option == "minercost") { value = config.forager.pointcoststart.ToString(); } if (option == "minermulti") { value = config.forager.costmultiplier.ToString(); } if (option == "minergather") { double minergather = config.miner.gatherrate * 100; value = minergather.ToString(); } if (option == "minerbonus") { double minerbonus = config.miner.bonusincrease * 100; value = minerbonus.ToString(); } if (option == "minerfuel") { double minerfuel = config.miner.fuelconsumption * 100; value = minerfuel.ToString(); } // Forager if (option == "foragerlev") { value = config.forager.maxlvl.ToString(); } if (option == "foragercost") { value = config.forager.pointcoststart.ToString(); } if (option == "foragermulti") { value = config.forager.costmultiplier.ToString(); } if (option == "foragergather") { double forgrate = config.forager.gatherrate * 100; value = forgrate.ToString(); } if (option == "foragerseed") { double seedchance = config.forager.chanceincrease * 100; value = seedchance.ToString(); } if (option == "foragerseedamt") { double seedamt = config.forager.chanceincrease * 10; value = seedamt.ToString(); } if (option == "forageritem") { double forgitem = config.forager.randomchance * 100; value = forgitem.ToString(); } // Hunter if (option == "hunterlev") { value = config.hunter.maxlvl.ToString(); } if (option == "huntercost") { value = config.hunter.pointcoststart.ToString(); } if (option == "huntermulti") { value = config.hunter.costmultiplier.ToString(); } if (option == "huntergather") { double huntrate = config.hunter.gatherrate * 100; value = huntrate.ToString(); } if (option == "hunterbonus") { double huntbonus = config.hunter.bonusincrease * 100; value = huntbonus.ToString(); } if (option == "hunterdmg") { double huntdmg = config.hunter.damageincrease * 100; value = huntdmg.ToString(); } if (option == "hunterdmgnight") { double huntdmgnight = config.hunter.nightdmgincrease * 100; value = huntdmgnight.ToString(); } // Fisher if (option == "fisherlev") { value = config.fisher.maxlvl.ToString(); } if (option == "fishercost") { value = config.fisher.pointcoststart.ToString(); } if (option == "fishermulti") { value = config.fisher.costmultiplier.ToString(); } if (option == "fisheramt") { double huntrate = Math.Round(config.fisher.fishamountincrease); value = huntrate.ToString(); } if (option == "fisheramtitem") { double huntbonus = Math.Round(config.fisher.itemamountincrease); value = huntbonus.ToString(); } // Crafter if (option == "craftlev") { value = config.crafter.maxlvl.ToString(); } if (option == "craftcost") { value = config.crafter.pointcoststart.ToString(); } if (option == "craftmulti") { value = config.crafter.costmultiplier.ToString(); } if (option == "craftspeed") { double craftspeed = config.crafter.craftspeed * 100; value = craftspeed.ToString(); } if (option == "craftcostitem") { double craftcost = config.crafter.craftcost * 100; value = craftcost.ToString(); } if (option == "craftrepair") { double craftrepair = config.crafter.repairincrease * 100; value = craftrepair.ToString(); } if (option == "craftcond") { double craftcond = config.crafter.conditionchance * 100; value = craftcond.ToString(); } // Framer if (option == "framerlev") { value = config.framer.maxlvl.ToString(); } if (option == "framercost") { value = config.framer.pointcoststart.ToString(); } if (option == "framermulti") { value = config.framer.costmultiplier.ToString(); } if (option == "framerupgrade") { double framerupgrade = config.framer.upgradecost * 100; value = framerupgrade.ToString(); } if (option == "framerrepair") { double framerrepair = config.framer.repaircost * 100; value = framerrepair.ToString(); } if (option == "framertime") { double framertime = config.framer.repairtime * 100; value = framertime.ToString(); } // Medic if (option == "mediclev") { value = config.medic.maxlvl.ToString(); } if (option == "mediccost") { value = config.medic.pointcoststart.ToString(); } if (option == "medicmulti") { value = config.medic.costmultiplier.ToString(); } if (option == "medichpp") { value = config.medic.revivehp.ToString(); } if (option == "medichp") { value = config.medic.recoverhp.ToString(); } if (option == "mediccraft") { double mediccraft = config.medic.crafttime * 100; value = mediccraft.ToString(); } // Tamer if (option == "tamerenabled") { value = config.tamer.enabletame.ToString(); } if (option == "tamerlev") { value = config.tamer.maxlvl.ToString(); } if (option == "tamercost") { value = config.tamer.pointcoststart.ToString(); } if (option == "tamermulti") { value = config.tamer.costmultiplier.ToString(); } if (option == "tamerchicken") { value = config.tamer.tamechicken.ToString(); } if (option == "tamerchickenlev") { value = config.tamer.chickenlevel.ToString(); } if (option == "tamerboar") { value = config.tamer.tameboar.ToString(); } if (option == "tamerboarlev") { value = config.tamer.boarlevel.ToString(); } if (option == "tamerstag") { value = config.tamer.tamestag.ToString(); } if (option == "tamerstaglev") { value = config.tamer.staglevel.ToString(); } if (option == "tamerwolf") { value = config.tamer.tamewolf.ToString(); } if (option == "tamerwolflev") { value = config.tamer.wolflevel.ToString(); } if (option == "tamerbear") { value = config.tamer.tamebear.ToString(); } if (option == "tamerbearlev") { value = config.tamer.bearlevel.ToString(); } // Return Values return value; } private double RankBoosts(BasePlayer player, string type, double amount, bool enabled) { XPRecord record = GetXPRecord(player); if (record.rank <= 0 || record.DisableRank || !enabled) return amount; switch (type) { case "stat": if (config.xpLevelRanks.rankstatboost && !record.DisableRank) { amount += config.xpLevelRanks.rankstatboostamount * record.rank; } break; case "skill": if (config.xpLevelRanks.rankskillboost && !record.DisableRank) { amount += config.xpLevelRanks.rankskillboostamount * record.rank; } break; } return amount; } #endregion #region UI Constants // Player Info private const string XPeriencePlayerInfoBox = "XPeriencePlayerInfoBox"; // Live Stats private const string XPerienceLivePrimary = "XPerienceLivePrimary"; private const string XPerienceLiveIcon = "XPerienceLiveIcon"; private const string XPerienceLiveData = "XPerienceLiveData"; private const string XPerienceLiveFuel = "XPerienceLiveFuel"; private const string XPerienceLiveFuelBar = "XPerienceLiveFuelBar"; private const string XPerienceLiveSpeed = "XPerienceLiveSpeed"; private const string XPerienceLiveSpeedIcon = "XPerienceLiveSpeedIcon"; private const string XPerienceLiveSpeedBar = "XPerienceLiveSpeedBar"; private const string XPerienceLiveDashPanel = "XPerienceLiveDashPanel"; private const string XPerienceLiveDashPanelSet = "XPerienceLiveDashPanelSet"; // Player Panels private const string XPeriencePlayerControlPrimary = "XPeriencePlayerControlPrimary"; private const string XPeriencePlayerControlMain = "XPeriencePlayerControlMain"; private const string XPeriencePlayerControlStats = "XPeriencePlayerControlStats"; private const string XPeriencePlayerControlSkills = "XPeriencePlayerControlSkills"; private const string XPeriencePlayerControlSkillsL = "XPeriencePlayerControlSkillsL"; private const string XPeriencePlayerControlSkillsR = "XPeriencePlayerControlSkillsR"; private const string XPeriencePlayerControlPromptBox = "XPeriencePlayerControlPromptBox"; private const string XPeriencePlayerControlPrompt = "XPeriencePlayerControlPrompt"; // New Player Panels private const string XPeriencePlayerControlFullMain = "XPeriencePlayerControlFullMain"; private const string XPeriencePlayerControlFullInfo = "XPeriencePlayerControlFullInfo"; private const string XPeriencePlayerControlFullSettings = "XPeriencePlayerControlFullSettings"; private const string XPeriencePlayerControlFullHelp = "XPeriencePlayerControlFullHelp"; private const string XPeriencePlayerControlFullHelpNav = "XPeriencePlayerControlFullHelpNav"; private const string XPeriencePlayerControlFullMenu = "XPeriencePlayerControlFullMenu"; private const string XPeriencePlayerControlFullKR = "XPeriencePlayerControlFullKR"; private const string XPeriencePlayerControlFullLiveStatLoc = "XPeriencePlayerControlFullLiveStatLoc"; private const string XPeriencePlayerControlFullDisableRankLoc = "XPeriencePlayerControlFullDisableRankLoc"; private const string XPeriencePlayerControlFullFixData = "XPeriencePlayerControlFullFixData"; private const string XPeriencePlayerControlFullTamerBox = "XPeriencePlayerControlFullTamerBox"; private const string XPeriencePlayerControlFullArcheryBox = "XPeriencePlayerControlFullArcheryBox"; private const string XPeriencePlayerControlFullWizardryBox = "XPeriencePlayerControlFullWizardryBox"; // Top List UI private const string XPerienceTopMain = "XPerienceTopMain"; private const string XPerienceTopSelection = "XPerienceTopSelection"; private const string XPerienceTopInner = "XPerienceTopInner"; private const string XPerienceTopPageSelection = "XPerienceTopPageSelection"; private const string XPerienceHelp = "XPerienceHelp"; // Admin Panels private const string XPerienceAdminPanelMain = "XPerienceAdminPanelMain"; private const string XPerienceAdminPanelMenu = "XPerienceAdminPanelMenu"; private const string XPerienceAdminPanelInfo = "XPerienceAdminPanelInfo"; private const string XPerienceAdminPanelLevelXP = "XPerienceAdminPanelLevelXP"; private const string XPerienceAdminPanelRanks = "XPerienceAdminPanelRanks"; private const string XPerienceAdminPanelStats = "XPerienceAdminPanelStats"; private const string XPerienceAdminPanelSkills = "XPerienceAdminPanelSkills"; private const string XPerienceAdminPanelTimerColor = "XPerienceAdminPanelTimerColor"; private const string XPerienceAdminPanelOtherMods = "XPerienceAdminPanelOtherMods"; private const string XPerienceAdminPanelSQL = "XPerienceAdminPanelSQL"; private const string XPerienceAdminPanelReset = "XPerienceAdminPanelReset"; private const string XPerienceAdminPanelInfoBox = "XPerienceAdminPanelInfoBox"; private const string XPerienceAdminPanelAddon = "XPerienceAdminPanelAddon"; private const string XPerienceAdminPanelDailyLimits = "XPerienceAdminPanelDailyLimits"; private const string XPerienceAdminPanelCalculations = "XPerienceAdminPanelCalculations"; private const string XPerienceAdminPanelCalculationsLevelSelection = "XPerienceAdminPanelCalculationsLevelSelection"; private const string XPerienceAdminPanelCalculationsRanksSelection = "XPerienceAdminPanelCalculationsRanksSelection"; private const string XPerienceAdminPanelSoundEffects = "XPerienceAdminPanelSoundEffects"; private const string XPerienceAdminPanelElectricianSettings = "XPerienceAdminPanelElectricianSettings"; // Images private const string XPerienceicon = "XPerienceicon"; private const string XPeriencelogo = "XPeriencelogo"; private const string XPeriencementality = "XPeriencementality"; private const string XPeriencedexterity = "XPeriencedexterity"; private const string XPeriencemight = "XPeriencemight"; private const string XPeriencecaptaincy = "XPeriencecaptaincy"; private const string XPerienceweaponry = "XPerienceweaponry"; private const string XPeriencewoodcutter = "XPeriencewoodcutter"; private const string XPeriencesmithy = "XPeriencesmithy"; private const string XPerienceminer = "XPerienceminer"; private const string XPerienceforager = "XPerienceforager"; private const string XPeriencehunter = "XPeriencehunter"; private const string XPeriencefisher = "XPeriencefisher"; private const string XPeriencecrafter = "XPeriencecrafter"; private const string XPerienceframer = "XPerienceframer"; private const string XPeriencemedic = "XPeriencemedic"; private const string XPeriencescavenger = "XPeriencescavenger"; private const string XPerienceelectrician = "XPerienceelectrician"; private const string XPeriencetamer = "XPeriencetamer"; private const string XPeriencechicken = "XPeriencechicken"; private const string XPerienceboar = "XPerienceboar"; private const string XPeriencestag = "XPeriencestag"; private const string XPeriencewolf = "XPeriencewolf"; private const string XPeriencebear = "XPeriencebear"; private const string XPeriencepolarbear = "XPeriencepolarbear"; private const string XPeriencearchery = "XPeriencearchery"; private const string XPeriencewizardry = "XPeriencewizardry"; private const string XPerienceonline = "XPerienceonline"; private const string XPerienceoffline = "XPerienceoffline"; private const string XPeriencebackpack = "XPeriencebackpack"; private const string XPeriencelevel = "XPeriencelevel"; private const string XPeriencexp = "XPeriencexp"; private const string XPeriencearmor = "XPeriencearmor"; private const string XPeriencelevel0 = "XPeriencelevel0"; private const string XPeriencelevel2 = "XPeriencelevel2"; private const string XPeriencelevel4 = "XPeriencelevel4"; private const string XPeriencelevel6 = "XPeriencelevel6"; private const string XPeriencelevel8 = "XPeriencelevel8"; private const string XPeriencelevel10 = "XPeriencelevel10"; private const string XPeriencefuelguage = "XPeriencefuelguage"; private const string XPeriencespeedometer = "XPeriencespeedometer"; private const string XPeriencedash = "XPeriencedash"; #endregion #region Colors/Symbols private object TextColor(BasePlayer player, string type, double value, bool enabled = false) { string color = config.uitextColor.defaultcolor; if (player == null || type == null) return color; if (value > 0) switch (type) { case "default": color = config.uitextColor.defaultcolor; break; case "mainlevel": color = config.uitextColor.level; break; case "experience": color = config.uitextColor.experience; break; case "nextlevel": color = config.uitextColor.nextlevel; break; case "remainingxp": color = config.uitextColor.remainingxp; break; case "level": color = config.uitextColor.statskilllevels; break; case "perk": color = config.uitextColor.perks; break; case "unspent": color = config.uitextColor.unspentpoints; break; case "spent": color = config.uitextColor.spentpoints; break; case "pets": color = config.uitextColor.pets; break; case "rankname": color = config.uitextColor.rankname; break; case "ranklevel": color = config.uitextColor.ranklevel; break; case "rankxp": color = config.uitextColor.rankxp; break; } if (value < 0) color = "red"; return color; } private object ValueSymbol(string type, double value, string symbol) { if (type == "perk" && value > 0 && symbol == "neg") { symbol = "-"; } if (type == "perk" && value > 0 && symbol == "pos") { symbol = "+"; } if (type == "perk" && value < 0 && (symbol == "neg" || symbol == "pos")) { symbol = ""; } // Return Symbol return symbol; } private object LiveUISelection(string selection, int value) { string color = "1 1 1 1"; switch (selection) { case "UI0": if (value == 0) color = "0 1 0 1"; break; case "UI1": if (value == 1) color = "0 1 0 1"; break; case "UI2": if (value == 2) color = "0 1 0 1"; break; case "UI3": if (value == 3) color = "0 1 0 1"; break; case "UI4": if (value == 4) color = "0 1 0 1"; break; case "UI5": if (value == 5) color = "0 1 0 1"; break; } // Return Color return color; } private object DashSelection(int selection, int value) { string color = "1 1 1 1"; switch (selection) { case 0: if (value == 0) color = "1 0 0 1"; break; case 1: if (value == 1) color = "0 1 0 1"; break; case 2: if (value == 2) color = "0 1 0 1"; break; } // Return Color return color; } private object DisableRankSelection(string selection, bool value, string color = "1 1 1 1") { switch (selection) { case "Yes": if(value) color = "0 1 0 1"; break; case "No": if(!value) color = "0 1 0 1"; break; } // Return Color return color; } private object ColorConverter(string color) { string hexcolor = color; switch(color) { case "white": hexcolor = "#FFFFFF"; break; case "red": hexcolor = "#FF0000"; break; case "green": hexcolor = "#00FF00"; break; case "blue": hexcolor = "#0000FF"; break; case "cyan": hexcolor = "#00FFFF"; break; case "grey": hexcolor = "#808080"; break; case "magenta": hexcolor = "#FF00FF"; break; case "yellow": hexcolor = "#FFFF00"; break; } return hexcolor; } private object LiveColorConverter(string color) { string newcolor = color; switch(color) { case "red": newcolor = "99 00 00"; break; case "green": newcolor = "00 99 00"; break; case "blue": newcolor = "00 00 99"; break; case "cyan": newcolor = "00 99 99"; break; case "grey": newcolor = "80 80 80"; break; case "magenta": newcolor = "99 00 99"; break; case "yellow": newcolor = "99 99 00"; break; } return newcolor; } #endregion #region Default UI Panels // UI Defaults private CuiPanel XPUIPanel(string anchorMin, string anchorMax, string color = "0 0 0 0") { return new CuiPanel { RectTransform = { AnchorMin = anchorMin, AnchorMax = anchorMax }, Image = { Color = color } }; } private CuiPanel XPUIPanel2(string anchorMin, string anchorMax, string offsetMin, string offsetMax, string color = "0 0 0 0") { return new CuiPanel { RectTransform = { AnchorMin = anchorMin, AnchorMax = anchorMax, OffsetMin = offsetMin, OffsetMax = offsetMax }, Image = { Color = color } }; } private CuiLabel XPUILabel(string text, int i, float height, TextAnchor align = TextAnchor.MiddleLeft, int fontSize = 13, string xMin = "0", string xMax = "1", string color = "1.0 1.0 1.0 1.0") { return new CuiLabel { RectTransform = { AnchorMin = $"{xMin} {1 - height*i + i * .002f}", AnchorMax = $"{xMax} {1 - height*(i-1) + i * .002f}" }, Text = { Text = text, FontSize = fontSize, Align = align, Color = color } }; } private CuiButton XPUIButton(string command, double i, float rowHeight, int fontSize = 11, string color = "1.0 0.0 0.0 0.7", string content = "+", string xMin = "0", string xMax = "1", TextAnchor align = TextAnchor.MiddleLeft, string fcolor = "1.0 1.0 1.0 1.0") { return new CuiButton { Button = { Command = command, Color = $"{color}" }, RectTransform = { AnchorMin = $"{xMin} {1 - rowHeight*i + i * .002f}", AnchorMax = $"{xMax} {1 - rowHeight*(i-1) + i * .002f}" }, Text = { Text = content, FontSize = fontSize, Align = align, Color = fcolor, } }; } private CuiElement XPUIImage(string parent, string image, int i, float imgheight, string xMin = "0", string xMax = "1") { return new CuiElement { Parent = parent, Components = { new CuiRawImageComponent { Png = ImageLibrary?.Call("GetImage", image) }, new CuiRectTransformComponent { AnchorMin = $"{xMin} {1 - imgheight*i + i * .002f}", AnchorMax = $"{xMax} {1 - imgheight*(i-1) + i * .002f}" } } }; } private void DestroyUi(BasePlayer player, string name) { if (player == null || name == null) return; CuiHelper.DestroyUi(player, name); } #endregion #region Player Panels // Pages & Info [ConsoleCommand("xp.playercontrol")] private void Cmdplayercontrolnew(ConsoleSystem.Arg arg) { var player = arg.Player(); if (player == null) return; XPRecord xprecord = GetXPRecord(player); string page = arg.GetString(0); if (page == null) page = "main"; string type = arg.GetString(1); string value = arg.GetString(2); switch (page) { case "main": ClearPlayerUIs(player); PlayerControlPanelFullMain(player); PlayerInfoPage(player); break; case "selectedplayer": string selectedplayer = arg.GetString(1); ClearPlayerUIs(player); SelectedPlayerPanelFullMain(player, selectedplayer); SelectedPlayerInfoPage(player, selectedplayer); break; case "settings": ClearPlayerUIs(player); PlayerControlPanelFullMain(player); PlayerSettingsPage(player); break; case "topplayers": ClearPlayerUIs(player); TopPlayerPanelFullMain(player, "level"); TopLevels(player, 1, "level", 0); break; case "getprompt": if (type == null || value == null) return; PlayerPromptBox(player, "reset", type, value); break; case "reset": switch (type) { case "stats": if (config.defaultOptions.hardcorenoreset) { player.ChatMessage(XPLang("hardcorenoreset", player.UserIDString)); return; } StatsResetAll(player); DestroyUi(player, XPeriencePlayerControlFullInfo); DestroyUi(player, XPeriencePlayerControlPrompt); PlayerInfoPage(player); break; case "skills": if (config.defaultOptions.hardcorenoreset) { player.ChatMessage(XPLang("hardcorenoreset", player.UserIDString)); return; } SkillsResetAll(player); DestroyUi(player, XPeriencePlayerControlFullInfo); DestroyUi(player, XPeriencePlayerControlPrompt); PlayerInfoPage(player); break; case "stat": if (config.defaultOptions.hardcorenoreset) { player.ChatMessage(XPLang("hardcorenoreset", player.UserIDString)); return; } StatReset(player, value); DestroyUi(player, XPeriencePlayerControlFullInfo); DestroyUi(player, XPeriencePlayerControlPrompt); PlayerInfoPage(player); break; case "skill": if (config.defaultOptions.hardcorenoreset) { player.ChatMessage(XPLang("hardcorenoreset", player.UserIDString)); return; } SkillReset(player, value); DestroyUi(player, XPeriencePlayerControlFullInfo); DestroyUi(player, XPeriencePlayerControlPrompt); PlayerInfoPage(player); break; } break; case "killrecords": string selectedplayerkr = arg.GetString(1); ClearPlayerUIs(player); PlayerControlPanelFullMain(player); PlayerKillRecordsPage(player, selectedplayerkr); break; case "deathrecords": if (XPerienceAddon != null) { ClearPlayerUIs(player); XPerienceAddon.Call("PlayerControlPanel", player); XPerienceAddon.Call("PlayerDeathRecordsList", player); } break; case "raids": if (XPerienceAddon != null && RaidableBases != null) { ClearPlayerUIs(player); XPerienceAddon.Call("PlayerControlPanel", player); XPerienceAddon.Call("PlayerRaidsCompletedList", player); } break; case "otherdeathrecords": if (XPerienceAddon != null) { string dselectedplayer = arg.GetString(1); ClearPlayerUIs(player); XPerienceAddon.Call("PlayerControlPanel", player); XPerienceAddon.Call("SelectedPlayerDeathRecordsList", player, dselectedplayer); } break; case "otherraids": if (XPerienceAddon != null && RaidableBases != null) { string dselectedplayer = arg.GetString(1); ClearPlayerUIs(player); XPerienceAddon.Call("PlayerControlPanel", player); XPerienceAddon.Call("SelectedPlayerRaidsCompletedList", player, dselectedplayer); } break; case "close": ClearPlayerUIs(player); break; case "openbox": DestroyUi(player, XPeriencePlayerInfoBox); string selectedplayerbox = arg.GetString(1); PlayerInfoBox(player, selectedplayerbox); break; case "closebox": DestroyUi(player, XPeriencePlayerInfoBox); break; case "closeprompt": DestroyUi(player, XPeriencePlayerControlPrompt); break; case "help": ClearPlayerUIs(player); PlayerControlPanelFullMain(player); PlayerHelpPage(player, 0); break; case "fix": PlayerFixData(player); ClearPlayerUIs(player); PlayerControlPanelFullMain(player); PlayerSettingsPage(player); break; case "admin": if (!player.IsAdmin && !permission.UserHasPermission(player.UserIDString, Admin)) return; ClearPlayerUIs(player); DestroyUi(player, XPerienceAdminPanelMain); AdminControlPanel(player); AdminInfoPage(player); break; } } // Player Edits [ConsoleCommand("xp.playeredits")] private void Cmdplayeredits(ConsoleSystem.Arg arg) { var player = arg.Player(); if (player == null) return; string type = arg.GetString(0); switch (type) { case "settings": string setting = arg.GetString(1); switch (setting) { case "liveui": int location = arg.GetInt(2); _xperienceCache[player.UserIDString].UILocation = location; LiveStats(player, true); DestroyUi(player, XPeriencePlayerControlFullSettings); PlayerSettingsPage(player); break; case "enabledash": int enabledash = arg.GetInt(2); _xperienceCache[player.UserIDString].dash = (int)enabledash; DestroyUi(player, XPeriencePlayerControlFullSettings); PlayerSettingsPage(player); break; case "speedometertype": int speedometertype = arg.GetInt(2); _xperienceCache[player.UserIDString].speedometertype = (int)speedometertype; DestroyUi(player, XPeriencePlayerControlFullSettings); PlayerSettingsPage(player); break; case "disableranks": bool option = arg.GetBool(2); _xperienceCache[player.UserIDString].DisableRank = option; LiveStats(player, true); DestroyUi(player, XPeriencePlayerControlFullMain); PlayerControlPanelFullMain(player); PlayerSettingsPage(player); break; case "prompt": bool prompt = arg.GetBool(2); _xperienceCache[player.UserIDString].enableconfirmationprompt = prompt; DestroyUi(player, XPeriencePlayerControlFullMain); PlayerControlPanelFullMain(player); PlayerSettingsPage(player); break; case "chatnotify": bool chatnotify = arg.GetBool(2); _xperienceCache[player.UserIDString].showchatnotifications = chatnotify; DestroyUi(player, XPeriencePlayerControlFullMain); PlayerControlPanelFullMain(player); PlayerSettingsPage(player); break; case "chatprofile": bool chatprofile = arg.GetBool(2); _xperienceCache[player.UserIDString].showchatprofileonconnect = chatprofile; DestroyUi(player, XPeriencePlayerControlFullMain); PlayerControlPanelFullMain(player); PlayerSettingsPage(player); break; case "welcomepanel": bool welcomepanel = arg.GetBool(2); _xperienceCache[player.UserIDString].showwelcomepanel = welcomepanel; DestroyUi(player, XPeriencePlayerControlFullMain); PlayerControlPanelFullMain(player); PlayerSettingsPage(player); break; } break; case "getprompt": PlayerPromptBox(player, "levelup", arg.GetString(1), arg.GetString(2)); break; case "stat": StatUp(player, arg.GetString(1)); DestroyUi(player, XPeriencePlayerControlFullInfo); DestroyUi(player, XPeriencePlayerControlPrompt); PlayerInfoPage(player); break; case "skill": SkillUp(player, arg.GetString(1)); DestroyUi(player, XPeriencePlayerControlFullInfo); DestroyUi(player, XPeriencePlayerControlPrompt); PlayerInfoPage(player); break; case "help": int page = arg.GetInt(1); DestroyUi(player, XPeriencePlayerControlFullHelp); PlayerHelpPage(player, page); break; } } // Handlers private void ClearPlayerUIs(BasePlayer player) { DestroyUi(player, XPeriencePlayerControlFullMain); DestroyUi(player, XPeriencePlayerControlFullSettings); DestroyUi(player, XPeriencePlayerControlFullInfo); DestroyUi(player, XPeriencePlayerControlFullKR); DestroyUi(player, XPeriencePlayerControlFullHelp); DestroyUi(player, XPeriencePlayerInfoBox); DestroyUi(player, XPerienceTopMain); DestroyUi(player, XPeriencePlayerControlPrompt); } private string LevelIcon(BasePlayer player, int percent) { object levelicon = XPeriencelevel; if (percent < 20) { levelicon = XPeriencelevel0; } else if (percent >= 20 && percent < 40) { levelicon = XPeriencelevel2; } else if (percent >= 40 && percent < 60) { levelicon = XPeriencelevel4; } else if (percent >= 60 && percent < 80) { levelicon = XPeriencelevel6; } else if (percent >= 80 && percent < 95) { levelicon = XPeriencelevel8; } else if (percent >= 95) { levelicon = XPeriencelevel10; } return levelicon.ToString(); } private object PlayerTimeValues(BasePlayer player, string type, double value) { if(type == "lifespan"){value = CurrentTime - value;} double minutes = (int)(value % 3600) / 60; double hours = (int)(value % 86400) / 3600; double days = (int)(value % (86400 * 30)) / 86400; string showdays = ""; string showhours = ""; string showmins = ""; if(days > 0) { showdays = $"Days: {days} "; } if(hours > 0) { showhours = $"Hours: {hours} "; } if(minutes > 0) { showmins = $"Mins: {minutes} "; } if(days == 0 && hours == 0 && minutes == 0) { return 0; } string playertime = $"{showdays}{showhours}{showmins}"; return playertime; } private object PlayerInfoValues(BasePlayer player, BaseEntity entity, string type) { string DMGType = entity?.GetType().Name; switch (type) { case "dmgrecieved": if (DMGType == "BasePlayer") { var playername = entity as BasePlayer; DMGType = playername.displayName; } return DMGType; case "dmgdelt": if (DMGType == "BasePlayer") { var playername = entity as BasePlayer; DMGType = playername.displayName; } return DMGType; } return DMGType; } // Live Stats private void LiveStats(BasePlayer player, bool update = false, string consumable = "none") { if (player == null || !player.userID.IsSteamId() || player.IsNpc || !player.isSpawned) return; XPRecord xprecord = GetXPRecord(player); if (xprecord == null) return; Ranks rank = GetXPRank(xprecord.rank); DestroyUi(player, XPerienceLivePrimary); // XP Bar Calculations double lastlevel; double nextlevel; double currentxp; double reqxpperc; double remainingxp; double levelpercent; if (xprecord.experience == 0 || xprecord.level == 0) { lastlevel = 0; nextlevel = config.xpLevel.levelstart; currentxp = xprecord.experience - lastlevel; reqxpperc = (xprecord.experience - lastlevel) / nextlevel; remainingxp = nextlevel - currentxp; levelpercent = reqxpperc * 100; } else { lastlevel = xprecord.requiredxp - (xprecord.level * config.xpLevel.levelmultiplier); nextlevel = xprecord.requiredxp - lastlevel; currentxp = xprecord.experience - lastlevel; reqxpperc = (xprecord.experience - lastlevel) / nextlevel; remainingxp = nextlevel - currentxp; levelpercent = reqxpperc * 100; } // Armor Bar Calculations if (GetTeaCooldown(player) == 0) { xprecord.teacooldown = 0; xprecord.teatype = consumable; } double armor = (xprecord.Might * config.might.armor) * 100; double maxhealth = player._maxHealth - armor; double playerhealth = player._health; double currentarmor = 0; // Default Armor - No Tea Effects if (player._health > maxhealth) { currentarmor = Math.Ceiling((player._health - maxhealth)); } // Extra Armor - Add Tea Effects double teatime = 1200; double teaboost = 0; bool teamodified = false; // Check for TeaModifier Plugin and Values if (TeaModifiers != null) { teatime = TeaModifiers.Call("GetTeaDuration", player, consumable, Modifier.ModifierType.Max_Health); teaboost = TeaModifiers.Call("GetTeaValue", player, consumable, Modifier.ModifierType.Max_Health) * 100; teamodified = true; } // Update PlayerData if (consumable.Contains("maxhealthtea")) { xprecord.teacooldown = (double)CurrentTime + teatime; xprecord.teatype = consumable; } // Get Updated Data if (GetTeaCooldown(player) != 0) { if (teamodified) { teaboost = TeaModifiers.Call("GetTeaValue", player, xprecord.teatype, Modifier.ModifierType.Max_Health) * 100; } switch (GetTeaTypes(player)) { case "none": teaboost = 0; break; case "maxhealthtea": if (!teamodified) { teaboost = 5; } break; case "maxhealthtea.advanced": if (!teamodified) { teaboost = 12.5; } break; case "maxhealthtea.pure": if (!teamodified) { teaboost = 20; } break; } } // Apply Results to Armor if (GetTeaCooldown(player) != 0) { playerhealth += teaboost; if (playerhealth > maxhealth) { if (teamodified) { currentarmor = Math.Ceiling((player._health - maxhealth) - teaboost); } if (!teamodified) { currentarmor = Math.Ceiling((player._health - maxhealth) - teaboost); } if (currentarmor < 0) currentarmor = 0; armor += Math.Ceiling((teaboost * config.might.armor) * xprecord.Might); } } // Calculate Armor Bar Display var armorperc = currentarmor / armor; // Live Stats Display var LIVEelements = new CuiElementContainer(); string levelicon = XPeriencelevel; if (config.defaultOptions.useprogressivelevelicons) { levelicon = LevelIcon(player, (int)levelpercent); } switch (xprecord.UILocation) { case 1: #region LIVEloc1 // Live UI Box LIVEelements.Add(XPUIPanel2("1 0", "1 0", "-392 16", "-210 126", "0.5 0.5 0.5 0"), "Hud", XPerienceLivePrimary); // Rank if (config.xpLevelRanks.enableresetranks && config.xpLevelRanks.showrankinliveui && !xprecord.DisableRank) { if (xprecord.Might > 0 && config.might.armor > 0) { LIVEelements.Add(XPUIPanel("0 0.76", "0.125 0.95"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, rank.name, 1, .9f, "0.05", "0.90")); LIVEelements.Add(XPUIPanel("0.13 0.76", "0.99 0.99", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUILabel($"{rank.name}", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.50 0.05 0.05 0.70"), XPerienceLiveData); } else { LIVEelements.Add(XPUIPanel("0 0.51", "0.125 0.70"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, rank.name, 1, .9f, "0.05", "0.90")); LIVEelements.Add(XPUIPanel("0.13 0.51", "0.99 0.735", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUILabel($"{rank.name}", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.50 0.05 0.05 0.70"), XPerienceLiveData); } } // Armor if (xprecord.Might > 0 && config.might.armor > 0) { LIVEelements.Add(XPUIPanel("0 0.51", "0.125 0.70"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencearmor, 1, .9f, "0.15", "0.85")); LIVEelements.Add(XPUIPanel("0.13 0.51", "0.99 0.735", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); //LIVEelements.Add(XPUIPanel("0.01 0.145", $"{armorperc - 0.01} 0.845", "1.50 0.05 0.05 0.70"), XPerienceLiveData); LIVEelements.Add(XPUIPanel("0.01 0.145", $"{armorperc - 0.01} 0.845", $"{LiveColorConverter(config.uitextColor.armorbar)} 0.70"), XPerienceLiveData); LIVEelements.Add(XPUILabel($"{currentarmor} / {armor}", 1, 1, TextAnchor.MiddleLeft, 15, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveData); } // Level LIVEelements.Add(XPUIPanel("0 0.255", "0.125 0.44"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, levelicon, 1, .9f, "0.15", "0.95")); LIVEelements.Add(XPUIPanel("0.13 0.255", "0.99 0.480", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUILabel($"{XPLang("level", player.UserIDString)}: {xprecord.level} ({(int)levelpercent}%)", 1, 1.06f, TextAnchor.MiddleLeft, 15, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveData); // XP LIVEelements.Add(XPUIPanel("0 0", "0.125 0.185"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencexp, 1, .9f, "0.15", "0.80")); LIVEelements.Add(XPUIPanel("0.13 0", "0.99 0.23", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUIPanel("0.01 0.135", $"{reqxpperc - 0.01} 0.845", $"{LiveColorConverter(config.uitextColor.xpbar)} 0.80"), XPerienceLiveData); LIVEelements.Add(XPUILabel($"{(int)remainingxp}", 1, 1, TextAnchor.MiddleLeft, 15, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveData); #endregion break; case 2: #region LIVEloc2 // Live UI Box LIVEelements.Add(XPUIPanel2("0 0", "0 0", "10 16", "210 126", "0.5 0.5 0.5 0"), "Hud", XPerienceLivePrimary); // Rank if (config.xpLevelRanks.enableresetranks && config.xpLevelRanks.showrankinliveui && !xprecord.DisableRank) { if (xprecord.Might > 0 && config.might.armor > 0) { LIVEelements.Add(XPUIPanel("0 0.76", "0.125 0.95"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, rank.name, 1, .9f, "0.05", "0.90")); LIVEelements.Add(XPUIPanel("0.13 0.76", "0.99 0.99", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUILabel($"{rank.name}", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.50 0.05 0.05 0.70"), XPerienceLiveData); } else { LIVEelements.Add(XPUIPanel("0 0.51", "0.125 0.70"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, rank.name, 1, .9f, "0.05", "0.90")); LIVEelements.Add(XPUIPanel("0.13 0.51", "0.99 0.735", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUILabel($"{rank.name}", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.50 0.05 0.05 0.70"), XPerienceLiveData); } } // Armor if (xprecord.Might > 0 && config.might.armor > 0) { LIVEelements.Add(XPUIPanel("0 0.51", "0.125 0.70"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencearmor, 1, .9f, "0.15", "0.85")); LIVEelements.Add(XPUIPanel("0.13 0.51", "0.99 0.735", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUIPanel("0.01 0.145", $"{armorperc - 0.01} 0.845", $"{LiveColorConverter(config.uitextColor.armorbar)} 0.70"), XPerienceLiveData); LIVEelements.Add(XPUILabel($"{currentarmor} / {armor}", 1, 1, TextAnchor.MiddleLeft, 15, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveData); } // Level LIVEelements.Add(XPUIPanel("0 0.255", "0.125 0.44"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, levelicon, 1, .9f, "0.15", "0.95")); LIVEelements.Add(XPUIPanel("0.13 0.255", "0.99 0.480", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUILabel($"{XPLang("level", player.UserIDString)}: {xprecord.level} ({(int)levelpercent}%)", 1, 1.06f, TextAnchor.MiddleLeft, 15, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveData); // XP LIVEelements.Add(XPUIPanel("0 0", "0.125 0.185"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencexp, 1, .9f, "0.15", "0.80")); LIVEelements.Add(XPUIPanel("0.13 0", "0.99 0.23", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUIPanel("0.01 0.135", $"{reqxpperc - 0.01} 0.845", $"{LiveColorConverter(config.uitextColor.xpbar)} 0.80"), XPerienceLiveData); LIVEelements.Add(XPUILabel($"{(int)remainingxp}", 1, 1, TextAnchor.MiddleLeft, 15, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveData); #endregion break; case 3: #region LIVEloc3 // Live UI Box LIVEelements.Add(XPUIPanel2("0 1", "0 1", "10 -126", "210 -16", "0.5 0.5 0.5 0"), "Hud", XPerienceLivePrimary); // Rank if (config.xpLevelRanks.enableresetranks && config.xpLevelRanks.showrankinliveui && !xprecord.DisableRank) { if (xprecord.Might > 0 && config.might.armor > 0) { LIVEelements.Add(XPUIPanel("0 0.76", "0.125 0.95"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, rank.name, 1, .9f, "0.05", "0.90")); LIVEelements.Add(XPUIPanel("0.13 0.76", "0.99 0.99", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUILabel($"{rank.name}", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.50 0.05 0.05 0.70"), XPerienceLiveData); } else { LIVEelements.Add(XPUIPanel("0 0.51", "0.125 0.70"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, rank.name, 1, .9f, "0.05", "0.90")); LIVEelements.Add(XPUIPanel("0.13 0.51", "0.99 0.735", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUILabel($"{rank.name}", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.50 0.05 0.05 0.70"), XPerienceLiveData); } } // Armor if (xprecord.Might > 0 && config.might.armor > 0) { LIVEelements.Add(XPUIPanel("0 0.51", "0.125 0.70"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencearmor, 1, .9f, "0.15", "0.85")); LIVEelements.Add(XPUIPanel("0.13 0.51", "0.99 0.735", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUIPanel("0.01 0.145", $"{armorperc - 0.01} 0.845", $"{LiveColorConverter(config.uitextColor.armorbar)} 0.70"), XPerienceLiveData); LIVEelements.Add(XPUILabel($"{currentarmor} / {armor}", 1, 1, TextAnchor.MiddleLeft, 15, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveData); } // Level LIVEelements.Add(XPUIPanel("0 0.255", "0.125 0.44"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, levelicon, 1, .9f, "0.15", "0.95")); LIVEelements.Add(XPUIPanel("0.13 0.255", "0.99 0.480", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUILabel($"{XPLang("level", player.UserIDString)}: {xprecord.level} ({(int)levelpercent}%)", 1, 1.06f, TextAnchor.MiddleLeft, 15, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveData); // XP LIVEelements.Add(XPUIPanel("0 0", "0.125 0.185"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencexp, 1, .9f, "0.15", "0.80")); LIVEelements.Add(XPUIPanel("0.13 0", "0.99 0.23", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUIPanel("0.01 0.135", $"{reqxpperc - 0.01} 0.845", $"{LiveColorConverter(config.uitextColor.xpbar)} 0.80"), XPerienceLiveData); LIVEelements.Add(XPUILabel($"{(int)remainingxp}", 1, 1, TextAnchor.MiddleLeft, 15, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveData); #endregion break; case 4: #region LIVEloc4 // Live UI Box LIVEelements.Add(XPUIPanel2("1 1", "1 1", "-210 -126", "-10 -16", "0.5 0.5 0.5 0"), "Hud", XPerienceLivePrimary); // Rank if (config.xpLevelRanks.enableresetranks && config.xpLevelRanks.showrankinliveui && !xprecord.DisableRank) { if (xprecord.Might > 0 && config.might.armor > 0) { LIVEelements.Add(XPUIPanel("0 0.76", "0.125 0.95"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, rank.name, 1, .9f, "0.05", "0.90")); LIVEelements.Add(XPUIPanel("0.13 0.76", "0.99 0.99", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUILabel($"{rank.name}", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.50 0.05 0.05 0.70"), XPerienceLiveData); } else { LIVEelements.Add(XPUIPanel("0 0.51", "0.125 0.70"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, rank.name, 1, .9f, "0.05", "0.90")); LIVEelements.Add(XPUIPanel("0.13 0.51", "0.99 0.735", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUILabel($"{rank.name}", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.50 0.05 0.05 0.70"), XPerienceLiveData); } } // Armor if (xprecord.Might > 0 && config.might.armor > 0) { LIVEelements.Add(XPUIPanel("0 0.51", "0.125 0.70"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencearmor, 1, .9f, "0.15", "0.85")); LIVEelements.Add(XPUIPanel("0.13 0.51", "0.99 0.735", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUIPanel("0.01 0.145", $"{armorperc - 0.01} 0.845", $"{LiveColorConverter(config.uitextColor.armorbar)} 0.70"), XPerienceLiveData); LIVEelements.Add(XPUILabel($"{currentarmor} / {armor}", 1, 1, TextAnchor.MiddleLeft, 15, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveData); } // Level LIVEelements.Add(XPUIPanel("0 0.255", "0.125 0.44"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, levelicon, 1, .9f, "0.15", "0.95")); LIVEelements.Add(XPUIPanel("0.13 0.255", "0.99 0.480", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUILabel($"{XPLang("level", player.UserIDString)}: {xprecord.level} ({(int)levelpercent}%)", 1, 1.06f, TextAnchor.MiddleLeft, 15, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveData); // XP LIVEelements.Add(XPUIPanel("0 0", "0.125 0.185"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencexp, 1, .9f, "0.15", "0.80")); LIVEelements.Add(XPUIPanel("0.13 0", "0.99 0.23", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUIPanel("0.01 0.135", $"{reqxpperc - 0.01} 0.845", $"{LiveColorConverter(config.uitextColor.xpbar)} 0.80"), XPerienceLiveData); LIVEelements.Add(XPUILabel($"{(int)remainingxp}", 1, 1, TextAnchor.MiddleLeft, 15, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveData); #endregion break; case 5: #region LIVEloc5 // Live UI Box LIVEelements.Add(XPUIPanel2("0.5 0", "0.5 0", "-200 0", "181.5 115", "0 0 0 0"), "Hud", XPerienceLivePrimary); // Rank if (config.xpLevelRanks.enableresetranks && config.xpLevelRanks.showrankinliveui && !xprecord.DisableRank) { if (xprecord.Might > 0 && config.might.armor > 0) { LIVEelements.Add(XPUIPanel("0 0.845", "0.06 1"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, rank.name, 1, .9f, "0.05", "0.90")); LIVEelements.Add(XPUIPanel("0.062 0.845", "0.995 0.99", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUILabel($"{rank.name}", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.50 0.05 0.05 0.70"), XPerienceLiveData); } else { LIVEelements.Add(XPUIPanel("0 0.69", "0.06 0.80"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, rank.name, 1, .9f, "0.05", "0.90")); LIVEelements.Add(XPUIPanel("0.062 0.69", "0.995 0.825", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUILabel($"{rank.name}", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.50 0.05 0.05 0.70"), XPerienceLiveData); } } // Armor if (xprecord.Might > 0 && config.might.armor > 0) { LIVEelements.Add(XPUIPanel("0 0.69", "0.06 0.80"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencearmor, 1, .9f, "0.17", "0.82")); LIVEelements.Add(XPUIPanel("0.062 0.69", "0.995 0.825", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUIPanel("0 0.015", $"{armorperc - 0.002} 0.90", $"{LiveColorConverter(config.uitextColor.armorbar)} 0.70"), XPerienceLiveData); LIVEelements.Add(XPUILabel($"{currentarmor} / {armor}", 1, 1, TextAnchor.MiddleLeft, 15, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveData); } // Level LIVEelements.Add(XPUIPanel("0 0", "0.06 0.12"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, levelicon, 1, .9f, "0.17", "0.82")); LIVEelements.Add(XPUIPanel("0.062 0", "0.492 0.14", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUILabel($"{XPLang("level", player.UserIDString)}: {xprecord.level} ({(int)levelpercent}%)", 1, 1.06f, TextAnchor.MiddleLeft, 15, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveData); // XP LIVEelements.Add(XPUIPanel("0.505 0", "0.56 0.12"), XPerienceLivePrimary, XPerienceLiveIcon); LIVEelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencexp, 1, .9f, "0.15", "0.80")); LIVEelements.Add(XPUIPanel("0.562 0", "0.995 0.14", "0.6 0.6 0.6 0.25"), XPerienceLivePrimary, XPerienceLiveData); LIVEelements.Add(XPUIPanel("0.015 0.1", $"{reqxpperc - 0.001} 0.9", $"{LiveColorConverter(config.uitextColor.xpbar)} 0.80"), XPerienceLiveData); LIVEelements.Add(XPUILabel($"{(int)remainingxp}", 1, 1, TextAnchor.MiddleLeft, 15, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveData); #endregion break; } CuiHelper.AddUi(player, LIVEelements); } private void DashPanel(BasePlayer player, bool active, BaseMountable entity) { if (player == null || !player.userID.IsSteamId() || player.IsNpc || entity == null) return; DestroyUi(player, XPerienceLiveDashPanel); XPRecord xprecord = GetXPRecord(player); if (xprecord == null || xprecord.UILocation == 0) { DestroyUi(player, XPerienceLiveDashPanel); return; } if (!active) { DestroyUi(player, XPerienceLiveDashPanel); DashPanelTimer?.Destroy(); return; } DashPanelTimer = timer.Every(2f, () => { DestroyUi(player, XPerienceLiveDashPanel); var Dashelements = new CuiElementContainer(); // Get Fuel int fuel = GetFuel(entity); double fuelpercent = (fuel / 500.0) - 0.01; double fuelpercentd = Math.Ceiling((fuel / 500.0) * 100); // Get Speed string speedometer = GetSpeed(player, entity); // DashPanel Locations switch (xprecord.UILocation) { case 1: if (xprecord.Might > 0 && !xprecord.DisableRank && config.xpLevelRanks.enableresetranks && config.xpLevelRanks.showrankinliveui) { Dashelements.Add(XPUIPanel2("1 0", "1 0", "-392 125", "-210 150", "0.5 0.5 0.5 0"), "Hud", XPerienceLiveDashPanel); Dashelements.Add(XPUIPanel("0 0", "1 1"), XPerienceLiveDashPanel, XPerienceLiveIcon); Dashelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencedash, 1, .9f, "0", "1")); // Speedometer Dashelements.Add(XPUIPanel("0 0.2", "0.45 1", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveSpeedBar); Dashelements.Add(XPUILabel($"{speedometer}", 1, 1, TextAnchor.MiddleRight, 12, "0", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveSpeedBar); // Fuel Guage Dashelements.Add(XPUIPanel("0.61 0.35", "0.95 0.95", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveFuelBar); Dashelements.Add(XPUIPanel("0.01 0.04", $"{fuelpercent} 0.82", "1 0.5 0 0.80"), XPerienceLiveFuelBar); Dashelements.Add(XPUILabel($"{fuel} ({fuelpercentd}%)", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveFuelBar); } else if ((xprecord.Might <= 0 || config.might.armor <= 0) && (xprecord.DisableRank || !config.xpLevelRanks.enableresetranks || !config.xpLevelRanks.showrankinliveui)) { Dashelements.Add(XPUIPanel2("1 0", "1 0", "-392 67", "-210 92", "0.5 0.5 0.5 0"), "Hud", XPerienceLiveDashPanel); Dashelements.Add(XPUIPanel("0 0", "1 1"), XPerienceLiveDashPanel, XPerienceLiveIcon); Dashelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencedash, 1, .9f, "0", "1")); // Speedometer Dashelements.Add(XPUIPanel("0 0.2", "0.45 1", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveSpeedBar); Dashelements.Add(XPUILabel($"{speedometer}", 1, 1, TextAnchor.MiddleRight, 12, "0", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveSpeedBar); // Fuel Guage Dashelements.Add(XPUIPanel("0.61 0.35", "0.95 0.95", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveFuelBar); Dashelements.Add(XPUIPanel("0.01 0.04", $"{fuelpercent} 0.82", "1 0.5 0 0.80"), XPerienceLiveFuelBar); Dashelements.Add(XPUILabel($"{fuel} ({fuelpercentd}%)", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveFuelBar); } else if ((xprecord.Might > 0 && (!config.xpLevelRanks.enableresetranks || !config.xpLevelRanks.showrankinliveui || xprecord.DisableRank)) || (xprecord.Might <= 0 && (!xprecord.DisableRank || config.xpLevelRanks.enableresetranks || config.xpLevelRanks.showrankinliveui))) { Dashelements.Add(XPUIPanel2("1 0", "1 0", "-392 95", "-210 120", "0.5 0.5 0.5 0"), "Hud", XPerienceLiveDashPanel); Dashelements.Add(XPUIPanel("0 0", "1 1"), XPerienceLiveDashPanel, XPerienceLiveIcon); Dashelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencedash, 1, .9f, "0", "1")); // Speedometer Dashelements.Add(XPUIPanel("0 0.2", "0.45 1", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveSpeedBar); Dashelements.Add(XPUILabel($"{speedometer}", 1, 1, TextAnchor.MiddleRight, 12, "0", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveSpeedBar); // Fuel Guage Dashelements.Add(XPUIPanel("0.61 0.35", "0.95 0.95", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveFuelBar); Dashelements.Add(XPUIPanel("0.01 0.04", $"{fuelpercent} 0.82", "1 0.5 0 0.80"), XPerienceLiveFuelBar); Dashelements.Add(XPUILabel($"{fuel} ({fuelpercentd}%)", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveFuelBar); } break; case 2: if (xprecord.Might > 0 && !xprecord.DisableRank && config.xpLevelRanks.enableresetranks && config.xpLevelRanks.showrankinliveui) { Dashelements.Add(XPUIPanel2("0 0", "0 0", "10 125", "210 150", "0.5 0.5 0.5 0"), "Hud", XPerienceLiveDashPanel); Dashelements.Add(XPUIPanel("0 0", "1 1"), XPerienceLiveDashPanel, XPerienceLiveIcon); Dashelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencedash, 1, .9f, "0", "1")); // Speedometer Dashelements.Add(XPUIPanel("0 0.2", "0.45 1", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveSpeedBar); Dashelements.Add(XPUILabel($"{speedometer}", 1, 1, TextAnchor.MiddleRight, 12, "0", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveSpeedBar); // Fuel Guage Dashelements.Add(XPUIPanel("0.61 0.35", "0.95 0.95", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveFuelBar); Dashelements.Add(XPUIPanel("0.01 0.04", $"{fuelpercent} 0.82", "1 0.5 0 0.80"), XPerienceLiveFuelBar); Dashelements.Add(XPUILabel($"{fuel} ({fuelpercentd}%)", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveFuelBar); } else if ((xprecord.Might <= 0 || config.might.armor <= 0) && (xprecord.DisableRank || !config.xpLevelRanks.enableresetranks || !config.xpLevelRanks.showrankinliveui)) { Dashelements.Add(XPUIPanel2("0 0", "0 0", "10 67", "210 92", "0.5 0.5 0.5 0"), "Hud", XPerienceLiveDashPanel); Dashelements.Add(XPUIPanel("0 0", "1 1"), XPerienceLiveDashPanel, XPerienceLiveIcon); Dashelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencedash, 1, .9f, "0", "1")); // Speedometer Dashelements.Add(XPUIPanel("0 0.2", "0.45 1", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveSpeedBar); Dashelements.Add(XPUILabel($"{speedometer}", 1, 1, TextAnchor.MiddleRight, 12, "0", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveSpeedBar); // Fuel Guage Dashelements.Add(XPUIPanel("0.61 0.35", "0.95 0.95", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveFuelBar); Dashelements.Add(XPUIPanel("0.01 0.04", $"{fuelpercent} 0.82", "1 0.5 0 0.80"), XPerienceLiveFuelBar); Dashelements.Add(XPUILabel($"{fuel} ({fuelpercentd}%)", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveFuelBar); } else if ((xprecord.Might > 0 && (xprecord.DisableRank || !config.xpLevelRanks.enableresetranks || !config.xpLevelRanks.showrankinliveui)) || (xprecord.Might <= 0 && (!xprecord.DisableRank || config.xpLevelRanks.enableresetranks || config.xpLevelRanks.showrankinliveui))) { Dashelements.Add(XPUIPanel2("0 0", "0 0", "10 95", "210 120", "0.5 0.5 0.5 0"), "Hud", XPerienceLiveDashPanel); Dashelements.Add(XPUIPanel("0 0", "1 1"), XPerienceLiveDashPanel, XPerienceLiveIcon); Dashelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencedash, 1, .9f, "0", "1")); // Speedometer Dashelements.Add(XPUIPanel("0 0.2", "0.45 1", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveSpeedBar); Dashelements.Add(XPUILabel($"{speedometer}", 1, 1, TextAnchor.MiddleRight, 12, "0", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveSpeedBar); // Fuel Guage Dashelements.Add(XPUIPanel("0.61 0.35", "0.95 0.95", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveFuelBar); Dashelements.Add(XPUIPanel("0.01 0.04", $"{fuelpercent} 0.82", "1 0.5 0 0.80"), XPerienceLiveFuelBar); Dashelements.Add(XPUILabel($"{fuel} ({fuelpercentd}%)", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveFuelBar); } break; case 3: Dashelements.Add(XPUIPanel2("0 1", "0 1", "10 -155", "210 -130", "0.5 0.5 0.5 0"), "Hud", XPerienceLiveDashPanel); Dashelements.Add(XPUIPanel("0 0", "1 1"), XPerienceLiveDashPanel, XPerienceLiveIcon); Dashelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencedash, 1, .9f, "0", "1")); // Speedometer Dashelements.Add(XPUIPanel("0 0.2", "0.45 1", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveSpeedBar); Dashelements.Add(XPUILabel($"{speedometer}", 1, 1, TextAnchor.MiddleRight, 12, "0", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveSpeedBar); // Fuel Guage Dashelements.Add(XPUIPanel("0.61 0.35", "0.95 0.95", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveFuelBar); Dashelements.Add(XPUIPanel("0.01 0.04", $"{fuelpercent} 0.82", "1 0.5 0 0.80"), XPerienceLiveFuelBar); Dashelements.Add(XPUILabel($"{fuel} ({fuelpercentd}%)", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveFuelBar); break; case 4: Dashelements.Add(XPUIPanel2("1 1", "1 1", "-210 -155", "-10 -130", "0.5 0.5 0.5 0"), "Hud", XPerienceLiveDashPanel); Dashelements.Add(XPUIPanel("0 0", "1 1"), XPerienceLiveDashPanel, XPerienceLiveIcon); Dashelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencedash, 1, .9f, "0", "1")); // Speedometer Dashelements.Add(XPUIPanel("0 0.2", "0.45 1", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveSpeedBar); Dashelements.Add(XPUILabel($"{speedometer}", 1, 1, TextAnchor.MiddleRight, 12, "0", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveSpeedBar); // Fuel Guage Dashelements.Add(XPUIPanel("0.61 0.35", "0.95 0.95", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveFuelBar); Dashelements.Add(XPUIPanel("0.01 0.04", $"{fuelpercent} 0.82", "1 0.5 0 0.80"), XPerienceLiveFuelBar); Dashelements.Add(XPUILabel($"{fuel} ({fuelpercentd}%)", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveFuelBar); break; case 5: if (xprecord.Might > 0 && !xprecord.DisableRank && config.xpLevelRanks.enableresetranks && config.xpLevelRanks.showrankinliveui) { Dashelements.Add(XPUIPanel2("0.5 0", "0.5 0", "-100 110", "83.5 135", "0.5 0.5 0.5 0"), "Hud", XPerienceLiveDashPanel); Dashelements.Add(XPUIPanel("0 0", "1 1"), XPerienceLiveDashPanel, XPerienceLiveIcon); Dashelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencedash, 1, .9f, "0", "1")); // Speedometer Dashelements.Add(XPUIPanel("0 0.2", "0.45 1", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveSpeedBar); Dashelements.Add(XPUILabel($"{speedometer}", 1, 1, TextAnchor.MiddleRight, 12, "0", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveSpeedBar); // Fuel Guage Dashelements.Add(XPUIPanel("0.61 0.35", "0.95 0.95", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveFuelBar); Dashelements.Add(XPUIPanel("0.01 0.04", $"{fuelpercent} 0.82", "1 0.5 0 0.80"), XPerienceLiveFuelBar); Dashelements.Add(XPUILabel($"{fuel} ({fuelpercentd}%)", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveFuelBar); } else if ((xprecord.Might <= 0 || config.might.armor <= 0) && (xprecord.DisableRank || !config.xpLevelRanks.enableresetranks || !config.xpLevelRanks.showrankinliveui)) { Dashelements.Add(XPUIPanel2("0.5 0", "0.5 0", "-100 76", "83.5 101", "0.5 0.5 0.5 0"), "Hud", XPerienceLiveDashPanel); Dashelements.Add(XPUIPanel("0 0", "1 1"), XPerienceLiveDashPanel, XPerienceLiveIcon); Dashelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencedash, 1, .9f, "0", "1")); // Speedometer Dashelements.Add(XPUIPanel("0 0.2", "0.45 1", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveSpeedBar); Dashelements.Add(XPUILabel($"{speedometer}", 1, 1, TextAnchor.MiddleRight, 12, "0", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveSpeedBar); // Fuel Guage Dashelements.Add(XPUIPanel("0.61 0.35", "0.95 0.95", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveFuelBar); Dashelements.Add(XPUIPanel("0.01 0.04", $"{fuelpercent} 0.82", "1 0.5 0 0.80"), XPerienceLiveFuelBar); Dashelements.Add(XPUILabel($"{fuel} ({fuelpercentd}%)", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveFuelBar); } else if ((xprecord.Might > 0 && (xprecord.DisableRank || !config.xpLevelRanks.enableresetranks || !config.xpLevelRanks.showrankinliveui)) || (xprecord.Might <= 0 && (!xprecord.DisableRank || config.xpLevelRanks.enableresetranks || config.xpLevelRanks.showrankinliveui))) { Dashelements.Add(XPUIPanel2("0.5 0", "0.5 0", "-100 92", "83.5 122", "0.5 0.5 0.5 0"), "Hud", XPerienceLiveDashPanel); Dashelements.Add(XPUIPanel("0 0", "1 1"), XPerienceLiveDashPanel, XPerienceLiveIcon); Dashelements.Add(XPUIImage(XPerienceLiveIcon, XPeriencedash, 1, .9f, "0", "1")); // Speedometer Dashelements.Add(XPUIPanel("0 0.2", "0.45 1", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveSpeedBar); Dashelements.Add(XPUILabel($"{speedometer}", 1, 1, TextAnchor.MiddleRight, 12, "0", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveSpeedBar); // Fuel Guage Dashelements.Add(XPUIPanel("0.61 0.35", "0.95 0.95", "0 0 0 0"), XPerienceLiveDashPanel, XPerienceLiveFuelBar); Dashelements.Add(XPUIPanel("0.01 0.04", $"{fuelpercent} 0.82", "1 0.5 0 0.80"), XPerienceLiveFuelBar); Dashelements.Add(XPUILabel($"{fuel} ({fuelpercentd}%)", 1, 1, TextAnchor.MiddleLeft, 11, "0.05", "1", "1.0 1.0 1.0 0.70"), XPerienceLiveFuelBar); } break; } CuiHelper.AddUi(player, Dashelements); }); } private void PlayerInfoBox(BasePlayer player, string selectedplayer) { DestroyUi(player, XPeriencePlayerInfoBox); if (player == null || selectedplayer == null) return; var playerinfo = FindPlayer(selectedplayer); XPRecord xprecord = GetPlayerRecord(selectedplayer); if (playerinfo == null) return; float height = 0.033f; int row = 1; // Create Box var FullScreenelements = new CuiElementContainer(); FullScreenelements.Add(new CuiPanel { Image = { Color = "0 0 0 1" }, RectTransform = { AnchorMin = "0.16 0.20", AnchorMax = "0.39 0.95" }, CursorEnabled = true }, "Overlay", XPeriencePlayerInfoBox); // Box Content FullScreenelements.Add(XPUILabel($"{XPLang("playerinfoalive", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; if (config.playerinfoBoxsettings.alivetime) { FullScreenelements.Add(XPUILabel($"{XPLang("timealive", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{PlayerTimeValues(player, "", playerinfo.lifeStory.secondsAlive)}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; } if (config.playerinfoBoxsettings.sleepingtime) { FullScreenelements.Add(XPUILabel($"{XPLang("timesleeping", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{PlayerTimeValues(player, "", playerinfo.lifeStory.secondsSleeping)}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; } if (config.playerinfoBoxsettings.swimingtime) { FullScreenelements.Add(XPUILabel($"{XPLang("timeswimming", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{PlayerTimeValues(player, "", playerinfo.lifeStory.secondsSwimming)}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; } if (config.playerinfoBoxsettings.drivingtime) { FullScreenelements.Add(XPUILabel($"{XPLang("timedriving", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{PlayerTimeValues(player, "", playerinfo.lifeStory.secondsDriving)}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; } if (config.playerinfoBoxsettings.flyingtime) { FullScreenelements.Add(XPUILabel($"{XPLang("timeflying", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{PlayerTimeValues(player, "", playerinfo.lifeStory.secondsFlying)}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; } if (config.playerinfoBoxsettings.boatingtime) { FullScreenelements.Add(XPUILabel($"{XPLang("timeboating", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{PlayerTimeValues(player, "", playerinfo.lifeStory.secondsBoating)}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; } if (config.playerinfoBoxsettings.basetime) { FullScreenelements.Add(XPUILabel($"{XPLang("timeinbase", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{PlayerTimeValues(player, "", playerinfo.lifeStory.secondsInBase)}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; } if (config.playerinfoBoxsettings.monumenttime) { FullScreenelements.Add(XPUILabel($"{XPLang("timeinmonument", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{PlayerTimeValues(player, "", playerinfo.lifeStory.secondsInMonument)}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; } if (config.playerinfoBoxsettings.wildernesstime) { FullScreenelements.Add(XPUILabel($"{XPLang("timeinwild", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{PlayerTimeValues(player, "", playerinfo.lifeStory.secondsWilderness)}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; } if (config.playerinfoBoxsettings.metersran) { FullScreenelements.Add(XPUILabel($"{XPLang("metersran", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{Math.Round(playerinfo.lifeStory.metersRun, 2)}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; } if (config.playerinfoBoxsettings.meterswalked) { FullScreenelements.Add(XPUILabel($"{XPLang("meterswalk", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{Math.Round(playerinfo.lifeStory.metersWalked, 2)}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; } if (config.playerinfoBoxsettings.lastdmgrec) { FullScreenelements.Add(XPUILabel($"{XPLang("timedmgrec", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{PlayerTimeValues(player, "dmgrecieved", playerinfo.SecondsSinceAttacked)}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; } if (config.playerinfoBoxsettings.lastdmgrecby) { FullScreenelements.Add(XPUILabel($"{XPLang("timedmgrecfrom", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{PlayerInfoValues(player, playerinfo.lastAttacker, "dmgrecieved")}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; } if (config.playerinfoBoxsettings.lastdmgdelt) { FullScreenelements.Add(XPUILabel($"{XPLang("timedmgdelt", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{PlayerTimeValues(player, "", playerinfo.SecondsSinceDealtDamage)}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; } if (config.playerinfoBoxsettings.lastdmgdeltto) { FullScreenelements.Add(XPUILabel($"{XPLang("timedeltto", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{PlayerInfoValues(player, playerinfo.lastDealtDamageTo, "dmgdelt")}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; } row++; FullScreenelements.Add(XPUILabel($"{XPLang("playerharveststats", player.UserIDString)}: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; FullScreenelements.Add(XPUILabel($"Wood: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{xprecord.Wood}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; FullScreenelements.Add(XPUILabel($"Stone: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{xprecord.Stone}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; FullScreenelements.Add(XPUILabel($"Metal: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{xprecord.Metal}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; FullScreenelements.Add(XPUILabel($"Sulfur: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{xprecord.Sulfur}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; FullScreenelements.Add(XPUILabel($"Cactus: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{xprecord.Cactus}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; FullScreenelements.Add(XPUILabel($"Berries: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{xprecord.Berries}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; FullScreenelements.Add(XPUILabel($"Pumpkins: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{xprecord.Pumpkin}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; FullScreenelements.Add(XPUILabel($"Potatos: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{xprecord.Potato}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; FullScreenelements.Add(XPUILabel($"Corn: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{xprecord.Corn}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; FullScreenelements.Add(XPUILabel($"Mushrooms: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{xprecord.Mushroom}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; FullScreenelements.Add(XPUILabel($"Hemp: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{xprecord.Hemp}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; FullScreenelements.Add(XPUILabel($"Seeds: ", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.40", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); FullScreenelements.Add(XPUILabel($"{xprecord.Seed}", row, height, TextAnchor.MiddleLeft, 12, "0.40", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerInfoBox); row++; row++; FullScreenelements.Add(XPUIButton("xp.playercontrol closebox", row, height, 12, "1 0 0 1", "〘Close Info Box〙", "0.25", "0.75", TextAnchor.MiddleCenter, "1 1 1 1"), XPeriencePlayerInfoBox); CuiHelper.AddUi(player, FullScreenelements); } // Current Player Panels private void PlayerControlPanelFullMain(BasePlayer player) { if (player == null) return; RankCheck(player); XPRecord xprecord = GetXPRecord(player); Ranks rank = GetXPRank(xprecord.rank); if (xprecord == null) return; var FullScreenelements = new CuiElementContainer(); var height = 0.050f; // Main UI | Title | Icon FullScreenelements.Add(new CuiPanel { Image = { Color = "0.1 0.1 0.1 0.99" }, RectTransform = { AnchorMin = $"0 0", AnchorMax = $"1 1" }, CursorEnabled = true }, "Overlay", XPeriencePlayerControlFullMain); FullScreenelements.Add(XPUILabel($"{player.displayName}", 1, 0.060f, TextAnchor.MiddleLeft, 20, "0.01", "0.18", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullMain); string image = XPerienceicon; if (config.defaultOptions.useplayeravatar) { image = player.UserIDString; } if (config.xpLevelRanks.enableresetranks && !rank.image.IsNullOrEmpty() && !xprecord.DisableRank) { FullScreenelements.Add(new CuiElement { Parent = XPeriencePlayerControlFullMain, Components = { new CuiRawImageComponent { Png = ImageLibrary?.Call("GetImage", rank.name) }, new CuiRectTransformComponent { AnchorMin = "0.01 0.75", AnchorMax = "0.15 0.95" } } }); } else { FullScreenelements.Add(new CuiElement { Parent = XPeriencePlayerControlFullMain, Components = { new CuiRawImageComponent { Png = ImageLibrary?.Call("GetImage", image) }, new CuiRectTransformComponent { AnchorMin = "0.01 0.75", AnchorMax = "0.15 0.95" } } }); } // Spacer int row = 4; // Navigation Menu FullScreenelements.Add(XPUIPanel("0.0 0.0", "0.15 0.85", "1.0 1.0 1.0 0.0"), XPeriencePlayerControlFullMain, XPeriencePlayerControlFullMenu); FullScreenelements.Add(XPUIButton("xp.playercontrol main", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_014", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); // Settings Page Button row++; row++; FullScreenelements.Add(XPUIButton($"xp.playercontrol settings {player.UserIDString}", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("playersettings", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); // Kill Records Button if (KillRecords != null && config.xpBonus.showkrbutton) { row++; row++; FullScreenelements.Add(XPUIButton($"xp.playercontrol killrecords {player.UserIDString}", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("mykillrecords", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); } // Death Records Button if (XPerienceAddon != null) { row++; row++; FullScreenelements.Add(XPUIButton($"xp.playercontrol deathrecords {player.UserIDString}", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("mydeathrecords", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); } // Raidable Bases Button if (XPerienceAddon != null && RaidableBases != null) { row++; row++; FullScreenelements.Add(XPUIButton($"xp.playercontrol raids {player.UserIDString}", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("myraids", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); } // Top Players Buttom row++; row++; FullScreenelements.Add(XPUIButton($"xp.playercontrol topplayers", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("topplayers", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); // Help Button row++; row++; FullScreenelements.Add(XPUIButton("xp.playercontrol help", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("help", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); // Close Button row++; row++; FullScreenelements.Add(XPUIButton("xp.playercontrol close", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_009", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); // Admin Button if (player.IsAdmin && permission.UserHasPermission(player.UserIDString, Admin)) { row++; row++; FullScreenelements.Add(XPUIButton("xp.playercontrol admin", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminpanel", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); } // UI End CuiHelper.AddUi(player, FullScreenelements); return; } private void PlayerInfoPage(BasePlayer player) { if (player == null) return; XPRecord xprecord = GetXPRecord(player); DailyLimitPlayer(player); DailyRecord dailyrecord = GetDailyRecord(player); Ranks rank = GetXPRank(xprecord.rank); double xplimit = 0; switch (config.dailyxpLimit.limitmultipliertype) { case 1: xplimit += config.dailyxpLimit.dailyxplimit + ((config.dailyxpLimit.dailyxplimit * config.dailyxpLimit.limitpercentage) * xprecord.level); break; case 2: xplimit += config.dailyxpLimit.dailyxplimit + ((config.dailyxpLimit.dailyxplimit * config.dailyxpLimit.limitmultiplier) * xprecord.level); break; } int statresetlimit = 0; int skillresetlimit = 0; bool UserHasSpecialGroup = false; // Check Special Groups var highestpriority = config.specialGroups.specialgroups.Values.Max(i => i.grouppriority); var getgrouplist = config.specialGroups.specialgroups.Values.OrderByDescending(i => i.grouppriority); restart: foreach (var specialgroup in getgrouplist) { UserHasSpecialGroup = permission.UserHasGroup(player.UserIDString, specialgroup.permissionname); if (UserHasSpecialGroup && specialgroup.grouppriority == highestpriority) { switch (config.dailyxpLimit.limitmultipliertype) { case 1: xplimit += specialgroup.dailyxplimit + ((specialgroup.dailyxplimit * config.dailyxpLimit.limitpercentage) * xprecord.level); break; case 2: xplimit += specialgroup.dailyxplimit + ((specialgroup.dailyxplimit * config.dailyxpLimit.limitmultiplier) * xprecord.level); break; } statresetlimit = specialgroup.dailystatlimitboost; skillresetlimit = specialgroup.dailyskilllimitboost; break; } else if (UserHasSpecialGroup && specialgroup.grouppriority != highestpriority) { highestpriority--; goto restart; } } string textcolor = "perk"; if(xprecord.rank > 0 && !xprecord.DisableRank && (config.xpLevelRanks.rankskillboost || config.xpLevelRanks.rankstatboost)) { textcolor = "ranklevel"; } if (xprecord == null) return; float height = 0.027f; float skillheight = 0.028f; float resetheight = 0.020f; float infoheight = 0.020f; int row = 1; var FullScreenelements = new CuiElementContainer(); // Timer Data DateTime resettimestats = xprecord.resettimerstats.AddMinutes(config.defaultOptions.resetminsstats); DateTime resettimeskills = xprecord.resettimerskills.AddMinutes(config.defaultOptions.resetminsskills); if (permission.UserHasPermission(player.UserIDString, VIP)) { resettimestats = xprecord.resettimerstats.AddMinutes(config.defaultOptions.vipresetminstats); resettimeskills = xprecord.resettimerskills.AddMinutes(config.defaultOptions.vipresetminsskills); } TimeSpan statsinterval = resettimestats - DateTime.Now; TimeSpan skillinterval = resettimeskills - DateTime.Now; int statstimer = (int)statsinterval.TotalMinutes; int skilltimer = (int)skillinterval.TotalMinutes; if (!config.defaultOptions.restristresets || config.defaultOptions.bypassadminreset && player.IsAdmin && permission.UserHasPermission(player.UserIDString, Admin)) { statstimer = 0; skilltimer = 0; } // Main UI FullScreenelements.Add(XPUIPanel("0.16 0.0", "1 1", "0 0 0 0.75"), XPeriencePlayerControlFullMain, XPeriencePlayerControlFullInfo); // Player Name, Rank, & Status FullScreenelements.Add(XPUILabel($"Player Details:", row, 0.060f, TextAnchor.MiddleLeft, 20, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (config.playerinfoBoxsettings.showinfobox) { FullScreenelements.Add(XPUIButton($"xp.playercontrol openbox {xprecord.id}", row + 1, infoheight, 13, "1.0 0.0 0.0 0.7", $"〘Info Box〙", "0.13", "0.20", TextAnchor.MiddleCenter), XPeriencePlayerControlFullInfo); } row++; // Main - Player Info int statpoints = xprecord.MentalityP + xprecord.DexterityP + xprecord.MightP + xprecord.CaptaincyP + xprecord.WeaponryP; int skillpoints = xprecord.WoodCutterP + xprecord.SmithyP + xprecord.MinerP + xprecord.ForagerP + xprecord.HunterP + xprecord.FisherP + xprecord.CrafterP + xprecord.FramerP + xprecord.TamerP + xprecord.MedicP + xprecord.ScavengerP + xprecord.ElectricianP; // XP Calulations double levelpercent; if (xprecord.experience == 0 || xprecord.level == 0) { levelpercent = ((xprecord.experience - 0) / config.xpLevel.levelstart) * 100; } else { levelpercent = ((xprecord.experience - (xprecord.requiredxp - (xprecord.level * config.xpLevel.levelmultiplier))) / (xprecord.requiredxp - (xprecord.requiredxp - (xprecord.level * config.xpLevel.levelmultiplier)))) * 100; } // Main Info #region Main Info FullScreenelements.Add(XPUILabel($"----------------------------------------------------------------", row, 0.035f, TextAnchor.MiddleLeft, 9, "0.0", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; // Online Status if (config.defaultOptions.showonlinestatus) { if (xprecord.Status) { FullScreenelements.Add(XPUILabel($"{XPLang("status", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceonline, row, height, "0.11", "0.117")); FullScreenelements.Add(XPUILabel($" {XPLang("online", player.UserIDString)}", row, height, TextAnchor.MiddleLeft, 11, "0.12", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; } else { FullScreenelements.Add(XPUILabel($"{XPLang("status", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceoffline, row, height, "0.11", "0.117")); FullScreenelements.Add(XPUILabel($" {XPLang("offline", player.UserIDString)}", row, height, TextAnchor.MiddleLeft, 11, "0.12", "0.25", "1 1 1 1"), XPeriencePlayerControlFullInfo); row++; } } // Rank if (config.xpLevelRanks.enableresetranks && !xprecord.DisableRank) { FullScreenelements.Add(XPUILabel($"{XPLang("rank", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{rank.name}", row, height, TextAnchor.MiddleLeft, 11, "0.05", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; FullScreenelements.Add(XPUILabel($"{XPLang("ranksig", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{rank.sig}", row, height, TextAnchor.MiddleLeft, 11, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; if (config.xpLevelRanks.showtruelevelprofile) { FullScreenelements.Add(XPUILabel($"{XPLang("ranklevel", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", xprecord.truelevel)}", row, height, TextAnchor.MiddleLeft, 11, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; } if (config.xpLevelRanks.showtruexpprofile) { FullScreenelements.Add(XPUILabel($"{XPLang("rankxp", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", xprecord.trueexperience)}", row, height, TextAnchor.MiddleLeft, 11, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; } } // Level FullScreenelements.Add(XPUILabel($"{XPLang("level", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", xprecord.level)} ({(int)levelpercent}%)", row, height, TextAnchor.MiddleLeft, 11, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; // XP FullScreenelements.Add(XPUILabel($"{XPLang("experience", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", (int)xprecord.experience)}", row, height, TextAnchor.MiddleLeft, 11, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; // Next Level FullScreenelements.Add(XPUILabel($"{XPLang("nextlevel", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", (int)xprecord.requiredxp)} ({String.Format("{0:N0}", (int)(xprecord.requiredxp - xprecord.experience))})", row, height, TextAnchor.MiddleLeft, 11, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; // Daily Limit if (config.dailyxpLimit.enabledailyxplimit) { // Calculate time var getlastxpreset = dailyrecord.lastexperiencereset - DateTime.Now; double lastxpresethours = double.Parse(getlastxpreset.Hours.ToString()); double lastxpresetmins = double.Parse(getlastxpreset.Minutes.ToString()); string dailyxpresetlabelhours = "hours"; string dailyxpresetlabelmins = "mins"; switch (config.dailyxpLimit.limitmultipliertype) { case 1: if (!UserHasSpecialGroup) { xplimit = config.dailyxpLimit.dailyxplimit + ((config.dailyxpLimit.dailyxplimit * config.dailyxpLimit.limitpercentage) * xprecord.level); } if (permission.UserHasPermission(player.UserIDString, VIP) && !UserHasSpecialGroup) { xplimit = config.dailyxpLimit.dailyxplimitvip + ((config.dailyxpLimit.dailyxplimit * config.dailyxpLimit.limitpercentage) * xprecord.level); } break; case 2: if (!UserHasSpecialGroup) { xplimit = config.dailyxpLimit.dailyxplimit + ((config.dailyxpLimit.dailyxplimit * config.dailyxpLimit.limitmultiplier) * xprecord.level); } if (permission.UserHasPermission(player.UserIDString, VIP) && !UserHasSpecialGroup) { xplimit = config.dailyxpLimit.dailyxplimitvip + ((config.dailyxpLimit.dailyxplimit * config.dailyxpLimit.limitmultiplier) * xprecord.level); } break; } if (xplimit > 0) { FullScreenelements.Add(XPUILabel($"{XPLang("dailyxplimit", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{(int)xplimit} ({(int)dailyrecord.dailyexperience})", row, height, TextAnchor.MiddleLeft, 11, "0.11", "0.19", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"({(int)lastxpresethours} {dailyxpresetlabelhours} {(int)lastxpresetmins} {dailyxpresetlabelmins})", row, height, TextAnchor.MiddleLeft, 11, "0.20", "0.30", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"{XPLang("dailyxplimit", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"∞ ({(int)dailyrecord.dailyexperience})", row, height, TextAnchor.MiddleLeft, 11, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } // Unspent Points FullScreenelements.Add(XPUILabel($"{XPLang("unusedstatpoints", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", xprecord.statpoint)}", row, height, TextAnchor.MiddleLeft, 11, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; FullScreenelements.Add(XPUILabel($"{XPLang("unusedskillpoints", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", xprecord.skillpoint)}", row, height, TextAnchor.MiddleLeft, 11, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; FullScreenelements.Add(XPUILabel($"{XPLang("totalspent", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", statpoints + skillpoints)}", row, height, TextAnchor.MiddleLeft, 11, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (Economics != null && config.xpEcon.showbalanceprofile) { double balance = Economics.Call("Balance", player.UserIDString); row++; FullScreenelements.Add(XPUILabel($"{XPLang("econbalance", player.UserIDString)}", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", balance)}", row, height, TextAnchor.MiddleLeft, 11, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; #endregion // Stats #region Stats Control FullScreenelements.Add(XPUILabel($"----------------------------------------------------------------", row, height, TextAnchor.MiddleLeft, 9, "0.0", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; if(config.dailyresetLimit.enabledailyresetlimit) { statresetlimit += config.dailyresetLimit.dailystatlimit; // Calculate time var getlaststatreset = dailyrecord.laststatreset - DateTime.Now; double laststatreset = Math.Round(double.Parse(getlaststatreset.Hours.ToString()), 1); string dailystatresetlabel = "hours"; if (laststatreset <= 1) { laststatreset = int.Parse(getlaststatreset.Minutes.ToString()); dailystatresetlabel = "mins"; } if (permission.UserHasPermission(player.UserIDString, VIP) && !UserHasSpecialGroup) { statresetlimit = config.dailyresetLimit.dailystatlimitvip; } if (statresetlimit > 0) { FullScreenelements.Add(XPUILabel($"{XPLang("dailyresetlimit", player.UserIDString)}: {statresetlimit} ({dailyrecord.dailystatresets}) ({laststatreset} {dailystatresetlabel})", row, height, TextAnchor.UpperLeft, 11, "0.02", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"{XPLang("dailyresetlimit", player.UserIDString)}: ∞ ({dailyrecord.dailystatresets})", row, height, TextAnchor.UpperCenter, 11, "0", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } // Mentality if (config.mentality.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermMentality)) || !config.defaultOptions.userpermissions)) { if (xprecord.Mentality > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt stat Mentality {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset stat Mentality {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int MentalityCost = (xprecord.Mentality + 1) * config.mentality.costmultiplier; if (xprecord.Mentality < 1) { MentalityCost = config.mentality.pointcoststart; } if (xprecord.Mentality < config.mentality.maxlvl && (MentalityCost <= xprecord.statpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt stat mentality {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits stat mentality {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencementality, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("mentality", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Mentality}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Mentality < config.mentality.maxlvl) { FullScreenelements.Add(XPUILabel($"( {MentalityCost} / {xprecord.MentalityP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.MentalityP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "Mentality") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "Mentality") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "Mentality") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } // Dexterity if (config.dexterity.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermDexterity)) || !config.defaultOptions.userpermissions)) { if (xprecord.Dexterity > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt stat Dexterity {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset stat Dexterity {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int DexterityCost = (xprecord.Dexterity + 1) * config.dexterity.costmultiplier; if (xprecord.Dexterity < 1) { DexterityCost = config.dexterity.pointcoststart; } if (xprecord.Dexterity < config.dexterity.maxlvl && (DexterityCost <= xprecord.statpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt stat dexterity {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits stat dexterity {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("dexterity", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Dexterity}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Dexterity < config.dexterity.maxlvl) { FullScreenelements.Add(XPUILabel($"( {DexterityCost} / {xprecord.DexterityP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.DexterityP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "Dexterity") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "Dexterity") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "Dexterity") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } // Might if (config.might.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermMight)) || !config.defaultOptions.userpermissions)) { if (xprecord.Might > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt stat Might {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset stat Might {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int MightCost = (xprecord.Might + 1) * config.might.costmultiplier; if (xprecord.Might < 1) { MightCost = config.might.pointcoststart; } if (xprecord.Might < config.might.maxlvl && (MightCost <= xprecord.statpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt stat might {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits stat might {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("might", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Might}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Might < config.might.maxlvl) { FullScreenelements.Add(XPUILabel($"( {MightCost} / {xprecord.MightP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.MightP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "Might") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "Might") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "Might") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } // Captaincy if (config.captaincy.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermCaptaincy)) || !config.defaultOptions.userpermissions)) { if (xprecord.Captaincy > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt stat Captaincy {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset stat Captaincy {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int CaptaincyCost = (xprecord.Captaincy + 1) * config.captaincy.costmultiplier; if (xprecord.Captaincy < 1) { CaptaincyCost = config.captaincy.pointcoststart; } if (xprecord.Captaincy < config.captaincy.maxlvl && (CaptaincyCost <= xprecord.statpoint) && (config.captaincy.allownoteam || (!config.captaincy.allownoteam && player.Team != null))) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt stat captaincy {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits stat captaincy {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecaptaincy, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("captaincy", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Captaincy}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Captaincy < config.captaincy.maxlvl) { FullScreenelements.Add(XPUILabel($"( {CaptaincyCost} / {xprecord.CaptaincyP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.CaptaincyP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "Captaincy") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "Captaincy") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "Captaincy") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } // Weaponry if (config.weaponry.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermWeaponry)) || !config.defaultOptions.userpermissions)) { if (xprecord.Weaponry > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt stat Weaponry {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset stat Weaponry {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int WeaponryCost = (xprecord.Weaponry + 1) * config.weaponry.costmultiplier; if (xprecord.Weaponry < 1) { WeaponryCost = config.weaponry.pointcoststart; } if (xprecord.Weaponry < config.weaponry.maxlvl && (WeaponryCost <= xprecord.statpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt stat weaponry {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits stat weaponry {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponry", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Weaponry}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Weaponry < config.weaponry.maxlvl) { FullScreenelements.Add(XPUILabel($"( {WeaponryCost} / {xprecord.WeaponryP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.WeaponryP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "Weaponry") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "Weaponry") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "Weaponry") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } #endregion // Skills #region Skills Control FullScreenelements.Add(XPUILabel($"----------------------------------------------------------------", row, height, TextAnchor.MiddleLeft, 9, "0.0", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; if (config.dailyresetLimit.enabledailyresetlimit) { // Calculate time var getlastskillreset = dailyrecord.lastskillreset - DateTime.Now; double lastskillreset = Math.Round(double.Parse(getlastskillreset.Hours.ToString()), 1); string dailyskillresetlabel = "hours"; if (lastskillreset <= 1) { lastskillreset = int.Parse(getlastskillreset.Minutes.ToString()); dailyskillresetlabel = "mins"; } skillresetlimit += config.dailyresetLimit.dailyskilllimit; if (permission.UserHasPermission(player.UserIDString, VIP) && !UserHasSpecialGroup) { skillresetlimit = config.dailyresetLimit.dailyskilllimitvip; } if (skillresetlimit > 0) { FullScreenelements.Add(XPUILabel($"{XPLang("dailyresetlimit", player.UserIDString)}: {skillresetlimit} ({dailyrecord.dailyskillresets}) ({lastskillreset} {dailyskillresetlabel})", row, height, TextAnchor.UpperLeft, 11, "0.02", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"{XPLang("dailyresetlimit", player.UserIDString)}: ∞ ({dailyrecord.dailyskillresets})", row, height, TextAnchor.UpperCenter, 11, "0", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } // WoodCutter if (config.woodcutter.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermWoodCutter)) || !config.defaultOptions.userpermissions)) { if (xprecord.WoodCutter > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt skill WoodCutter {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset skill WoodCutter {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int WoodCutterCost = (xprecord.WoodCutter + 1) * config.woodcutter.costmultiplier; if (xprecord.WoodCutter < 1) { WoodCutterCost = config.woodcutter.pointcoststart; } if (xprecord.WoodCutter < config.woodcutter.maxlvl && (WoodCutterCost <= xprecord.skillpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt skill woodcutter {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits skill woodcutter {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewoodcutter, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("woodcutter", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.WoodCutter}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.WoodCutter < config.woodcutter.maxlvl) { FullScreenelements.Add(XPUILabel($"( {WoodCutterCost} / {xprecord.WoodCutterP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.WoodCutterP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "WoodCutter") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "WoodCutter") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "WoodCutter") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } // Smithy if (config.smithy.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermSmithy)) || !config.defaultOptions.userpermissions)) { if (xprecord.Smithy > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt skill Smithy {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset skill Smithy {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int SmithyCost = (xprecord.Smithy + 1) * config.smithy.costmultiplier; if (xprecord.Smithy < 1) { SmithyCost = config.smithy.pointcoststart; } if (xprecord.Smithy < config.smithy.maxlvl && (SmithyCost <= xprecord.skillpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt skill smithy {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits skill smithy {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencesmithy, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("smithy", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Smithy}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Smithy < config.smithy.maxlvl) { FullScreenelements.Add(XPUILabel($"( {SmithyCost} / {xprecord.SmithyP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.SmithyP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "Smithy") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "Smithy") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "Smithy") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } // Miner if (config.miner.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermMiner)) || !config.defaultOptions.userpermissions)) { if (xprecord.Miner > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt skill Miner {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset skill Miner {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int MinerCost = (xprecord.Miner + 1) * config.miner.costmultiplier; if (xprecord.Miner < 1) { MinerCost = config.miner.pointcoststart; } if (xprecord.Miner < config.miner.maxlvl && (MinerCost <= xprecord.skillpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt skill miner {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits skill miner {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("miner", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Miner}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Miner < config.miner.maxlvl) { FullScreenelements.Add(XPUILabel($"( {MinerCost} / {xprecord.MinerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.MinerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "Miner") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "Miner") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "Miner") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } // Forager if (config.forager.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermForager)) || !config.defaultOptions.userpermissions)) { if (xprecord.Forager > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt skill Forager {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset skill Forager {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int ForagerCost = (xprecord.Forager + 1) * config.forager.costmultiplier; if (xprecord.Forager < 1) { ForagerCost = config.forager.pointcoststart; } if (xprecord.Forager < config.forager.maxlvl && (ForagerCost <= xprecord.skillpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt skill forager {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits skill forager {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceforager, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("forager", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Forager}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Forager < config.forager.maxlvl) { FullScreenelements.Add(XPUILabel($"( {ForagerCost} / {xprecord.ForagerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.ForagerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "Forager") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "Forager") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "Forager") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } // Hunter if (config.hunter.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermHunter)) || !config.defaultOptions.userpermissions)) { if (xprecord.Hunter > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt skill Hunter {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset skill Hunter {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int HunterCost = (xprecord.Hunter + 1) * config.hunter.costmultiplier; if (xprecord.Hunter < 1) { HunterCost = config.hunter.pointcoststart; } if (xprecord.Hunter < config.hunter.maxlvl && (HunterCost <= xprecord.skillpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt skill hunter {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits skill hunter {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencehunter, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("hunter", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Hunter}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Hunter < config.hunter.maxlvl) { FullScreenelements.Add(XPUILabel($"( {HunterCost} / {xprecord.HunterP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.HunterP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "Hunter") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "Hunter") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "Hunter") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } // Crafter if (config.crafter.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermCrafter)) || !config.defaultOptions.userpermissions)) { if (xprecord.Crafter > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt skill Crafter {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset skill Crafter {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int CrafterCost = (xprecord.Crafter + 1) * config.crafter.costmultiplier; if (xprecord.Crafter < 1) { CrafterCost = config.crafter.pointcoststart; } if (xprecord.Crafter < config.crafter.maxlvl && (CrafterCost <= xprecord.skillpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt skill crafter {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits skill crafter {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecrafter, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("crafter", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Crafter}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Crafter < config.crafter.maxlvl) { FullScreenelements.Add(XPUILabel($"( {CrafterCost} / {xprecord.CrafterP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.CrafterP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "Crafter") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "Crafter") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "Crafter") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } // Framer if (config.framer.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermFramer)) || !config.defaultOptions.userpermissions)) { if (xprecord.Framer > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt skill Framer {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset skill Framer {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int FramerCost = (xprecord.Framer + 1) * config.framer.costmultiplier; if (xprecord.Framer < 1) { FramerCost = config.framer.pointcoststart; } if (xprecord.Framer < config.framer.maxlvl && (FramerCost <= xprecord.skillpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt skill framer {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits skill framer {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceframer, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("framer", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Framer}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Framer < config.framer.maxlvl) { FullScreenelements.Add(XPUILabel($"( {FramerCost} / {xprecord.FramerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.FramerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "Framer") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "Framer") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "Framer") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } // Fisher if (config.fisher.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermFisher)) || !config.defaultOptions.userpermissions)) { if (xprecord.Fisher > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt skill Fisher {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset skill Fisher {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int FisherCost = (xprecord.Fisher + 1) * config.fisher.costmultiplier; if (xprecord.Fisher < 1) { FisherCost = config.fisher.pointcoststart; } if (xprecord.Fisher < config.fisher.maxlvl && (FisherCost <= xprecord.skillpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt skill fisher {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits skill fisher {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencefisher, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("fisher", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Fisher}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Fisher < config.fisher.maxlvl) { FullScreenelements.Add(XPUILabel($"( {FisherCost} / {xprecord.FisherP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.FisherP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "Fisher") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "Fisher") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "Fisher") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } // Medic if (config.medic.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermMedic)) || !config.defaultOptions.userpermissions)) { if (xprecord.Medic > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt skill Medic {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset skill Medic {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int MedicCost = (xprecord.Medic + 1) * config.medic.costmultiplier; if (xprecord.Medic < 1) { MedicCost = config.medic.pointcoststart; } if (xprecord.Medic < config.medic.maxlvl && (MedicCost <= xprecord.skillpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt skill medic {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits skill medic {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemedic, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("medic", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Medic}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Medic < config.medic.maxlvl) { FullScreenelements.Add(XPUILabel($"( {MedicCost} / {xprecord.MedicP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.MedicP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "Medic") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "Medic") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "Medic") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } // Scavenger if (config.scavenger.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermScavenger)) || !config.defaultOptions.userpermissions)) { if (xprecord.Scavenger > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt skill Scavenger {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset skill Scavenger {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int ScavengerCost = (xprecord.Scavenger + 1) * config.scavenger.costmultiplier; if (xprecord.Scavenger < 1) { ScavengerCost = config.scavenger.pointcoststart; } if (xprecord.Scavenger < config.scavenger.maxlvl && (ScavengerCost <= xprecord.skillpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt skill scavenger {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits skill scavenger {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencescavenger, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("scavenger", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Scavenger}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Scavenger < config.scavenger.maxlvl) { FullScreenelements.Add(XPUILabel($"( {ScavengerCost} / {xprecord.ScavengerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.ScavengerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "Scavenger") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "Scavenger") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "Scavenger") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } // Electrician if (config.electrician.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermElectrician)) || !config.defaultOptions.userpermissions)) { if (xprecord.Electrician > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt skill Electrician {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset skill Electrician {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int ElectricianCost = (xprecord.Electrician + 1) * config.electrician.costmultiplier; if (xprecord.Electrician < 1) { ElectricianCost = config.electrician.pointcoststart; } if (xprecord.Electrician < config.electrician.maxlvl && (ElectricianCost <= xprecord.skillpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt skill electrician {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits skill electrician {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("electrician", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Electrician}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Electrician < config.electrician.maxlvl) { FullScreenelements.Add(XPUILabel($"( {ElectricianCost} / {xprecord.ElectricianP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.ElectricianP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } double iconpos = 0.205; if (Wizardry != null && config.wizardrymod.enablewizardry && config.wizardrymod.statorskill == "Electrician") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Archery != null && config.archerymod.enablearchery && config.archerymod.statorskill == "Electrician") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, row, height, $"{iconpos}", $"{iconpos + 0.01}")); iconpos += 0.015; } if (Backpacks != null && config.backpacksmod.enablebackpacks && config.backpacksmod.statorskill == "Electrician") { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, row, height, $"{iconpos}", $"{iconpos + 0.01}")); } row++; } // Tamer if (config.tamer.enabletame && ((config.defaultOptions.userpermissions && permission.UserHasPermission(player.UserIDString, PermTamer)) || !config.defaultOptions.userpermissions)) { if (xprecord.Tamer > 0 && config.defaultOptions.allowrespec) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playercontrol getprompt skill Tamer {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playercontrol reset skill Tamer {player.UserIDString}", row, height, 13, "0 0 0 0", "↺", "0", "0.015", TextAnchor.MiddleCenter, "1 0 0 1"), XPeriencePlayerControlFullInfo); } FullScreenelements.Add(XPUILabel(" | ", row, height, TextAnchor.MiddleCenter, 13, "0.015", "0.020", "1 1 1 1"), XPeriencePlayerControlFullInfo); } int TamerCost = (xprecord.Tamer + 1) * config.tamer.costmultiplier; if (xprecord.Tamer < 1) { TamerCost = config.tamer.pointcoststart; } if (xprecord.Tamer < config.tamer.maxlvl && (TamerCost <= xprecord.skillpoint)) { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton($"xp.playeredits getprompt skill tamer {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton($"xp.playeredits skill tamer {player.UserIDString}", row, height, 18, "0 0 0 0", "⇧", "0.020", "0.035", TextAnchor.MiddleCenter, "0 1 0 1"), XPeriencePlayerControlFullInfo); } } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencetamer, row, height, "0.040", "0.050")); FullScreenelements.Add(XPUILabel($"{XPLang("tamer", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.055", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Tamer}", row, height, TextAnchor.MiddleCenter, 11, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Tamer < config.tamer.maxlvl) { FullScreenelements.Add(XPUILabel($"( {TamerCost} / {xprecord.TamerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.TamerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } } #endregion // Column Two Stat Effects #region Stat Effects List int rowtwo = 1; FullScreenelements.Add(XPUILabel($"Stat Effects:", rowtwo, 0.055f, TextAnchor.MiddleLeft, 18, "0.285", "0.38", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); // Reset Stats Button if (!config.defaultOptions.hardcorenoreset || (config.defaultOptions.hardcorenoreset && config.defaultOptions.bypassadminreset && player.IsAdmin && permission.UserHasPermission(player.UserIDString, Admin))) { if (statstimer > 0) { FullScreenelements.Add(XPUIButton("", rowtwo + 1, resetheight, 13, "1.0 0.0 0.0 0.7", $"〘{XPLang("canresetstats", player.UserIDString, statstimer)}〙", "0.38", "0.48", TextAnchor.MiddleCenter), XPeriencePlayerControlFullInfo); } else { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton("xp.playercontrol getprompt stats all", rowtwo + 1, resetheight, 13, "1.0 0.0 0.0 0.7", $"〘{XPLang("resetstatsbutton", player.UserIDString)}〙", "0.38", "0.48", TextAnchor.MiddleCenter), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton("xp.playercontrol reset stats", rowtwo + 1, resetheight, 13, "1.0 0.0 0.0 0.7", $"〘{XPLang("resetstatsbutton", player.UserIDString)}〙", "0.38", "0.48", TextAnchor.MiddleCenter), XPeriencePlayerControlFullInfo); } } } // Stat List rowtwo++; FullScreenelements.Add(XPUILabel($"----------------------------------------------------------------", rowtwo, 0.045f, TextAnchor.UpperLeft, 9, "0.285", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; if ((xprecord.Mentality > 0 || config.defaultOptions.showunusedeffects) && config.mentality.maxlvl != 0) { if (config.mentality.locktechtree && config.mentality.unlocktechtreelevel > 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencementality, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("techtreestatus", player.UserIDString)}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); string techtreestatus = "Locked"; string techstatuscolor = "red"; if (xprecord.Mentality >= config.mentality.unlocktechtreelevel) { techtreestatus = "Unlocked"; techstatuscolor = "green"; } FullScreenelements.Add(XPUILabel($"{techtreestatus}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.mentality.researchcost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencementality, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("researchcost", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{RankBoosts(player, "stat", (xprecord.Mentality * config.mentality.researchcost), config.Rankboostssettings.researchcost) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.mentality.researchspeed != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencementality, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("researchspeed", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{RankBoosts(player, "stat", (xprecord.Mentality * config.mentality.researchspeed), config.Rankboostssettings.researchspeed) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.mentality.criticalchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencementality, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("critchance", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Mentality * config.mentality.criticalchance) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.mentality.damageincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencementality, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("damagenpc", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Mentality * config.mentality.damageincrease) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } if ((xprecord.Dexterity > 0 || config.defaultOptions.showunusedeffects) && config.dexterity.maxlvl != 0) { if (config.dexterity.blockchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("blockchance", player.UserIDString)}: (Damage)", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Dexterity * config.dexterity.blockchance) * 100}% (-{RankBoosts(player, "stat", (xprecord.Dexterity * config.dexterity.blockamount), config.Rankboostssettings.block) * 100}%)", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.dexterity.dodgechance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("dodgechance", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Dexterity * config.dexterity.dodgechance) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.dexterity.reducearmordmg != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("armordmgabsorb", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{RankBoosts(player, "stat", (xprecord.Dexterity * config.dexterity.reducearmordmg), config.Rankboostssettings.armor) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.dexterity.horsespeed != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("horsespeed", player.UserIDString)}: (USE key)", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Dexterity * config.dexterity.horsespeed) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.dexterity.boatspeed != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("boatspeed", player.UserIDString)}: (RELOAD key)", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Dexterity * config.dexterity.boatspeed) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.dexterity.vehiclespeed != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("vehiclespeed", player.UserIDString)}: (RELOAD key)", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Dexterity * config.dexterity.vehiclespeed) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.dexterity.fuelreduce != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("vehiclefuelreduce", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Dexterity * config.dexterity.fuelreduce) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } if ((xprecord.Might > 0 || config.defaultOptions.showunusedeffects) && config.might.maxlvl != 0) { if (config.might.armor != 0) { double teatime = 0; double teaboost = 0; bool teamodified = false; // Check for TeaModifier Plugin and Values if (TeaModifiers != null) { teatime = TeaModifiers.Call("GetTeaDuration", player, xprecord.teatype, Modifier.ModifierType.Max_Health); teaboost = TeaModifiers.Call("GetTeaValue", player, xprecord.teatype, Modifier.ModifierType.Max_Health) * 100; teamodified = true; } if (GetTeaCooldown(player) != 0) { switch (GetTeaTypes(player)) { case "none": teaboost = 0; break; case "maxhealthtea": if (teamodified) { teaboost = (teaboost * config.might.armor) * xprecord.Might; } if (!teamodified) { teaboost = (5 * config.might.armor) *xprecord.Might; } break; case "maxhealthtea.advanced": if (teamodified) { teaboost =(teaboost * config.might.armor) * xprecord.Might; } if (!teamodified) { teaboost = (12.5 * config.might.armor) *xprecord.Might; } break; case "maxhealthtea.pure": if (teamodified) { teaboost = (teaboost * config.might.armor) * xprecord.Might; } if (!teamodified) { teaboost = (20 * config.might.armor) *xprecord.Might; } break; } teatime = Math.Ceiling(GetTeaCooldown(player) / 60); } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("armor", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.34", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($" ({XPLang("tea", player.UserIDString)}: {XPLang($"teatype{xprecord.teatype}", player.UserIDString)} ({teatime} mins))", rowtwo, skillheight, TextAnchor.MiddleLeft, 8, "0.34", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Might * config.might.armor) * 100} (+{Math.Ceiling(teaboost)})", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.might.meleedmg != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("melee", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{RankBoosts(player, "stat", (xprecord.Might * config.might.meleedmg), config.Rankboostssettings.meleedmg) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.might.metabolism != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("calories", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(int)(RankBoosts(player, "stat", (config.might.metabolism * xprecord.Might) * player.metabolism.calories.max, config.Rankboostssettings.metabolism))}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.might.metabolism != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("hydration", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(int)(RankBoosts(player, "stat", (config.might.metabolism * xprecord.Might) * player.metabolism.hydration.max, config.Rankboostssettings.metabolism))}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.might.bleedreduction != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("bleed", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{(config.might.bleedreduction * xprecord.Might) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.might.radreduction != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("radiation", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{(config.might.radreduction * xprecord.Might) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("radiationpoison", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{(config.might.radreduction * xprecord.Might) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.might.heattolerance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("heat", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(config.might.heattolerance * xprecord.Might) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.might.coldtolerance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("cold", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(config.might.coldtolerance * xprecord.Might) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } if ((xprecord.Captaincy > 0 || config.defaultOptions.showunusedeffects) && config.captaincy.maxlvl != 0) { if (config.captaincy.skillboost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecaptaincy, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("captaincyskillboost", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Captaincy * config.captaincy.skillboost) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.captaincy.xpboost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecaptaincy, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("captaincyxpboost", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Captaincy * config.captaincy.xpboost) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.captaincy.captaincydistance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecaptaincy, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("captaincydistance", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{RankBoosts(player, "stat", xprecord.Captaincy * config.captaincy.captaincydistance, config.Rankboostssettings.distance)} FT", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } if ((xprecord.Weaponry > 0 || config.defaultOptions.showunusedeffects) && config.weaponry.maxlvl != 0) { if (config.weaponry.reductionchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponrychance", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Weaponry * config.weaponry.reductionchance) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; if (config.weaponry.tool != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponrytools", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{(xprecord.Weaponry * config.weaponry.tool) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.weaponry.powertools != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponrypowertools", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{(xprecord.Weaponry * config.weaponry.powertools) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.weaponry.meleeweapons != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponryweaponsmelee", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{(xprecord.Weaponry * config.weaponry.meleeweapons) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.weaponry.projectileweapons != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponryweaponsprojectile", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{(xprecord.Weaponry * config.weaponry.projectileweapons) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } if (config.weaponry.maxammo != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponryweaponsammo", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Weaponry * config.weaponry.maxammo) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (XPerienceAddon != null) { double getaddonweaponryammochance = Convert.ToDouble(XPerienceAddon.Call("GetExtraFeatures", player, "weaponry", "ammochance")); if (getaddonweaponryammochance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponryaddonammochance", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Weaponry * getaddonweaponryammochance) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } } #endregion // Other Abilities #region Other Abilities FullScreenelements.Add(XPUILabel($"Other Abilities:", rowtwo, skillheight, TextAnchor.MiddleLeft, 11, "0.285", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; // Backpacks if (config.backpacksmod.enablebackpacks && (permission.UserHasPermission(player.UserIDString, Backpack1) || permission.UserHasPermission(player.UserIDString, Backpack2) || permission.UserHasPermission(player.UserIDString, Backpack3) || permission.UserHasPermission(player.UserIDString, Backpack4) || permission.UserHasPermission(player.UserIDString, Backpack5) || permission.UserHasPermission(player.UserIDString, Backpack6) || permission.UserHasPermission(player.UserIDString, Backpack7) || permission.UserHasPermission(player.UserIDString, Backpack8))) { int backpackrows = 0; int backpackslots = 0; if (permission.UserHasPermission(player.UserIDString, Backpack1)) { backpackrows = 1; backpackslots = 6; } if (permission.UserHasPermission(player.UserIDString, Backpack2)) { backpackrows = 2; backpackslots = 12; } if (permission.UserHasPermission(player.UserIDString, Backpack3)) { backpackrows = 3; backpackslots = 18; } if (permission.UserHasPermission(player.UserIDString, Backpack4)) { backpackrows = 4; backpackslots = 24; } if (permission.UserHasPermission(player.UserIDString, Backpack5)) { backpackrows = 5; backpackslots = 30; } if (permission.UserHasPermission(player.UserIDString, Backpack6)) { backpackrows = 6; backpackslots = 36; } if (permission.UserHasPermission(player.UserIDString, Backpack7)) { backpackrows = 7; backpackslots = 42; } if (permission.UserHasPermission(player.UserIDString, Backpack8)) { backpackrows = 8; backpackslots = 48; } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"Backpack Rows (slots):", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{backpackrows} ({backpackslots})", rowtwo, skillheight, TextAnchor.MiddleLeft, 11, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } // Archery Line if (config.archerymod.enablearchery && (permission.UserHasPermission(player.UserIDString, ArcheryNovice) || permission.UserHasPermission(player.UserIDString, ArcheryAdept) || permission.UserHasPermission(player.UserIDString, ArcheryMaster))) { if (permission.UserHasPermission(player.UserIDString, ArcheryNovice)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"▫ Archery Level:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{XPLang("archerynovice", player.UserIDString)}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (permission.UserHasPermission(player.UserIDString, ArcheryAdept)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"▫ Archery Level:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{XPLang("archeryadept", player.UserIDString)}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (permission.UserHasPermission(player.UserIDString, ArcheryMaster)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"▫ Archery Level:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{XPLang("archerymaster", player.UserIDString)}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } // Wizardy Line if (config.wizardrymod.enablewizardry && (permission.UserHasPermission(player.UserIDString, WizardryNovice) || permission.UserHasPermission(player.UserIDString, WizardryAdept) || permission.UserHasPermission(player.UserIDString, WizardryMaster))) { if (permission.UserHasPermission(player.UserIDString, WizardryNovice)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"▫ Wizardry Level:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{XPLang("wizardrynovice", player.UserIDString)}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (permission.UserHasPermission(player.UserIDString, WizardryAdept)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"▫ Wizardry Level:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{XPLang("wizardryadept", player.UserIDString)}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (permission.UserHasPermission(player.UserIDString, WizardryMaster)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"▫ Wizardry Level:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{XPLang("wizardrymaster", player.UserIDString)}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } #endregion // Colum Three Skill Effects #region Skill Effects List int rowthree = 1; FullScreenelements.Add(XPUILabel($"Skill Effects:", rowthree, 0.055f, TextAnchor.MiddleLeft, 18, "0.55", "0.65", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); // Reset Skills Button if (!config.defaultOptions.hardcorenoreset || (config.defaultOptions.hardcorenoreset && config.defaultOptions.bypassadminreset && player.IsAdmin && permission.UserHasPermission(player.UserIDString, XPerience.Admin))) { if (skilltimer > 0) { FullScreenelements.Add(XPUIButton("", rowthree + 1, resetheight, 13, "1.0 0.0 0.0 0.7", $"〘{XPLang("canresetskills", player.UserIDString, skilltimer)}〙", "0.65", "0.78", TextAnchor.MiddleCenter), XPeriencePlayerControlFullInfo); } else { if (config.defaultOptions.enableconfirmationprompt && xprecord.enableconfirmationprompt) { FullScreenelements.Add(XPUIButton("xp.playercontrol getprompt skills all", rowthree + 1, resetheight, 13, "1.0 0.0 0.0 0.7", $"〘{XPLang("resetskillsbutton", player.UserIDString)}〙", "0.65", "0.78", TextAnchor.MiddleCenter), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUIButton("xp.playercontrol reset skills", rowthree + 1, resetheight, 13, "1.0 0.0 0.0 0.7", $"〘{XPLang("resetskillsbutton", player.UserIDString)}〙", "0.65", "0.78", TextAnchor.MiddleCenter), XPeriencePlayerControlFullInfo); } } } // Skill List rowthree++; FullScreenelements.Add(XPUILabel($"---------------------------------------------------------------------------", rowthree, 0.045f, TextAnchor.UpperLeft, 9, "0.55", "1", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; string skilliconleft = "0.55"; string skilliconright = "0.56"; string skilllabelleft = "0.565"; string skilllabelright = "0.715"; string skillvalueleft = "0.715"; string skillvalueright = "0.80"; if ((xprecord.WoodCutter > 0 || config.defaultOptions.showunusedeffects) && config.woodcutter.maxlvl != 0) { if (config.woodcutter.gatherrate != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewoodcutter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("woodgather", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.woodcutter.gatherrate, "pos")}{RankBoosts(player, "skill", (xprecord.WoodCutter * config.woodcutter.gatherrate), config.Rankboostssettings.woodcuttergr)}x", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.woodcutter.bonusincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewoodcutter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Wood Bonus:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.woodcutter.bonusincrease, "pos")}{RankBoosts(player, "skill", (xprecord.WoodCutter * config.woodcutter.bonusincrease), config.Rankboostssettings.woodcutterbonus)}x", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.woodcutter.applechance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewoodcutter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("woodapple", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.woodcutter.applechance, "pos")}{(xprecord.WoodCutter * config.woodcutter.applechance) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } } if ((xprecord.Smithy > 0 || config.defaultOptions.showunusedeffects) && config.smithy.maxlvl != 0) { if (config.smithy.productionrate != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencesmithy, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("productionrate", player.UserIDString)}: ({XPLang("productionamount", player.UserIDString)})", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.smithy.productionrate, "pos")}{RankBoosts(player, "skill", (xprecord.Smithy * config.smithy.productionrate), config.Rankboostssettings.smithypr) * 100}% (+{ Math.Ceiling(RankBoosts(player, "skill", (xprecord.Smithy * config.smithy.productionrate) * 5, config.Rankboostssettings.smithypr))})", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.smithy.productionspeed != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencesmithy, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("productionspeed", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.smithy.productionspeed, "pos")}{RankBoosts(player, "skill", (xprecord.Smithy * config.smithy.productionspeed), config.Rankboostssettings.smithyps) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.smithy.fuelconsumption != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencesmithy, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("fuelconsumption", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.smithy.fuelconsumption, "neg")}{RankBoosts(player, "skill", (xprecord.Smithy * config.smithy.fuelconsumption), config.Rankboostssettings.smithyfc) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.smithy.metalchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencesmithy, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("hmetalchance", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.smithy.metalchance, "pos")}{RankBoosts(player, "skill", (xprecord.Smithy * config.smithy.metalchance), config.Rankboostssettings.smithyhqmc) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.smithy.metalamount != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencesmithy, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("hmetalamount", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.smithy.metalamount, "pos")}{RankBoosts(player, "skill", xprecord.Smithy * config.smithy.metalamount, config.Rankboostssettings.smithyhqma)}", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } } if ((xprecord.Miner > 0 || config.defaultOptions.showunusedeffects) && config.miner.maxlvl != 0) { if (config.miner.gatherrate != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("oregather", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.miner.gatherrate, "pos")}{RankBoosts(player, "skill", (xprecord.Miner * config.miner.gatherrate), config.Rankboostssettings.minergr)}x", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.miner.bonusincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Ore Bonus:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.miner.bonusincrease, "pos")}{RankBoosts(player, "skill", (xprecord.Miner * config.miner.bonusincrease), config.Rankboostssettings.minerbonus)}x", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.miner.fuelconsumption != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("fuelconsumptionhats", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.miner.fuelconsumption, "neg")}{RankBoosts(player, "skill", (xprecord.Miner * config.miner.fuelconsumption), config.Rankboostssettings.minerfuel) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.miner.metalchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("metalchance", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.miner.metalchance, "pos")}{RankBoosts(player, "skill", (xprecord.Miner * config.miner.metalchance), config.Rankboostssettings.minermfc) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.miner.metalamount != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("metalamount", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.miner.metalamount, "pos")}{RankBoosts(player, "skill", xprecord.Miner * config.miner.metalamount, config.Rankboostssettings.minermfa)}", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (XPerienceAddon != null) { double quarryboost = Convert.ToDouble(XPerienceAddon.Call("GetExtraFeatures", player, "miner", "amount")); if (quarryboost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("quarryboost", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", quarryboost, "pos")}{quarryboost * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; int quarryduration = Convert.ToInt32(XPerienceAddon.Call("GetExtraFeatures", player, "miner", "duration")); FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("quarryduration", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{(xprecord.Miner * quarryduration) / 60} mins", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; int quarrycooldown = Convert.ToInt32(XPerienceAddon.Call("GetExtraFeatures", player, "miner", "cooldown")); FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("quarrycooldown", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{((xprecord.Miner * 60) - quarrycooldown) / 60} mins", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } } } if ((xprecord.Forager > 0 || config.defaultOptions.showunusedeffects) && config.forager.maxlvl != 0) { if (config.forager.gatherrate != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceforager, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Ground {XPLang("gather", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.forager.gatherrate, "pos")}{RankBoosts(player, "skill", (xprecord.Forager * config.forager.gatherrate), config.Rankboostssettings.foragergr)}x", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.forager.chanceincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceforager, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("seedbonus", player.UserIDString)}: (Amount)", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.forager.chanceincrease, "pos")}{(config.forager.chanceincrease * xprecord.Forager) * 100}% ({(config.forager.chanceincrease * xprecord.Forager) * 10})", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.forager.randomchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceforager, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("randomitem", player.UserIDString)} Chance:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.forager.randomchance, "pos")}{RankBoosts(player, "skill", (xprecord.Forager * config.forager.randomchance), config.Rankboostssettings.foragerric) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.forager.grubwormincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceforager, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("grubworm", player.UserIDString)} Chance:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.forager.grubwormincrease, "pos")}{(xprecord.Forager * config.forager.grubwormincrease) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if(XPerienceAddon != null) { double recyclerchance = Convert.ToDouble(XPerienceAddon.Call("GetExtraFeatures", player, "forager", "foragerrecyclerchance")); if(recyclerchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceforager, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("addonrecyclerchance", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", recyclerchance, "pos")}{(recyclerchance * xprecord.Forager) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } double recyclerspeed = Convert.ToDouble(XPerienceAddon.Call("GetExtraFeatures", player, "forager", "foragerrecyclerspeed")); if(recyclerspeed != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceforager, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("addonrecyclerspeed", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", recyclerspeed, "pos")}{(recyclerspeed * xprecord.Forager) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } } } if ((xprecord.Hunter > 0 || config.defaultOptions.showunusedeffects) && config.hunter.maxlvl != 0) { if (config.hunter.gatherrate != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencehunter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("foodgather", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.hunter.gatherrate, "pos")}{RankBoosts(player, "skill", (xprecord.Hunter * config.hunter.gatherrate), config.Rankboostssettings.huntergr)}x", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.hunter.bonusincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencehunter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Food Bonus:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.hunter.bonusincrease, "pos")}{RankBoosts(player, "skill", (xprecord.Hunter * config.hunter.bonusincrease), config.Rankboostssettings.hunterbonus)}x", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.hunter.damageincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencehunter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("damagewildlife", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.hunter.damageincrease, "pos")}{RankBoosts(player, "skill", (xprecord.Hunter * config.hunter.damageincrease), config.Rankboostssettings.hunterdmg) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.hunter.nightdmgincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencehunter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("nightdamage", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.hunter.nightdmgincrease, "pos")}{RankBoosts(player, "skill", (xprecord.Hunter * config.hunter.nightdmgincrease), config.Rankboostssettings.hunterndmg) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } } if ((xprecord.Crafter > 0 || config.defaultOptions.showunusedeffects) && config.crafter.maxlvl != 0) { if (config.crafter.craftspeed != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecrafter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("craftspeed", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.crafter.craftspeed, "neg")}{RankBoosts(player, "skill", (config.crafter.craftspeed * xprecord.Crafter), config.Rankboostssettings.crafterspeed) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.crafter.craftcost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecrafter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Craft {XPLang("costreduction", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.crafter.craftcost, "neg")}{RankBoosts(player, "skill", (xprecord.Crafter * config.crafter.craftcost), config.Rankboostssettings.craftercost) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.crafter.repairincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecrafter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("fullrepair", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{RankBoosts(player, "skill", (xprecord.Crafter * config.crafter.repairincrease), config.Rankboostssettings.crafterri) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.crafter.repaircost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecrafter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("repaircost", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.crafter.repaircost, "neg")}{RankBoosts(player, "skill", (xprecord.Crafter * config.crafter.repaircost), config.Rankboostssettings.crafterrc) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.crafter.conditionchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecrafter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("highcond", player.UserIDString)}: (Amount)", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.crafter.conditionchance, "pos")}{RankBoosts(player, "skill", (config.crafter.conditionchance * xprecord.Crafter), config.Rankboostssettings.craftercc) * 100}% (+{config.crafter.conditionamount * 100}%)", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } } if ((xprecord.Framer > 0 || config.defaultOptions.showunusedeffects) && config.framer.maxlvl != 0) { if (config.framer.upgradecost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceframer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Building {XPLang("upgradecost", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.framer.upgradecost, "neg")}{RankBoosts(player, "skill", (config.framer.upgradecost * xprecord.Framer), config.Rankboostssettings.framerucost) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.framer.repairtime != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceframer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Building {XPLang("repairtime", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.framer.repairtime, "neg")}{(xprecord.Framer * config.framer.repairtime) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.framer.repaircost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceframer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Building {XPLang("repaircost", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.framer.repaircost, "neg")}{RankBoosts(player, "skill", (xprecord.Framer * config.framer.repaircost), config.Rankboostssettings.framerrcost) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } } // Split Skills int rowthreenew = 3; skilliconleft = "0.80"; skilliconright = "0.81"; skilllabelleft = "0.815"; skilllabelright = "0.945"; skillvalueleft = "0.945"; skillvalueright = "1"; if ((xprecord.Fisher > 0 || config.defaultOptions.showunusedeffects) && config.fisher.maxlvl != 0) { if (config.fisher.fishamountincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencefisher, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("fishamount", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.fisher.fishamountincrease, "pos")}{Math.Round(RankBoosts(player, "skill", xprecord.Fisher * config.fisher.fishamountincrease, config.Rankboostssettings.fisherfa))}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.fisher.itemamountincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencefisher, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("fishitems", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.fisher.itemamountincrease, "pos")}{Math.Round(RankBoosts(player, "skill", xprecord.Fisher * config.fisher.itemamountincrease, config.Rankboostssettings.fisheria))}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.fisher.oxygenreduction != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencefisher, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("fishoxygen", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.fisher.oxygenreduction, "neg")}{Math.Round((xprecord.Fisher * config.fisher.oxygenreduction) * 100)}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.fisher.oxygentankreduction != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencefisher, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("fishoxygentank", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.fisher.oxygentankreduction, "neg")}{Math.Round(RankBoosts(player, "skill", (xprecord.Fisher * config.fisher.oxygentankreduction), config.Rankboostssettings.fisherotr) * 100)}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } } if ((xprecord.Medic > 0 || config.defaultOptions.showunusedeffects) && config.medic.maxlvl != 0) { if (config.medic.recoverhp != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemedic, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("medicrecover", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.medic.recoverhp, "pos")}{Math.Round(RankBoosts(player, "skill", xprecord.Medic * config.medic.recoverhp, config.Rankboostssettings.medicrecovera))}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.medic.revivehp != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemedic, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("medicrevive", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.medic.revivehp, "pos")}{Math.Round(RankBoosts(player, "skill", xprecord.Medic * config.medic.revivehp, config.Rankboostssettings.medicrevivala))}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.medic.tools != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemedic, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("medictools", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.medic.tools, "pos")}{Math.Round(RankBoosts(player, "skill", xprecord.Medic * config.medic.tools, config.Rankboostssettings.medictools))}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.medic.crafttime != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemedic, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("mediccrafting", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.medic.crafttime, "pos")}{Math.Round((xprecord.Medic * config.medic.crafttime) * 100)}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.medic.teas != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemedic, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("medicteas", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.medic.teas, "pos")}{Math.Round((xprecord.Medic * config.medic.teas) * 100)}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } } if ((xprecord.Scavenger > 0 || config.defaultOptions.showunusedeffects) && config.scavenger.maxlvl != 0) { if (config.scavenger.scavlootchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencescavenger, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("scavchance", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.scavenger.scavlootchance, "pos")}{Math.Round(RankBoosts(player, "skill", (xprecord.Scavenger * config.scavenger.scavlootchance), config.Rankboostssettings.scavelc) * 100)}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.scavenger.scavmultiplier != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencescavenger, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("scavmultiplier", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"x{Math.Ceiling(RankBoosts(player, "skill", xprecord.Scavenger * config.scavenger.scavmultiplier, config.Rankboostssettings.scavelm))}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.scavenger.scavchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencescavenger, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("customscavchance", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.scavenger.scavchance, "pos")}{Math.Round(RankBoosts(player, "skill", (xprecord.Scavenger * config.scavenger.scavchance), config.Rankboostssettings.scavcic) * 100)}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.scavenger.customscavmultiplier != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencescavenger, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("customscavmultiplier", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"x{Math.Ceiling(RankBoosts(player, "skill", xprecord.Scavenger * config.scavenger.customscavmultiplier, config.Rankboostssettings.scavelm))}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (XPerienceAddon != null) { double getaddonscavengerchance = Convert.ToDouble(XPerienceAddon.Call("GetExtraFeatures", player, "scavenger", "scavengervendingchance")); if(getaddonscavengerchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencescavenger, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("addonscavengervendorchance", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{(getaddonscavengerchance * xprecord.Scavenger) * 100}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; double getaddonscavengeramount = Convert.ToDouble(XPerienceAddon.Call("GetExtraFeatures", player, "scavenger", "scavengervendingamount")); FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencescavenger, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("addonscavengervendoramount", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{(getaddonscavengeramount * xprecord.Scavenger) * 100}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } } } if ((xprecord.Electrician > 0 || config.defaultOptions.showunusedeffects) && config.electrician.maxlvl != 0) { if (config.electrician.minsolarinput != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("minsolarpanelinput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Electrician * config.electrician.minsolarinput}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.electrician.solarpanelinputincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("solarpanelinput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.solarpanelinputincrease, "pos")}{(xprecord.Electrician * config.electrician.solarpanelinputincrease) * 100}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.electrician.solarpanelmaxincrease != 0) { int solarpanel = (int)((xprecord.Electrician * config.electrician.solarpanelinputincrease) * config.electrician.solarpaneldefault) + config.electrician.solarpaneldefault; FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("solarpaneloutput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.solarpanelmaxincrease, "pos")}{(xprecord.Electrician * config.electrician.solarpanelmaxincrease) * 100}% ({solarpanel})", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.electrician.smallbatterymaxincrease != 0) { int smallbattery = (int)((xprecord.Electrician * config.electrician.smallbatterymaxincrease) * config.electrician.smallbatterydefault) + config.electrician.smallbatterydefault; FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("smallbatteryoutput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.smallbatterymaxincrease, "pos")}{(xprecord.Electrician * config.electrician.smallbatterymaxincrease) * 100}% ({smallbattery})", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.electrician.mediumbatterymaxincrease != 0) { int mediumbattery = (int)((xprecord.Electrician * config.electrician.mediumbatterymaxincrease) * config.electrician.mediumbatterydefault) + config.electrician.mediumbatterydefault; FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("mediumbatteryoutput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.mediumbatterymaxincrease, "pos")}{(xprecord.Electrician * config.electrician.mediumbatterymaxincrease) * 100}% ({mediumbattery})", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.electrician.largebatterymaxincrease != 0) { int largebattery = (int)((xprecord.Electrician * config.electrician.largebatterymaxincrease) * config.electrician.largebatterydefault) + config.electrician.largebatterydefault; FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("largebatteryoutput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.largebatterymaxincrease, "pos")}{(xprecord.Electrician * config.electrician.largebatterymaxincrease) * 100}% ({largebattery})", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.electrician.smallgeneratormaxincrease != 0) { int smallgenerator = (int)((xprecord.Electrician * config.electrician.smallgeneratormaxincrease) * config.electrician.smallgeneratordefault) + config.electrician.smallgeneratordefault; FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("smallgeneratoroutput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.smallgeneratormaxincrease, "pos")}{(xprecord.Electrician * config.electrician.smallgeneratormaxincrease) * 100}% ({smallgenerator})", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.electrician.electricwindmillincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("windmilloutput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.electricwindmillincrease, "pos")}{(xprecord.Electrician * config.electrician.electricwindmillincrease) * 100}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.electrician.electricwindmillmaxincrease != 0) { int windmill = (int)((xprecord.Electrician * config.electrician.electricwindmillmaxincrease) * config.electrician.electricwindmilldefault) + config.electrician.electricwindmilldefault; FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("windmillmaxoutput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.electricwindmillmaxincrease, "pos")}{(xprecord.Electrician * config.electrician.electricwindmillmaxincrease) * 100}% ({windmill})", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } } // Taming Ability if (xprecord.Tamer > 0) { rowthreenew = 29; skilliconleft = "0.80"; skilliconright = "0.81"; skilllabelleft = "0.815"; skilllabelright = "0.945"; FullScreenelements.Add(XPUILabel($"Taming Abilities:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 12, skilliconleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; if (xprecord.Tamer >= config.tamer.chickenlevel && config.tamer.tamechicken) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencechicken, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("chicken", player.UserIDString)}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (xprecord.Tamer >= config.tamer.boarlevel && config.tamer.tameboar) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceboar, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("boar", player.UserIDString)}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (xprecord.Tamer >= config.tamer.staglevel && config.tamer.tamestag) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencestag, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("stag", player.UserIDString)}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (xprecord.Tamer >= config.tamer.wolflevel && config.tamer.tamewolf) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewolf, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("wolf", player.UserIDString)}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (xprecord.Tamer >= config.tamer.bearlevel && config.tamer.tamebear) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebear, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("bear", player.UserIDString)}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (xprecord.Tamer >= config.tamer.polarbearlevel && config.tamer.tamepolarbear) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencepolarbear, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("polarbear", player.UserIDString)}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } } #endregion CuiHelper.AddUi(player, FullScreenelements); } private void PlayerSettingsPage(BasePlayer player) { if (player == null) return; XPRecord xprecord = GetXPRecord(player); float height = 0.027f; int row = 1; var FullScreenelements = new CuiElementContainer(); FullScreenelements.Add(XPUIPanel("0.16 0.0", "1 1", "0 0 0 0.75"), XPeriencePlayerControlFullMain, XPeriencePlayerControlFullSettings); FullScreenelements.Add(XPUILabel($"My Settings:", row, 0.060f, TextAnchor.MiddleLeft, 20, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullSettings); row++; row++; row++; // Live UI Location Selection #region LiveUI if (config.defaultOptions.liveuistatslocationmoveable) { FullScreenelements.Add(XPUILabel($"{XPLang("liveuiselection", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullSettings); // UI Off FullScreenelements.Add(XPUIButton($"xp.playeredits settings liveui 0", row, height, 11, "0 0 0 0", "off", "0.11", "0.13", TextAnchor.MiddleCenter, $"{LiveUISelection("UI0", xprecord.UILocation)}"), XPeriencePlayerControlFullSettings); // UI 1 FullScreenelements.Add(XPUIButton($"xp.playeredits settings liveui 1", row, height, 11, "0 0 0 0", "1", "0.14", "0.145", TextAnchor.MiddleCenter, $"{LiveUISelection("UI1", xprecord.UILocation)}"), XPeriencePlayerControlFullSettings); // UI 2 FullScreenelements.Add(XPUIButton($"xp.playeredits settings liveui 2", row, height, 11, "0 0 0 0", "2", "0.15", "0.155", TextAnchor.MiddleCenter, $"{LiveUISelection("UI2", xprecord.UILocation)}"), XPeriencePlayerControlFullSettings); // UI 3 FullScreenelements.Add(XPUIButton($"xp.playeredits settings liveui 3", row, height, 11, "0 0 0 0", "3", "0.16", "0.165", TextAnchor.MiddleCenter, $"{LiveUISelection("UI3", xprecord.UILocation)}"), XPeriencePlayerControlFullSettings); // UI 4 FullScreenelements.Add(XPUIButton($"xp.playeredits settings liveui 4", row, height, 11, "0 0 0 0", "4", "0.17", "0.175", TextAnchor.MiddleCenter, $"{LiveUISelection("UI4", xprecord.UILocation)}"), XPeriencePlayerControlFullSettings); // UI 5 FullScreenelements.Add(XPUIButton($"xp.playeredits settings liveui 5", row, height, 11, "0 0 0 0", "5", "0.18", "0.185", TextAnchor.MiddleCenter, $"{LiveUISelection("UI5", xprecord.UILocation)}"), XPeriencePlayerControlFullSettings); row++; } #endregion // Dash Panel #region DashPanel if (config.defaultOptions.enabledashpanel) { // Enable DashPanel FullScreenelements.Add(XPUILabel($"Enable Dash Panel:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullSettings); // Yes FullScreenelements.Add(XPUIButton($"xp.playeredits settings enabledash 1", row, height, 10, "0 0 0 0", "On", "0.16", "0.18", TextAnchor.MiddleCenter, $"{DashSelection(1, xprecord.dash)}"), XPeriencePlayerControlFullSettings); // No FullScreenelements.Add(XPUIButton($"xp.playeredits settings enabledash 0", row, height, 10, "0 0 0 0", "Off", "0.19", "0.21", TextAnchor.MiddleCenter, $"{DashSelection(0, xprecord.dash)}"), XPeriencePlayerControlFullSettings); row++; if (xprecord.dash == 1) { // Speedometer Type FullScreenelements.Add(XPUILabel($"{XPLang("playerspeedometertype", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullSettings); // MPH FullScreenelements.Add(XPUIButton($"xp.playeredits settings speedometertype 1", row, height, 10, "0 0 0 0", "MPH", "0.16", "0.18", TextAnchor.MiddleCenter, $"{DashSelection(1, xprecord.speedometertype)}"), XPeriencePlayerControlFullSettings); // KMH FullScreenelements.Add(XPUIButton($"xp.playeredits settings speedometertype 2", row, height, 10, "0 0 0 0", "KMH", "0.19", "0.21", TextAnchor.MiddleCenter, $"{DashSelection(2, xprecord.speedometertype)}"), XPeriencePlayerControlFullSettings); row++; } } #endregion // Ranks if (config.xpLevelRanks.enableresetranks) { // Disable Ranks FullScreenelements.Add(XPUILabel($"{XPLang("playerdisableranks", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullSettings); // Yes FullScreenelements.Add(XPUIButton($"xp.playeredits settings disableranks true", row, height, 10, "0 0 0 0", "Yes", "0.16", "0.18", TextAnchor.MiddleCenter, $"{DisableRankSelection("Yes", xprecord.DisableRank)}"), XPeriencePlayerControlFullSettings); // No FullScreenelements.Add(XPUIButton($"xp.playeredits settings disableranks false", row, height, 10, "0 0 0 0", "No", "0.19", "0.21", TextAnchor.MiddleCenter, $"{DisableRankSelection("No", xprecord.DisableRank)}"), XPeriencePlayerControlFullSettings); row++; } // Prompt Box if (config.defaultOptions.enableconfirmationprompt) { // Disable Prompt FullScreenelements.Add(XPUILabel($"{XPLang("playerconfirmationprompt", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullSettings); // Yes FullScreenelements.Add(XPUIButton($"xp.playeredits settings prompt true", row, height, 10, "0 0 0 0", "Yes", "0.16", "0.18", TextAnchor.MiddleCenter, $"{DisableRankSelection("Yes", xprecord.enableconfirmationprompt)}"), XPeriencePlayerControlFullSettings); // No FullScreenelements.Add(XPUIButton($"xp.playeredits settings prompt false", row, height, 10, "0 0 0 0", "No", "0.19", "0.21", TextAnchor.MiddleCenter, $"{DisableRankSelection("No", xprecord.enableconfirmationprompt)}"), XPeriencePlayerControlFullSettings); row++; } // Chat Notify if (config.defaultOptions.showchatnotifications) { // Disable Chat Notify FullScreenelements.Add(XPUILabel($"Show Chat Notifications:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullSettings); // Yes FullScreenelements.Add(XPUIButton($"xp.playeredits settings chatnotify true", row, height, 10, "0 0 0 0", "Yes", "0.16", "0.18", TextAnchor.MiddleCenter, $"{DisableRankSelection("Yes", xprecord.showchatnotifications)}"), XPeriencePlayerControlFullSettings); // No FullScreenelements.Add(XPUIButton($"xp.playeredits settings chatnotify false", row, height, 10, "0 0 0 0", "No", "0.19", "0.21", TextAnchor.MiddleCenter, $"{DisableRankSelection("No", xprecord.showchatnotifications)}"), XPeriencePlayerControlFullSettings); row++; } // Chat profile if (config.defaultOptions.showchatprofileonconnect) { // Disable Chat Profile FullScreenelements.Add(XPUILabel($"Show Stats In Chat:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullSettings); // Yes FullScreenelements.Add(XPUIButton($"xp.playeredits settings chatprofile true", row, height, 10, "0 0 0 0", "Yes", "0.16", "0.18", TextAnchor.MiddleCenter, $"{DisableRankSelection("Yes", xprecord.showchatprofileonconnect)}"), XPeriencePlayerControlFullSettings); // No FullScreenelements.Add(XPUIButton($"xp.playeredits settings chatprofile false", row, height, 10, "0 0 0 0", "No", "0.19", "0.21", TextAnchor.MiddleCenter, $"{DisableRankSelection("No", xprecord.showchatprofileonconnect)}"), XPeriencePlayerControlFullSettings); row++; } // Addon Welcome Panel if(XPerienceAddon != null) { // Disable Chat Profile FullScreenelements.Add(XPUILabel($"Show Welcome Panel On Spawn:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullSettings); // Yes FullScreenelements.Add(XPUIButton($"xp.playeredits settings welcomepanel true", row, height, 10, "0 0 0 0", "Yes", "0.16", "0.18", TextAnchor.MiddleCenter, $"{DisableRankSelection("Yes", xprecord.showwelcomepanel)}"), XPeriencePlayerControlFullSettings); // No FullScreenelements.Add(XPUIButton($"xp.playeredits settings welcomepanel false", row, height, 10, "0 0 0 0", "No", "0.19", "0.21", TextAnchor.MiddleCenter, $"{DisableRankSelection("No", xprecord.showwelcomepanel)}"), XPeriencePlayerControlFullSettings); row++; } // Fix Data Button #region FixData DateTime resettimedata = xprecord.playerfixdata.AddMinutes(config.defaultOptions.playerfixdatatimer); TimeSpan datainterval = resettimedata - DateTime.Now; int datatimer = (int)datainterval.TotalMinutes; var button = $"{XPLang("playerfixdatabutton", player.UserIDString)}"; if (!config.defaultOptions.restristresets || config.defaultOptions.bypassadminreset && player.IsAdmin && permission.UserHasPermission(player.UserIDString, XPerience.Admin)) { datatimer = 0; } if (datatimer > 0) { button = $"{XPLang("resettimerdata", player.UserIDString, datatimer)}"; } if (!config.defaultOptions.disableplayerfixdata || (config.defaultOptions.disableplayerfixdata && config.defaultOptions.bypassadminreset && player.IsAdmin && permission.UserHasPermission(player.UserIDString, XPerience.Admin))) { FullScreenelements.Add(XPUIPanel("0.01 0.025", "0.1 0.045", "0 0 0 0"), XPeriencePlayerControlFullSettings, XPeriencePlayerControlFullFixData); FullScreenelements.Add(XPUIButton("xp.playercontrol fix", 1, 1f, 12, "0.5 0.0 0.0 0.7", $"〖 {button} 〗", "0", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullFixData); } #endregion CuiHelper.AddUi(player, FullScreenelements); } // Other Player Panels private void SelectedPlayerPanelFullMain(BasePlayer player, string selectedplayer) { if (player == null || selectedplayer == null) return; XPRecord xprecord = GetPlayerRecord(selectedplayer); Ranks rank = GetXPRank(xprecord.rank); var selectedplayerid = FindPlayer(xprecord.id.ToString()); var FullScreenelements = new CuiElementContainer(); var height = 0.050f; // Main UI | Title | Icon FullScreenelements.Add(new CuiPanel { Image = { Color = "0.1 0.1 0.1 0.99" }, RectTransform = { AnchorMin = $"0 0", AnchorMax = $"1 1" }, CursorEnabled = true }, "Overlay", XPeriencePlayerControlFullMain); FullScreenelements.Add(XPUILabel($"{xprecord.displayname}", 1, 0.060f, TextAnchor.MiddleLeft, 20, "0.01", "0.18", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullMain); string image = XPerienceicon; if (config.defaultOptions.useplayeravatar && selectedplayerid != null && selectedplayerid.userID.IsSteamId()) { image = selectedplayerid.UserIDString; if(image == null) { image = XPerienceicon; } } if (config.xpLevelRanks.enableresetranks && !rank.image.IsNullOrEmpty() && !xprecord.DisableRank) { FullScreenelements.Add(new CuiElement { Parent = XPeriencePlayerControlFullMain, Components = { new CuiRawImageComponent { Png = ImageLibrary?.Call("GetImage", rank.name) }, new CuiRectTransformComponent { AnchorMin = "0.01 0.75", AnchorMax = "0.15 0.95" } } }); } else { FullScreenelements.Add(new CuiElement { Parent = XPeriencePlayerControlFullMain, Components = { new CuiRawImageComponent { Png = ImageLibrary?.Call("GetImage", image) }, new CuiRectTransformComponent { AnchorMin = "0.01 0.75", AnchorMax = "0.15 0.95" } } }); } // Spacer int row = 4; // Navigation Menu FullScreenelements.Add(XPUIPanel("0.0 0.0", "0.15 0.85", "1.0 1.0 1.0 0.0"), XPeriencePlayerControlFullMain, XPeriencePlayerControlFullMenu); //Current Player Button FullScreenelements.Add(XPUIButton("xp.playercontrol main", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_014", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); // Selected Player Buttom row++; row++; FullScreenelements.Add(XPUIButton($"xp.playercontrol selectedplayer {selectedplayer}", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_015", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); // Kill Records Button if (KillRecords != null && config.xpBonus.showkrbutton) { row++; row++; FullScreenelements.Add(XPUIButton($"xp.playercontrol killrecords {selectedplayer}", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("playerkillrecords", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); } // Death Records Button if (XPerienceAddon != null) { row++; row++; FullScreenelements.Add(XPUIButton($"xp.playercontrol otherdeathrecords {selectedplayer}", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("playerdeathrecords", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); } // Raidable Bases Button if (XPerienceAddon != null && RaidableBases != null) { row++; row++; FullScreenelements.Add(XPUIButton($"xp.playercontrol otherraids {selectedplayer}", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("otherraids", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); } // Top Players Buttom row++; row++; FullScreenelements.Add(XPUIButton($"xp.playercontrol topplayers", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("topplayers", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); // Help Button row++; row++; FullScreenelements.Add(XPUIButton("xp.playercontrol help", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("help", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); // Close Button row++; row++; FullScreenelements.Add(XPUIButton("xp.playercontrol close", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_009", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); // Admin Button if (player.IsAdmin && permission.UserHasPermission(player.UserIDString, Admin)) { row++; row++; FullScreenelements.Add(XPUIButton("xp.playercontrol admin", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminpanel", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPeriencePlayerControlFullMenu); } // UI End CuiHelper.AddUi(player, FullScreenelements); return; } private void SelectedPlayerInfoPage(BasePlayer player, string selectedplayer) { if (player == null || selectedplayer == null) return; XPRecord xprecord = GetPlayerRecord(selectedplayer); DailyRecord dailyrecord = GetPlayerDailyRecord(selectedplayer); Ranks rank = GetXPRank(xprecord.rank); string textcolor = "perk"; if (xprecord.rank > 0 && !xprecord.DisableRank) { textcolor = "ranklevel"; } if (xprecord == null) return; float height = 0.027f; float skillheight = 0.028f; float infoheight = 0.020f; int row = 1; var FullScreenelements = new CuiElementContainer(); // No Display if player search disabled if(!config.defaultOptions.allowplayersearch) { // Main UI FullScreenelements.Add(XPUIPanel("0.16 0.0", "1 1", "0 0 0 0.75"), XPeriencePlayerControlFullMain, XPeriencePlayerControlFullInfo); // Player Name FullScreenelements.Add(XPUILabel($"{xprecord.displayname}", row, 0.060f, TextAnchor.MiddleLeft, 20, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; FullScreenelements.Add(XPUILabel($"{XPLang("playersearchdisabled", player.UserIDString)}", row, 0.060f, TextAnchor.MiddleLeft, 20, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); CuiHelper.AddUi(player, FullScreenelements); return; } // Continue with full profile // Main UI FullScreenelements.Add(XPUIPanel("0.16 0.0", "1 1", "0 0 0 0.75"), XPeriencePlayerControlFullMain, XPeriencePlayerControlFullInfo); // Player Name FullScreenelements.Add(XPUILabel($"Player Details:", row, 0.060f, TextAnchor.MiddleLeft, 20, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (config.playerinfoBoxsettings.showinfobox) { FullScreenelements.Add(XPUIButton($"xp.playercontrol openbox {xprecord.id}", row + 1, infoheight, 13, "1.0 0.0 0.0 0.7", $"〘Info Box〙", "0.13", "0.20", TextAnchor.MiddleCenter), XPeriencePlayerControlFullInfo); } row++; // Main - Player Info int statpoints = xprecord.MentalityP + xprecord.DexterityP + xprecord.MightP + xprecord.CaptaincyP + xprecord.WeaponryP; int skillpoints = xprecord.WoodCutterP + xprecord.SmithyP + xprecord.MinerP + xprecord.ForagerP + xprecord.HunterP + xprecord.FisherP + xprecord.CrafterP + xprecord.FramerP + xprecord.TamerP + xprecord.MedicP + xprecord.ScavengerP + xprecord.ElectricianP; // XP Calulations double levelpercent; if (xprecord.experience == 0 || xprecord.level == 0) { levelpercent = ((xprecord.experience - 0) / config.xpLevel.levelstart) * 100; } else { levelpercent = ((xprecord.experience - (xprecord.requiredxp - (xprecord.level * config.xpLevel.levelmultiplier))) / (xprecord.requiredxp - (xprecord.requiredxp - (xprecord.level * config.xpLevel.levelmultiplier)))) * 100; } // Level / XP Info FullScreenelements.Add(XPUILabel($"----------------------------------------------------------------", row, 0.035f, TextAnchor.MiddleLeft, 9, "0.0", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; if (config.defaultOptions.showonlinestatus) { if (xprecord.Status) { FullScreenelements.Add(XPUILabel($"{XPLang("status", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceonline, row, height, "0.11", "0.117")); FullScreenelements.Add(XPUILabel($" {XPLang("online", player.UserIDString)}", row, height, TextAnchor.MiddleLeft, 12, "0.12", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; } else { FullScreenelements.Add(XPUILabel($"{XPLang("status", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceoffline, row, height, "0.11", "0.117")); FullScreenelements.Add(XPUILabel($" {XPLang("offline", player.UserIDString)}", row, height, TextAnchor.MiddleLeft, 12, "0.12", "0.25", "1 1 1 1"), XPeriencePlayerControlFullInfo); row++; } } if (config.xpLevelRanks.enableresetranks && !xprecord.DisableRank) { FullScreenelements.Add(XPUILabel($"{XPLang("rank", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{rank.name}", row, height, TextAnchor.MiddleLeft, 13, "0.05", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; FullScreenelements.Add(XPUILabel($"{XPLang("ranksig", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{rank.sig}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; if (config.xpLevelRanks.showtruelevelprofile) { FullScreenelements.Add(XPUILabel($"{XPLang("ranklevel", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", xprecord.truelevel)}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; } if (config.xpLevelRanks.showtruexpprofile) { FullScreenelements.Add(XPUILabel($"{XPLang("rankxp", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", xprecord.trueexperience)}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; } } FullScreenelements.Add(XPUILabel($"{XPLang("level", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", xprecord.level)} ({(int)levelpercent}%)", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; FullScreenelements.Add(XPUILabel($"{XPLang("experience", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", (int)xprecord.experience)}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; FullScreenelements.Add(XPUILabel($"{XPLang("nextlevel", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", (int)xprecord.requiredxp)} ({(int)(xprecord.requiredxp - xprecord.experience)})", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; // Daily Limit if (config.dailyxpLimit.enabledailyxplimit) { double xplimit = 0; switch (config.dailyxpLimit.limitmultipliertype) { case 1: xplimit = config.dailyxpLimit.dailyxplimit + ((config.dailyxpLimit.dailyxplimit * config.dailyxpLimit.limitpercentage) * xprecord.level); if (permission.UserHasPermission(player.UserIDString, VIP)) { xplimit = config.dailyxpLimit.dailyxplimitvip + ((config.dailyxpLimit.dailyxplimit * config.dailyxpLimit.limitpercentage) * xprecord.level); } break; case 2: xplimit = config.dailyxpLimit.dailyxplimit + ((config.dailyxpLimit.dailyxplimit * config.dailyxpLimit.limitmultiplier) * xprecord.level); if (permission.UserHasPermission(player.UserIDString, VIP)) { xplimit = config.dailyxpLimit.dailyxplimitvip + ((config.dailyxpLimit.dailyxplimit * config.dailyxpLimit.limitmultiplier) * xprecord.level); } break; } FullScreenelements.Add(XPUILabel($"{XPLang("dailyxplimit", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 11, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{(int)xplimit} ({(int)dailyrecord.dailyexperience})", row, height, TextAnchor.MiddleLeft, 11, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; } // Unspent Points FullScreenelements.Add(XPUILabel($"{XPLang("unusedstatpoints", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", xprecord.statpoint)}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; FullScreenelements.Add(XPUILabel($"{XPLang("unusedskillpoints", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", xprecord.skillpoint)}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; FullScreenelements.Add(XPUILabel($"{XPLang("totalspent", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{String.Format("{0:N0}", statpoints + skillpoints)}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; // Stats FullScreenelements.Add(XPUILabel($"----------------------------------------------------------------", row, height, TextAnchor.MiddleLeft, 9, "0.0", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; if (config.mentality.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermMentality)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencementality, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("mentality", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Mentality}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Mentality < config.mentality.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Mentality + 1) * config.mentality.costmultiplier} / {xprecord.MentalityP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.MentalityP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } if (config.dexterity.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermDexterity)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("dexterity", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Dexterity}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Dexterity < config.dexterity.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Dexterity + 1) * config.dexterity.costmultiplier} / {xprecord.DexterityP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.DexterityP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } if (config.might.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermMight)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("might", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Might}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Might < config.might.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Might + 1) * config.might.costmultiplier} / {xprecord.MightP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.MightP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } if (config.captaincy.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermCaptaincy)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecaptaincy, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("captaincy", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Captaincy}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Captaincy < config.captaincy.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Captaincy + 1) * config.captaincy.costmultiplier} / {xprecord.CaptaincyP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.CaptaincyP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } if (config.weaponry.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermWeaponry)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponry", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Weaponry}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Weaponry < config.weaponry.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Weaponry + 1) * config.weaponry.costmultiplier} / {xprecord.WeaponryP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.WeaponryP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } // Skills FullScreenelements.Add(XPUILabel($"----------------------------------------------------------------", row, height, TextAnchor.MiddleLeft, 9, "0.0", "0.25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; if (config.woodcutter.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermWoodCutter)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewoodcutter, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("woodcutter", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.WoodCutter}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.WoodCutter < config.woodcutter.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.WoodCutter + 1) * config.woodcutter.costmultiplier} / {xprecord.WoodCutterP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.WoodCutterP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } if (config.smithy.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermSmithy)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencesmithy, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("smithy", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Smithy}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Smithy < config.smithy.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Smithy + 1) * config.smithy.costmultiplier} / {xprecord.SmithyP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.SmithyP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } if (config.miner.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermMiner)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("miner", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Miner}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Miner < config.miner.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Miner + 1) * config.miner.costmultiplier} / {xprecord.MinerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.MinerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } if (config.forager.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermForager)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceforager, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("forager", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Forager}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Forager < config.forager.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Forager + 1) * config.forager.costmultiplier} / {xprecord.ForagerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.ForagerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } if (config.hunter.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermHunter)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencehunter, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("hunter", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Hunter}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Hunter < config.hunter.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Hunter + 1) * config.hunter.costmultiplier} / {xprecord.HunterP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.HunterP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } if (config.crafter.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermCrafter)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecrafter, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("crafter", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Crafter}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Crafter < config.crafter.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Crafter + 1) * config.crafter.costmultiplier} / {xprecord.CrafterP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.CrafterP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } if (config.framer.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermFramer)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceframer, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("framer", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Framer}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Framer < config.framer.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Framer + 1) * config.framer.costmultiplier} / {xprecord.FramerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.FramerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } if (config.fisher.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermFisher)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencefisher, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("fisher", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Fisher}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Fisher < config.fisher.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Fisher + 1) * config.fisher.costmultiplier} / {xprecord.FisherP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.FisherP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } if (config.medic.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermMedic)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemedic, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("medic", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Medic}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Medic < config.medic.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Medic + 1) * config.medic.costmultiplier} / {xprecord.MedicP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.MedicP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } if (config.scavenger.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermScavenger)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencescavenger, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("scavenger", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Scavenger}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Scavenger < config.scavenger.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Scavenger + 1) * config.scavenger.costmultiplier} / {xprecord.ScavengerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.ScavengerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } if (config.electrician.maxlvl != 0 && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermElectrician)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("electrician", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Electrician}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Electrician < config.electrician.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Electrician + 1) * config.electrician.costmultiplier} / {xprecord.ElectricianP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.ElectricianP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } row++; } if (config.tamer.enabletame && ((config.defaultOptions.userpermissions && permission.UserHasPermission(xprecord.id.ToString(), PermTamer)) || !config.defaultOptions.userpermissions)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencetamer, row, height, "0.01", "0.021")); FullScreenelements.Add(XPUILabel($"{XPLang("tamer", player.UserIDString)}:", row, height, TextAnchor.MiddleLeft, 12, "0.026", "0.11", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{xprecord.Tamer}", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); if (xprecord.Tamer < config.tamer.maxlvl) { FullScreenelements.Add(XPUILabel($"( {(xprecord.Tamer + 1) * config.tamer.costmultiplier} / {xprecord.TamerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } else { FullScreenelements.Add(XPUILabel($"( {xprecord.TamerP} )", row, height, TextAnchor.MiddleCenter, 10, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } } // Column Two Stat Effects int rowtwo = 1; FullScreenelements.Add(XPUILabel($"Stat Effects:", rowtwo, 0.055f, TextAnchor.MiddleLeft, 18, "0.285", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; FullScreenelements.Add(XPUILabel($"----------------------------------------------------------------", rowtwo, 0.045f, TextAnchor.UpperLeft, 9, "0.285", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; if ((xprecord.Mentality > 0 || config.defaultOptions.showunusedeffects) && config.mentality.maxlvl != 0) { if (config.mentality.locktechtree && config.mentality.unlocktechtreelevel > 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencementality, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("techtreestatus", player.UserIDString)}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); string techtreestatus = "Locked"; string techstatuscolor = "red"; if (xprecord.Mentality >= config.mentality.unlocktechtreelevel) { techtreestatus = "Unlocked"; techstatuscolor = "green"; } FullScreenelements.Add(XPUILabel($"{techtreestatus}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.mentality.researchcost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencementality, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("researchcost", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{RankBoosts(player, "stat", (xprecord.Mentality * config.mentality.researchcost), config.Rankboostssettings.researchcost) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.mentality.researchspeed != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencementality, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("researchspeed", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{RankBoosts(player, "stat", (xprecord.Mentality * config.mentality.researchspeed), config.Rankboostssettings.researchspeed) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.mentality.criticalchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencementality, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("critchance", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Mentality * config.mentality.criticalchance) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.mentality.damageincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencementality, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("damagenpc", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Mentality * config.mentality.damageincrease) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } if ((xprecord.Dexterity > 0 || config.defaultOptions.showunusedeffects) && config.dexterity.maxlvl != 0) { if (config.dexterity.blockchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("blockchance", player.UserIDString)}: (Damage)", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Dexterity * config.dexterity.blockchance) * 100}% (-{RankBoosts(player, "stat", (xprecord.Dexterity * config.dexterity.blockamount), config.Rankboostssettings.block) * 100}%)", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.dexterity.dodgechance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("dodgechance", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Dexterity * config.dexterity.dodgechance) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.dexterity.reducearmordmg != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("armordmgabsorb", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{RankBoosts(player, "stat", (xprecord.Dexterity * config.dexterity.reducearmordmg), config.Rankboostssettings.armor) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.dexterity.horsespeed != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("horsespeed", player.UserIDString)}: (USE key)", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Dexterity * config.dexterity.horsespeed) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.dexterity.boatspeed != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("boatspeed", player.UserIDString)}: (RELOAD key)", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Dexterity * config.dexterity.boatspeed) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.dexterity.vehiclespeed != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("vehiclespeed", player.UserIDString)}: (RELOAD key)", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Dexterity * config.dexterity.vehiclespeed) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.dexterity.fuelreduce != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencedexterity, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("vehiclefuelreduce", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Dexterity * config.dexterity.fuelreduce) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } if ((xprecord.Might > 0 || config.defaultOptions.showunusedeffects) && config.might.maxlvl != 0) { if (config.might.armor != 0) { double teatime = 0; double teaboost = 0; bool teamodified = false; // Check for TeaModifier Plugin and Values if (TeaModifiers != null) { teatime = TeaModifiers.Call("GetTeaDuration", player, xprecord.teatype, Modifier.ModifierType.Max_Health); teaboost = TeaModifiers.Call("GetTeaValue", player, xprecord.teatype, Modifier.ModifierType.Max_Health) * 100; teamodified = true; } if (GetTeaCooldown(player) != 0) { switch (GetTeaTypes(player)) { case "none": teaboost = 0; break; case "maxhealthtea": if (teamodified) { teaboost = (teaboost * config.might.armor) * xprecord.Might; } if (!teamodified) { teaboost = (5 * config.might.armor) * xprecord.Might; } break; case "maxhealthtea.advanced": if (teamodified) { teaboost = (teaboost * config.might.armor) * xprecord.Might; } if (!teamodified) { teaboost = (12.5 * config.might.armor) * xprecord.Might; } break; case "maxhealthtea.pure": if (teamodified) { teaboost = (teaboost * config.might.armor) * xprecord.Might; } if (!teamodified) { teaboost = (20 * config.might.armor) * xprecord.Might; } break; } teatime = Math.Ceiling(GetTeaCooldown(player) / 60); } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("armor", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.34", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($" ({XPLang("tea", player.UserIDString)}: {XPLang($"teatype{xprecord.teatype}", player.UserIDString)} ({teatime} mins))", rowtwo, skillheight, TextAnchor.MiddleLeft, 8, "0.34", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Might * config.might.armor) * 100} (+{Math.Ceiling(teaboost)})", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.might.meleedmg != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("melee", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{RankBoosts(player, "stat", (xprecord.Might * config.might.meleedmg), config.Rankboostssettings.meleedmg) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.might.metabolism != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("calories", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(int)(RankBoosts(player, "stat", (config.might.metabolism * xprecord.Might) * player.metabolism.calories.max, config.Rankboostssettings.metabolism))}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.might.metabolism != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("hydration", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(int)(RankBoosts(player, "stat", (config.might.metabolism * xprecord.Might) * player.metabolism.hydration.max, config.Rankboostssettings.metabolism))}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.might.bleedreduction != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("bleed", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{(config.might.bleedreduction * xprecord.Might) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.might.radreduction != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("radiation", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{(config.might.radreduction * xprecord.Might) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("radiationpoison", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{(config.might.radreduction * xprecord.Might) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.might.heattolerance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("heat", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(config.might.heattolerance * xprecord.Might) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.might.coldtolerance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemight, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("cold", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(config.might.coldtolerance * xprecord.Might) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } if ((xprecord.Captaincy > 0 || config.defaultOptions.showunusedeffects) && config.captaincy.maxlvl != 0) { if (config.captaincy.skillboost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecaptaincy, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("captaincyskillboost", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Captaincy * config.captaincy.skillboost) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.captaincy.xpboost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecaptaincy, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("captaincyxpboost", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Captaincy * config.captaincy.xpboost) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.captaincy.captaincydistance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecaptaincy, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("captaincydistance", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{RankBoosts(player, "stat", xprecord.Captaincy * config.captaincy.captaincydistance, config.Rankboostssettings.distance)} FT", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } if ((xprecord.Weaponry > 0 || config.defaultOptions.showunusedeffects) && config.weaponry.maxlvl != 0) { if (config.weaponry.reductionchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponrychance", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Weaponry * config.weaponry.reductionchance) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; if (config.weaponry.tool != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponrytools", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{(xprecord.Weaponry * config.weaponry.tool) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.weaponry.powertools != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponrypowertools", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{(xprecord.Weaponry * config.weaponry.powertools) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.weaponry.meleeweapons != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponryweaponsmelee", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{(xprecord.Weaponry * config.weaponry.meleeweapons) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (config.weaponry.projectileweapons != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponryweaponsprojectile", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"-{(xprecord.Weaponry * config.weaponry.projectileweapons) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } if (config.weaponry.maxammo != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponryweaponsammo", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Weaponry * config.weaponry.maxammo) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (XPerienceAddon != null) { double getaddonweaponryammochance = Convert.ToDouble(XPerienceAddon.Call("GetExtraFeatures", player, "weaponry", "ammochance")); if (getaddonweaponryammochance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceweaponry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"{XPLang("weaponryaddonammochance", player.UserIDString)}:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"+{(xprecord.Weaponry * getaddonweaponryammochance) * 100}%", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } } // Other Abilities FullScreenelements.Add(XPUILabel($"Other Abilities:", rowtwo, skillheight, TextAnchor.MiddleLeft, 12, "0.285", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; // Backpacks if (config.backpacksmod.enablebackpacks && (permission.UserHasPermission(xprecord.id, Backpack1) || permission.UserHasPermission(xprecord.id, Backpack2) || permission.UserHasPermission(xprecord.id, Backpack3) || permission.UserHasPermission(xprecord.id, Backpack4) || permission.UserHasPermission(xprecord.id, Backpack5) || permission.UserHasPermission(xprecord.id, Backpack6) || permission.UserHasPermission(xprecord.id, Backpack7))) { int backpackrows = 0; int backpackslots = 0; if (permission.UserHasPermission(xprecord.id, Backpack1)) { backpackrows = 1; backpackslots = 6; } if (permission.UserHasPermission(xprecord.id, Backpack2)) { backpackrows = 2; backpackslots = 12; } if (permission.UserHasPermission(xprecord.id, Backpack3)) { backpackrows = 3; backpackslots = 18; } if (permission.UserHasPermission(xprecord.id, Backpack4)) { backpackrows = 4; backpackslots = 24; } if (permission.UserHasPermission(xprecord.id, Backpack5)) { backpackrows = 5; backpackslots = 30; } if (permission.UserHasPermission(xprecord.id, Backpack6)) { backpackrows = 6; backpackslots = 36; } if (permission.UserHasPermission(xprecord.id, Backpack7)) { backpackrows = 7; backpackslots = 42; } if (permission.UserHasPermission(xprecord.id, Backpack8)) { backpackrows = 8; backpackslots = 48; } FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebackpack, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"▫ Backpack Rows (slots):", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{backpackrows} ({backpackslots})", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } // Archery Line if (config.archerymod.enablearchery && (permission.UserHasPermission(xprecord.id, ArcheryNovice) || permission.UserHasPermission(xprecord.id, ArcheryAdept) || permission.UserHasPermission(xprecord.id, ArcheryMaster))) { if (permission.UserHasPermission(xprecord.id, ArcheryNovice)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"▫ Archery Level:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{XPLang("archerynovice", player.UserIDString)}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (permission.UserHasPermission(xprecord.id, ArcheryAdept)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"▫ Archery Level:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{XPLang("archeryadept", player.UserIDString)}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (permission.UserHasPermission(xprecord.id, ArcheryMaster)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencearchery, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"▫ Archery Level:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{XPLang("archerymaster", player.UserIDString)}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } // Wizardy Line if (config.wizardrymod.enablewizardry && (permission.UserHasPermission(xprecord.id, WizardryNovice) || permission.UserHasPermission(xprecord.id, WizardryAdept) || permission.UserHasPermission(xprecord.id, WizardryMaster))) { if (permission.UserHasPermission(xprecord.id, WizardryNovice)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"▫ Wizardry Level:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{XPLang("wizardrynovice", player.UserIDString)}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (permission.UserHasPermission(xprecord.id, WizardryAdept)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"▫ Wizardry Level:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{XPLang("wizardryadept", player.UserIDString)}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } if (permission.UserHasPermission(xprecord.id, WizardryMaster)) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewizardry, rowtwo, skillheight, "0.285", "0.295")); FullScreenelements.Add(XPUILabel($"▫ Wizardry Level:", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.3", "0.45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{XPLang("wizardrymaster", player.UserIDString)}", rowtwo, skillheight, TextAnchor.MiddleLeft, 10, "0.45", "0.6", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowtwo++; } } // Colum Three Skill Effects int rowthree = 1; FullScreenelements.Add(XPUILabel($"Skill Effects:", rowthree, 0.055f, TextAnchor.MiddleLeft, 18, "0.55", "0.65", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); // Skill List rowthree++; FullScreenelements.Add(XPUILabel($"---------------------------------------------------------------------------", rowthree, 0.045f, TextAnchor.UpperLeft, 9, "0.55", "1", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; string skilliconleft = "0.55"; string skilliconright = "0.56"; string skilllabelleft = "0.565"; string skilllabelright = "0.715"; string skillvalueleft = "0.715"; string skillvalueright = "0.80"; if ((xprecord.WoodCutter > 0 || config.defaultOptions.showunusedeffects) && config.woodcutter.maxlvl != 0) { if (config.woodcutter.gatherrate != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewoodcutter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("woodgather", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.woodcutter.gatherrate, "pos")}{RankBoosts(player, "skill", (xprecord.WoodCutter * config.woodcutter.gatherrate), config.Rankboostssettings.woodcuttergr)}x", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.woodcutter.bonusincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewoodcutter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Wood Bonus:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.woodcutter.bonusincrease, "pos")}{RankBoosts(player, "skill", (xprecord.WoodCutter * config.woodcutter.bonusincrease), config.Rankboostssettings.woodcutterbonus)}x", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.woodcutter.applechance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewoodcutter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("woodapple", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.woodcutter.applechance, "pos")}{(xprecord.WoodCutter * config.woodcutter.applechance) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } } if ((xprecord.Smithy > 0 || config.defaultOptions.showunusedeffects) && config.smithy.maxlvl != 0) { if (config.smithy.productionrate != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencesmithy, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("productionrate", player.UserIDString)}: ({XPLang("productionamount", player.UserIDString)})", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.smithy.productionrate, "pos")}{RankBoosts(player, "skill", (xprecord.Smithy * config.smithy.productionrate), config.Rankboostssettings.smithypr) * 100}% (+{ Math.Ceiling(RankBoosts(player, "skill", (xprecord.Smithy * config.smithy.productionrate) * 5, config.Rankboostssettings.smithypr))})", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.smithy.productionspeed != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencesmithy, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("productionspeed", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.smithy.productionspeed, "pos")}{RankBoosts(player, "skill", (xprecord.Smithy * config.smithy.productionspeed), config.Rankboostssettings.smithyps) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.smithy.fuelconsumption != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencesmithy, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("fuelconsumption", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.smithy.fuelconsumption, "neg")}{RankBoosts(player, "skill", (xprecord.Smithy * config.smithy.fuelconsumption), config.Rankboostssettings.smithyfc) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.smithy.metalchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencesmithy, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("hmetalchance", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.smithy.metalchance, "pos")}{RankBoosts(player, "skill", (xprecord.Smithy * config.smithy.metalchance), config.Rankboostssettings.smithyhqmc) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.smithy.metalamount != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencesmithy, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("hmetalamount", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.smithy.metalamount, "pos")}{RankBoosts(player, "skill", xprecord.Smithy * config.smithy.metalamount, config.Rankboostssettings.smithyhqma)}", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } } if ((xprecord.Miner > 0 || config.defaultOptions.showunusedeffects) && config.miner.maxlvl != 0) { if (config.miner.gatherrate != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("oregather", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.miner.gatherrate, "pos")}{RankBoosts(player, "skill", (xprecord.Miner * config.miner.gatherrate), config.Rankboostssettings.minergr)}x", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.miner.bonusincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Ore Bonus:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.miner.bonusincrease, "pos")}{RankBoosts(player, "skill", (xprecord.Miner * config.miner.bonusincrease), config.Rankboostssettings.minerbonus)}x", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.miner.fuelconsumption != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("fuelconsumptionhats", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.miner.fuelconsumption, "neg")}{RankBoosts(player, "skill", (xprecord.Miner * config.miner.fuelconsumption), config.Rankboostssettings.minerfuel) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.miner.metalchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("metalchance", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.miner.metalchance, "pos")}{RankBoosts(player, "skill", (xprecord.Miner * config.miner.metalchance), config.Rankboostssettings.minermfc) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.miner.metalamount != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("metalamount", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.miner.metalamount, "pos")}{RankBoosts(player, "skill", xprecord.Miner * config.miner.metalamount, config.Rankboostssettings.minermfa)}", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (XPerienceAddon != null) { double quarryboost = Convert.ToDouble(XPerienceAddon.Call("GetExtraFeatures", player, "miner", "amount")); if (quarryboost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("quarryboost", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", quarryboost, "pos")}{quarryboost * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; int quarryduration = Convert.ToInt32(XPerienceAddon.Call("GetExtraFeatures", player, "miner", "duration")); FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("quarryduration", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{(xprecord.Miner * quarryduration) / 60} mins", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; int quarrycooldown = Convert.ToInt32(XPerienceAddon.Call("GetExtraFeatures", player, "miner", "cooldown")); FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceminer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("quarrycooldown", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{((xprecord.Miner * 60) - quarrycooldown) / 60} mins", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } } } if ((xprecord.Forager > 0 || config.defaultOptions.showunusedeffects) && config.forager.maxlvl != 0) { if (config.forager.gatherrate != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceforager, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Ground {XPLang("gather", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.forager.gatherrate, "pos")}{RankBoosts(player, "skill", (xprecord.Forager * config.forager.gatherrate), config.Rankboostssettings.foragergr)}x", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.forager.chanceincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceforager, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("seedbonus", player.UserIDString)}: (Amount)", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.forager.chanceincrease, "pos")}{(config.forager.chanceincrease * xprecord.Forager) * 100}% ({(config.forager.chanceincrease * xprecord.Forager) * 10})", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.forager.randomchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceforager, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("randomitem", player.UserIDString)} Chance:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.forager.randomchance, "pos")}{RankBoosts(player, "skill", (xprecord.Forager * config.forager.randomchance), config.Rankboostssettings.foragerric) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.forager.grubwormincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceforager, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("grubworm", player.UserIDString)} Chance:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.forager.grubwormincrease, "pos")}{(xprecord.Forager * config.forager.grubwormincrease) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (XPerienceAddon != null) { double recyclerchance = Convert.ToDouble(XPerienceAddon.Call("GetExtraFeatures", player, "forager", "foragerrecyclerchance")); if (recyclerchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceforager, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("addonrecyclerchance", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", recyclerchance, "pos")}{(recyclerchance * xprecord.Forager) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } double recyclerspeed = Convert.ToDouble(XPerienceAddon.Call("GetExtraFeatures", player, "forager", "foragerrecyclerspeed")); if (recyclerspeed != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceforager, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("addonrecyclerspeed", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", recyclerspeed, "pos")}{(recyclerspeed * xprecord.Forager) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } } } if ((xprecord.Hunter > 0 || config.defaultOptions.showunusedeffects) && config.hunter.maxlvl != 0) { if (config.hunter.gatherrate != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencehunter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("foodgather", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.hunter.gatherrate, "pos")}{RankBoosts(player, "skill", (xprecord.Hunter * config.hunter.gatherrate), config.Rankboostssettings.huntergr)}x", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.hunter.bonusincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencehunter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Food Bonus:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.hunter.bonusincrease, "pos")}{RankBoosts(player, "skill", (xprecord.Hunter * config.hunter.bonusincrease), config.Rankboostssettings.hunterbonus)}x", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.hunter.damageincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencehunter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("damagewildlife", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.hunter.damageincrease, "pos")}{RankBoosts(player, "skill", (xprecord.Hunter * config.hunter.damageincrease), config.Rankboostssettings.hunterdmg) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.hunter.nightdmgincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencehunter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("nightdamage", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.hunter.nightdmgincrease, "pos")}{RankBoosts(player, "skill", (xprecord.Hunter * config.hunter.nightdmgincrease), config.Rankboostssettings.hunterndmg) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } } if ((xprecord.Crafter > 0 || config.defaultOptions.showunusedeffects) && config.crafter.maxlvl != 0) { if (config.crafter.craftspeed != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecrafter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("craftspeed", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.crafter.craftspeed, "neg")}{RankBoosts(player, "skill", (config.crafter.craftspeed * xprecord.Crafter), config.Rankboostssettings.crafterspeed) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.crafter.craftcost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecrafter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Craft {XPLang("costreduction", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.crafter.craftcost, "neg")}{RankBoosts(player, "skill", (xprecord.Crafter * config.crafter.craftcost), config.Rankboostssettings.craftercost) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.crafter.repairincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecrafter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("fullrepair", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{RankBoosts(player, "skill", (xprecord.Crafter * config.crafter.repairincrease), config.Rankboostssettings.crafterri) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.crafter.repaircost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecrafter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("repaircost", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.crafter.repaircost, "neg")}{RankBoosts(player, "skill", (xprecord.Crafter * config.crafter.repaircost), config.Rankboostssettings.crafterrc) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.crafter.conditionchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencecrafter, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("highcond", player.UserIDString)}: (Amount)", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.crafter.conditionchance, "pos")}{RankBoosts(player, "skill", (config.crafter.conditionchance * xprecord.Crafter), config.Rankboostssettings.craftercc) * 100}% (+{config.crafter.conditionamount * 100}%)", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } } if ((xprecord.Framer > 0 || config.defaultOptions.showunusedeffects) && config.framer.maxlvl != 0) { if (config.framer.upgradecost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceframer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Building {XPLang("upgradecost", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.framer.upgradecost, "neg")}{RankBoosts(player, "skill", (config.framer.upgradecost * xprecord.Framer), config.Rankboostssettings.framerucost) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.framer.repairtime != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceframer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Building {XPLang("repairtime", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.framer.repairtime, "neg")}{(xprecord.Framer * config.framer.repairtime) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } if (config.framer.repaircost != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceframer, rowthree, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"Building {XPLang("repaircost", player.UserIDString)}:", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.framer.repaircost, "neg")}{RankBoosts(player, "skill", (xprecord.Framer * config.framer.repaircost), config.Rankboostssettings.framerrcost) * 100}%", rowthree, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthree++; } } // Split Skills int rowthreenew = 3; skilliconleft = "0.80"; skilliconright = "0.81"; skilllabelleft = "0.815"; skilllabelright = "0.945"; skillvalueleft = "0.945"; skillvalueright = "1"; if ((xprecord.Fisher > 0 || config.defaultOptions.showunusedeffects) && config.fisher.maxlvl != 0) { if (config.fisher.fishamountincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencefisher, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("fishamount", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.fisher.fishamountincrease, "pos")}{Math.Round(RankBoosts(player, "skill", xprecord.Fisher * config.fisher.fishamountincrease, config.Rankboostssettings.fisherfa))}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.fisher.itemamountincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencefisher, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("fishitems", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.fisher.itemamountincrease, "pos")}{Math.Round(RankBoosts(player, "skill", xprecord.Fisher * config.fisher.itemamountincrease, config.Rankboostssettings.fisheria))}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.fisher.oxygenreduction != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencefisher, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("fishoxygen", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.fisher.oxygenreduction, "neg")}{Math.Round((xprecord.Fisher * config.fisher.oxygenreduction) * 100)}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.fisher.oxygentankreduction != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencefisher, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("fishoxygentank", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.fisher.oxygentankreduction, "neg")}{Math.Round(RankBoosts(player, "skill", (xprecord.Fisher * config.fisher.oxygentankreduction), config.Rankboostssettings.fisherotr) * 100)}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } } if ((xprecord.Medic > 0 || config.defaultOptions.showunusedeffects) && config.medic.maxlvl != 0) { if (config.medic.recoverhp != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemedic, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("medicrecover", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.medic.recoverhp, "pos")}{Math.Round(RankBoosts(player, "skill", xprecord.Medic * config.medic.recoverhp, config.Rankboostssettings.medicrecovera))}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.medic.revivehp != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemedic, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("medicrevive", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.medic.revivehp, "pos")}{Math.Round(RankBoosts(player, "skill", xprecord.Medic * config.medic.revivehp, config.Rankboostssettings.medicrevivala))}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.medic.tools != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemedic, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("medictools", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.medic.tools, "pos")}{Math.Round(RankBoosts(player, "skill", xprecord.Medic * config.medic.tools, config.Rankboostssettings.medictools))}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.medic.crafttime != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemedic, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("mediccrafting", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.medic.crafttime, "pos")}{Math.Round((xprecord.Medic * config.medic.crafttime) * 100)}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.medic.teas != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencemedic, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("medicteas", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.medic.teas, "pos")}{Math.Round((xprecord.Medic * config.medic.teas) * 100)}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } } if ((xprecord.Scavenger > 0 || config.defaultOptions.showunusedeffects) && config.scavenger.maxlvl != 0) { if (config.scavenger.scavlootchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencescavenger, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("scavchance", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.scavenger.scavlootchance, "pos")}{Math.Round(RankBoosts(player, "skill", (xprecord.Scavenger * config.scavenger.scavlootchance), config.Rankboostssettings.scavelc) * 100)}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.scavenger.scavmultiplier != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencescavenger, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("scavmultiplier", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"x{Math.Ceiling(RankBoosts(player, "skill", xprecord.Scavenger * config.scavenger.scavmultiplier, config.Rankboostssettings.scavelm))}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.scavenger.scavchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencescavenger, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("customscavchance", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.scavenger.scavchance, "pos")}{Math.Round(RankBoosts(player, "skill", (xprecord.Scavenger * config.scavenger.scavchance), config.Rankboostssettings.scavcic) * 100)}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.scavenger.customscavmultiplier != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencescavenger, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("customscavmultiplier", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"x{Math.Ceiling(RankBoosts(player, "skill", xprecord.Scavenger * config.scavenger.customscavmultiplier, config.Rankboostssettings.scavelm))}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (XPerienceAddon != null) { double getaddonscavengerchance = Convert.ToDouble(XPerienceAddon.Call("GetExtraFeatures", player, "scavenger", "scavengervendingchance")); if (getaddonscavengerchance != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencescavenger, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("addonscavengervendorchance", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{(getaddonscavengerchance * xprecord.Scavenger) * 100}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; double getaddonscavengeramount = Convert.ToDouble(XPerienceAddon.Call("GetExtraFeatures", player, "scavenger", "scavengervendingamount")); FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencescavenger, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("addonscavengervendoramount", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{(getaddonscavengeramount * xprecord.Scavenger) * 100}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } } } if ((xprecord.Electrician > 0 || config.defaultOptions.showunusedeffects) && config.electrician.maxlvl != 0) { if (config.electrician.minsolarinput != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("minsolarpanelinput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.minsolarinput, "pos")}{xprecord.Electrician * config.electrician.minsolarinput}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.electrician.solarpanelinputincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("solarpanelinput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.solarpanelinputincrease, "pos")}{(xprecord.Electrician * config.electrician.solarpanelinputincrease) * 100}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.electrician.solarpanelmaxincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("solarpaneloutput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.solarpanelmaxincrease, "pos")}{(xprecord.Electrician * config.electrician.solarpanelmaxincrease) * 100}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.electrician.smallbatterymaxincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("smallbatteryoutput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.smallbatterymaxincrease, "pos")}{(xprecord.Electrician * config.electrician.smallbatterymaxincrease) * 100}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.electrician.mediumbatterymaxincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("mediumbatteryoutput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.mediumbatterymaxincrease, "pos")}{(xprecord.Electrician * config.electrician.mediumbatterymaxincrease) * 100}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.electrician.largebatterymaxincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("largebatteryoutput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.largebatterymaxincrease, "pos")}{(xprecord.Electrician * config.electrician.largebatterymaxincrease) * 100}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.electrician.smallgeneratormaxincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("smallgeneratoroutput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.smallgeneratormaxincrease, "pos")}{(xprecord.Electrician * config.electrician.smallgeneratormaxincrease) * 100}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; if (config.electrician.electricwindmillincrease != 0) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("windmilloutput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.electricwindmillincrease, "pos")}{(xprecord.Electrician * config.electrician.electricwindmillincrease) * 100}%", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (config.electrician.electricwindmillmaxincrease != 0) { int windmill = (int)((xprecord.Electrician * config.electrician.electricwindmillmaxincrease) * config.electrician.electricwindmilldefault) + config.electrician.electricwindmilldefault; FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceelectrician, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("windmillmaxoutput", player.UserIDString)}:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); FullScreenelements.Add(XPUILabel($"{ValueSymbol("perk", config.electrician.electricwindmillmaxincrease, "pos")}{(xprecord.Electrician * config.electrician.electricwindmillmaxincrease) * 100}% ({windmill})", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skillvalueleft, skillvalueright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } } } // Taming Ability if (xprecord.Tamer > 0) { rowthreenew = 29; skilliconleft = "0.80"; skilliconright = "0.81"; skilllabelleft = "0.815"; skilllabelright = "0.945"; FullScreenelements.Add(XPUILabel($"Taming Abilities:", rowthreenew, skillheight, TextAnchor.MiddleLeft, 12, skilliconleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; if (xprecord.Tamer >= config.tamer.chickenlevel && config.tamer.tamechicken) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencechicken, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("chicken", player.UserIDString)}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (xprecord.Tamer >= config.tamer.boarlevel && config.tamer.tameboar) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPerienceboar, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("boar", player.UserIDString)}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (xprecord.Tamer >= config.tamer.staglevel && config.tamer.tamestag) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencestag, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("stag", player.UserIDString)}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (xprecord.Tamer >= config.tamer.wolflevel && config.tamer.tamewolf) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencewolf, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("wolf", player.UserIDString)}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (xprecord.Tamer >= config.tamer.bearlevel && config.tamer.tamebear) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencebear, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("bear", player.UserIDString)}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); rowthreenew++; } if (xprecord.Tamer >= config.tamer.polarbearlevel && config.tamer.tamepolarbear) { FullScreenelements.Add(XPUIImage(XPeriencePlayerControlFullInfo, XPeriencepolarbear, rowthreenew, skillheight, skilliconleft, skilliconright)); FullScreenelements.Add(XPUILabel($"{XPLang("polarbear", player.UserIDString)}", rowthreenew, skillheight, TextAnchor.MiddleLeft, 10, skilllabelleft, skilllabelright, "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); } } CuiHelper.AddUi(player, FullScreenelements); } // Kill Records private object GetKillRecords(string player, string entity) { if (KillRecords == null) return 0; object value = KillRecords.Call("GetKillRecord", player, entity); if (value == null) return 0; return (int)value; } private void PlayerKillRecordsPage(BasePlayer player, string selectedplayer) { if (player == null || selectedplayer == null) return; XPRecord xprecord = GetPlayerRecord(selectedplayer); var getplayer = selectedplayer; if (KillRecords == null || getplayer == null) return; float height = 0.036f; int row = 1; var FullScreenelements = new CuiElementContainer(); // No Display if player search disabled if (!config.defaultOptions.allowplayersearch) { // Main UI FullScreenelements.Add(XPUIPanel("0.16 0.0", "1 1", "0 0 0 0.75"), XPeriencePlayerControlFullMain, XPeriencePlayerControlFullInfo); // Player Name FullScreenelements.Add(XPUILabel($"{xprecord.displayname}", row, 0.060f, TextAnchor.MiddleLeft, 20, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); row++; FullScreenelements.Add(XPUILabel($"{XPLang("playersearchdisabled", player.UserIDString)}", row, 0.060f, TextAnchor.MiddleLeft, 20, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullInfo); CuiHelper.AddUi(player, FullScreenelements); return; } // Continue with full profile // Main UI FullScreenelements.Add(XPUIPanel("0.16 0.0", "1 1", "0 0 0 0.75"), XPeriencePlayerControlFullMain, XPeriencePlayerControlFullKR); // Player Name FullScreenelements.Add(XPUILabel($"{xprecord.displayname} | ☠ {XPLang("killrecords", player.UserIDString)}", row, 0.060f, TextAnchor.MiddleLeft, 20, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; row++; // Kill Records FullScreenelements.Add(XPUILabel($"Kills:", row, height, TextAnchor.MiddleLeft, 15, "0.01", "25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Chickens:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "chicken")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Boars:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "boar")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Stags:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "stag")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Wolves:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "wolf")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Bears:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "bear")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Polar Bears:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "polarbear")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Sharks:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "shark")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Horses:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "horse")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Fish:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "fish")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Scientist:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "scientistnpcnew")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Scare Crow:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "scarecrow")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Dwellers:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "tunneldweller")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Players:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "baseplayer")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Bradley APCs:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "bradleyapc")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Patrol Helicopters:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "patrolhelicopter")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Turret:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "turret")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; row++; FullScreenelements.Add(XPUILabel($"Deaths:", row, height, TextAnchor.MiddleLeft, 15, "0.01", "25", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Deaths:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "death")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); row++; FullScreenelements.Add(XPUILabel($"Suicides:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "15", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "suicide")}", row, height, TextAnchor.MiddleLeft, 13, "0.15", "20", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); // Column Two int rowtwo = 3; FullScreenelements.Add(XPUILabel($"Harvests:", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.26", "50", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Animal Harvested:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "basecorpse")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Corpse Harvested:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "npcplayercorpse")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Trees:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "trees")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Ore Mined:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "oremined")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Wood Picked Up:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "wood")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Ore Picked Up:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "orepickup")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Berries:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "berries")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Seeds:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "seed")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Hemp:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "hemp")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Potatos:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "potato")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Pumpkin:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "pumpkin")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Mushroom:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "mushroom")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Corn:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "corn")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; rowtwo++; FullScreenelements.Add(XPUILabel($"Loots:", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.26", "50", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Loot Containers:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "lootcontainer")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Underwater Containers:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "underwaterlootcontainer")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Brad/Heli Crates:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "lockedbyentcrate")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); rowtwo++; FullScreenelements.Add(XPUILabel($"Hackable Crates:", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.26", "40", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); FullScreenelements.Add(XPUILabel($"| {GetKillRecords(getplayer, "hackablelockedcrate")}", rowtwo, height, TextAnchor.MiddleLeft, 13, "0.40", "45", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullKR); CuiHelper.AddUi(player, FullScreenelements); } // Help Panel private void PlayerHelpPage(BasePlayer player, int page) { if (player == null) return; float height = 0.5f; var FullScreenelements = new CuiElementContainer(); // Main UI FullScreenelements.Add(XPUIPanel("0.16 0", "1 1", "0 0 0 0.75"), XPeriencePlayerControlFullMain, XPeriencePlayerControlFullHelp); // Navigation Buttons string selected0 = "1 1 1 1"; string selected1 = "1 1 1 1"; string selected2 = "1 1 1 1"; string selected3 = "1 1 1 1"; string selected4 = "1 1 1 1"; string selected5 = "1 1 1 1"; switch (page) { case 0: selected0 = "0 1 0 1"; break; case 1: selected1 = "0 1 0 1"; break; case 2: selected2 = "0 1 0 1"; break; case 3: selected3 = "0 1 0 1"; break; case 4: selected4 = "0 1 0 1"; break; case 5: selected5 = "0 1 0 1"; break; } FullScreenelements.Add(XPUIPanel("0.20 0.95", "0.80 1", "0 0 0 0.75"), XPeriencePlayerControlFullHelp, XPeriencePlayerControlFullHelpNav); FullScreenelements.Add(XPUILabel($"〚 Help Page Navigation 〛", 1, height, TextAnchor.MiddleCenter, 15, "0", "1", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlFullHelpNav); FullScreenelements.Add(XPUIButton($"xp.playeredits help 0", 2, height, 13, "0 0 0 0", "〘 About 〙", "0.01", "0.16", TextAnchor.MiddleCenter, $"{selected0}"), XPeriencePlayerControlFullHelpNav); FullScreenelements.Add(XPUIButton($"xp.playeredits help 1", 2, height, 13, "0 0 0 0", "〘 Commands 〙", "0.17", "0.32", TextAnchor.MiddleCenter, $"{selected1}"), XPeriencePlayerControlFullHelpNav); FullScreenelements.Add(XPUIButton($"xp.playeredits help 2", 2, height, 13, "0 0 0 0", "〘 Stats 〙", "0.33", "0.48", TextAnchor.MiddleCenter, $"{selected2}"), XPeriencePlayerControlFullHelpNav); FullScreenelements.Add(XPUIButton($"xp.playeredits help 3", 2, height, 13, "0 0 0 0", "〘 Skills 〙", "0.49", "0.64", TextAnchor.MiddleCenter, $"{selected3}"), XPeriencePlayerControlFullHelpNav); FullScreenelements.Add(XPUIButton($"xp.playeredits help 4", 2, height, 13, "0 0 0 0", "〘 Server 〙", "0.65", "0.78", TextAnchor.MiddleCenter, $"{selected4}"), XPeriencePlayerControlFullHelpNav); FullScreenelements.Add(XPUIButton($"xp.playeredits help 5", 2, height, 13, "0 0 0 0", "〘 Steam Privacy 〙", "0.79", "0.99", TextAnchor.MiddleCenter, $"{selected5}"), XPeriencePlayerControlFullHelpNav); // Pages if(page == 0) { FullScreenelements.Add(new CuiElement { Parent = XPeriencePlayerControlFullHelp, Components = { new CuiRawImageComponent { Png = ImageLibrary?.Call("GetImage", XPeriencelogo) }, new CuiRectTransformComponent { AnchorMin = "0.43 0.60", AnchorMax = "0.57 0.80" } } }); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("moddetails", player.UserIDString)} MACHIN3{XPLang("aboutxperience", player.UserIDString)}", FontSize = 18, Align = TextAnchor.UpperCenter, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.0", AnchorMax = "0.98 0.60" } }, XPeriencePlayerControlFullHelp); } if(page == 1) { FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("helpcommandslist", player.UserIDString, config.playerchatCommands.openhelp, config.playerchatCommands.openplayerstats, config.playerchatCommands.showplayerstatschat, config.playerchatCommands.opentopplayers, config.playerchatCommands.playeraddstat, config.playerchatCommands.playeraddskill, config.playerchatCommands.playerresetstats, config.playerchatCommands.playerresetskills, config.playerchatCommands.playerliveuichange)} \n{XPLang("bindkey", player.UserIDString, config.playerchatCommands.openplayerstats)}", FontSize = 11, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.0", AnchorMax = "0.98 0.83" } }, XPeriencePlayerControlFullHelp); } if(page == 2) { // About Stats FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutstats", player.UserIDString)}\n-----------------------------------------------------------------------------------------------------------------------\n\n", FontSize = 15, Align = TextAnchor.UpperCenter, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.85", AnchorMax = "0.99 0.93" } }, XPeriencePlayerControlFullHelp); // Mentality FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("mentality", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.82", AnchorMax = "0.98 0.85" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutmentality", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.70", AnchorMax = "0.98 0.82" } }, XPeriencePlayerControlFullHelp); // Dexterity FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("dexterity", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.67", AnchorMax = "0.98 0.70" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutdexterity", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.55", AnchorMax = "0.98 0.67" } }, XPeriencePlayerControlFullHelp); // Might FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("might", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.52", AnchorMax = "0.98 0.55" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutmight", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.40", AnchorMax = "0.98 0.52" } }, XPeriencePlayerControlFullHelp); // Captaincy FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("captaincy", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.37", AnchorMax = "0.98 0.40" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutcaptaincy", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.29", AnchorMax = "0.98 0.37" } }, XPeriencePlayerControlFullHelp); // Weaponry FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("weaponry", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.24", AnchorMax = "0.98 0.27" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutweaponry", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.01", AnchorMax = "0.98 0.24" } }, XPeriencePlayerControlFullHelp); } if(page == 3) { // About Skills FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutskills", player.UserIDString)}\n-----------------------------------------------------------------------------------------------------------------------\n\n", FontSize = 15, Align = TextAnchor.UpperCenter, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.85", AnchorMax = "0.98 0.93" } }, XPeriencePlayerControlFullHelp); // WoodCutter FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("woodcutter", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.82", AnchorMax = "0.98 0.85" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutwoodcutter", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.78", AnchorMax = "0.98 0.82" } }, XPeriencePlayerControlFullHelp); // Smithy FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("smithy", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.75", AnchorMax = "0.98 0.78" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutsmithy", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.71", AnchorMax = "0.98 0.75" } }, XPeriencePlayerControlFullHelp); // Miner FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("miner", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.68", AnchorMax = "0.98 0.71" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutminer", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.64", AnchorMax = "0.98 0.68" } }, XPeriencePlayerControlFullHelp); // Forager FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("forager", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.61", AnchorMax = "0.98 0.64" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutforager", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.55", AnchorMax = "0.98 0.61" } }, XPeriencePlayerControlFullHelp); // Hunter FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("hunter", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.52", AnchorMax = "0.98 0.55" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("abouthunter", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.48", AnchorMax = "0.98 0.52" } }, XPeriencePlayerControlFullHelp); // Fisher FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("fisher", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.45", AnchorMax = "0.98 0.48" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutfisher", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.41", AnchorMax = "0.98 0.45" } }, XPeriencePlayerControlFullHelp); // Crafter FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("crafter", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.38", AnchorMax = "0.98 0.41" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutcrafter", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.34", AnchorMax = "0.98 0.38" } }, XPeriencePlayerControlFullHelp); // Framer FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("framer", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.31", AnchorMax = "0.98 0.34" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutframer", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.28", AnchorMax = "0.98 0.31" } }, XPeriencePlayerControlFullHelp); // Medic FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("medic", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.25", AnchorMax = "0.75 0.28" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutmedic", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.22", AnchorMax = "0.98 0.25" } }, XPeriencePlayerControlFullHelp); // Scavenger FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("scavenger", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.19", AnchorMax = "0.75 0.22" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("aboutscavenger", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.15", AnchorMax = "0.98 0.19" } }, XPeriencePlayerControlFullHelp); // Tamer FullScreenelements.Add(new CuiLabel { Text = { Text = $"[{XPLang("tamer", player.UserIDString)}]", FontSize = 15, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.12", AnchorMax = "0.98 0.15" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("abouttamer", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.08", AnchorMax = "0.75 0.12" } }, XPeriencePlayerControlFullHelp); } if(page == 4) { FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("serversettings", player.UserIDString, ServerSettings("levelstart"), ServerSettings("levelmultiplier"), ServerSettings("levelxpboost"), ServerSettings("statpointsperlvl"), ServerSettings("skillpointsperlvl"), ServerSettings("resettimerenabled"), ServerSettings("resettimerstats"), ServerSettings("resettimerskills"), ServerSettings("vipresettimerstats"), ServerSettings("vipresettimerskills"), ServerSettings("nightbonusenable"), ServerSettings("nightbonus"), ServerSettings("nightstart"), ServerSettings("nightend"), ServerSettings("nightskill"))}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.50", AnchorMax = "0.99 0.80" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("xpsettings", player.UserIDString)}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.46", AnchorMax = "0.99 0.50" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("xpsettingskills", player.UserIDString, ServerSettings("chicken"), ServerSettings("fish"), ServerSettings("boar"), ServerSettings("stag"), ServerSettings("wolf"), ServerSettings("bear"), ServerSettings("shark"), ServerSettings("horse"), ServerSettings("scientist"), ServerSettings("dweller"), ServerSettings("player"), ServerSettings("bradley"), ServerSettings("heli"), ServerSettings("revive"))}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.0", AnchorMax = "0.15 0.46" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("xpsettingsloot", player.UserIDString, ServerSettings("loot"), ServerSettings("uloot"), ServerSettings("lloot"), ServerSettings("hloot"), ServerSettings("aharvest"), ServerSettings("charvest"), ServerSettings("tree"), ServerSettings("ore"), ServerSettings("gather"), ServerSettings("plant"))}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.16 0.0", AnchorMax = "0.37 0.46" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("xpsettingscraft", player.UserIDString, ServerSettings("craft"), ServerSettings("wood"), ServerSettings("stone"), ServerSettings("metal"), ServerSettings("armored"))}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.38 0.0", AnchorMax = "0.55 0.46" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("xpmissionsettings", player.UserIDString, ServerSettings("missionsucceed"), ServerSettings("missionfailed"), ServerSettings("missionfailedxp"))}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.56 0.0", AnchorMax = "0.80 0.46" } }, XPeriencePlayerControlFullHelp); FullScreenelements.Add(new CuiLabel { Text = { Text = $"{XPLang("xpreductionsettings", player.UserIDString, ServerSettings("death"), ServerSettings("deathenable"), ServerSettings("suicide"), ServerSettings("suicideenable"))}", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.81 0.0", AnchorMax = "0.99 0.46" } }, XPeriencePlayerControlFullHelp); } if(page == 5) { FullScreenelements.Add(new CuiLabel { Text = { Text = $"Steam allows public viewing of all player data through Steamworks API as stated in their Steam Privacy Policy Agreement section 5.5\n https://store.steampowered.com/privacy_agreement/ \n\n 5.5 We make certain data related to your Steam User Account available to other players and our partners through the Steamworks API.This information can be accessed by anyone by querying your Steam ID.At a minimum, the public persona name you have chosen to represent you on Steam and your Avatar picture are accessible this way, as well as whether you have received a ban for cheating in a multiplayer game.The accessibility of any additional info about you can be controlled through your Steam Community user profile page; data publicly available on your profile page can be accessed automatically through the Steamworks API.In addition to the publicly available information, game developers and publishers have access to certain information from the Steamworks API directly relating to the users of the games they operate.This information includes as a minimum your ownership of the game in question.Depending on which Steamworks services are implemented in the game it may also include leaderboard information, your progress in the game, achievements you have completed, your multiplayer game matchmaking information, in-game items and other information needed to operate the game and provide support for it.For more information on what Steamworks services a specific game has implemented, please review its store page.While we do not knowingly share Personally Identifying Information about you through the Steamworks API such as your real name or your email address, any information you share about yourself on your public Steam Profile can be accessed through the Steamworks API, including information that may make you identifiable.", FontSize = 18, Align = TextAnchor.UpperCenter, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.0", AnchorMax = "0.98 0.80" } }, XPeriencePlayerControlFullHelp); } CuiHelper.AddUi(player, FullScreenelements); } private void PlayerPromptBox(BasePlayer player, string function, string type, string name) { if (player == null || function == null || type == null|| name == null) return; DestroyUi(player, XPeriencePlayerControlPrompt); float height = 0.1f; int row = 2; bool econcanafford = true; bool srewardcanafford = true; // Create Box var PromptElements = new CuiElementContainer(); // Box PromptElements.Add(new CuiPanel { Image = { Color = "0 0 0 1" }, RectTransform = { AnchorMin = ".5 .5", AnchorMax = ".5 .5", OffsetMin = "-200 -100", OffsetMax = "200 100" }, CursorEnabled = true }, "Overlay", XPeriencePlayerControlPrompt); // Confirm Reset #region reset if (function == "reset") { if (name == "all") { PromptElements.Add(XPUILabel($"Do you want to reset all {type}?", row, height, TextAnchor.MiddleCenter, 15, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; row++; // Economics #region Economics Stats if (Economics != null) { double balance = Economics.Call("Balance", player.UserIDString); double statscost = config.xpEcon.econresetstatscost; double skillscost = config.xpEcon.econresetskillscost; if ((balance < statscost || balance < skillscost)) { econcanafford = false; } if (type == "stats" && config.xpEcon.econresetstats) { PromptElements.Add(XPUILabel($"Economics:", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; PromptElements.Add(XPUILabel($"Cost: {statscost}", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.49", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); PromptElements.Add(XPUILabel($"Balance: {balance}", row, height, TextAnchor.MiddleCenter, 11, "0.51", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; row++; } if (type == "skills" && config.xpEcon.econresetskills) { PromptElements.Add(XPUILabel($"Economics:", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; PromptElements.Add(XPUILabel($"Cost: {skillscost}", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.49", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); PromptElements.Add(XPUILabel($"Balance: {balance}", row, height, TextAnchor.MiddleCenter, 11, "0.51", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; row++; } } #endregion // Server Rewards #region ServerRewards Stats if (ServerRewards != null) { int points = ServerRewards.Call("CheckPoints", player.userID); int statspoints = config.sRewards.srewardresetstatscost; int skillspoints = config.sRewards.srewardresetskillscost; if (points < statspoints || points < skillspoints) { srewardcanafford = false; } if (type == "stats" && config.sRewards.srewardresetstats) { PromptElements.Add(XPUILabel($"Server Rewards:", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; PromptElements.Add(XPUILabel($"Cost: {statspoints}", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.49", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); PromptElements.Add(XPUILabel($"Balance: {points}", row, height, TextAnchor.MiddleCenter, 11, "0.51", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; row++; } if (type == "skills" && config.sRewards.srewardresetskills) { PromptElements.Add(XPUILabel($"Server Rewards:", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; PromptElements.Add(XPUILabel($"Cost: {skillspoints}", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.49", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); PromptElements.Add(XPUILabel($"Balance: {points}", row, height, TextAnchor.MiddleCenter, 11, "0.51", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; row++; } } #endregion } else { PromptElements.Add(XPUILabel($"Do you want to reset {name} {type}?", row, height, TextAnchor.MiddleCenter, 15, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; row++; // Economics #region Economics Reset if (Economics != null) { double balance = Economics.Call("Balance", player.UserIDString); double statcost = config.xpEcon.econresetstatcost; double skillcost = config.xpEcon.econresetskillcost; if(balance < statcost || balance < skillcost) { econcanafford = false; } if (type == "stat" && config.xpEcon.econresetstat) { PromptElements.Add(XPUILabel($"Economics:", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; PromptElements.Add(XPUILabel($"Cost: {statcost}", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.49", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); PromptElements.Add(XPUILabel($"Balance: {balance}", row, height, TextAnchor.MiddleCenter, 11, "0.51", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; row++; } if (type == "skill" && config.xpEcon.econresetskill) { PromptElements.Add(XPUILabel($"Economics:", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; PromptElements.Add(XPUILabel($"Cost: {skillcost}", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.49", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); PromptElements.Add(XPUILabel($"Balance: {balance}", row, height, TextAnchor.MiddleCenter, 11, "0.51", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; row++; } } #endregion // Server Rewards #region ServerRewards Reset if (ServerRewards != null) { int points = ServerRewards.Call("CheckPoints", player.userID); int statpoints = config.sRewards.srewardresetstatcost; int skillpoints = config.sRewards.srewardresetskillcost; if (points < statpoints || points < skillpoints) { srewardcanafford = false; } if (type == "stat" && config.sRewards.srewardresetstat) { PromptElements.Add(XPUILabel($"Server Rewards:", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; PromptElements.Add(XPUILabel($"Cost: {statpoints}", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.49", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); PromptElements.Add(XPUILabel($"Balance: {points}", row, height, TextAnchor.MiddleCenter, 11, "0.51", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; row++; } if (type == "skill" && config.sRewards.srewardresetskill) { PromptElements.Add(XPUILabel($"Server Rewards:", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; PromptElements.Add(XPUILabel($"Cost: {skillpoints}", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.49", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); PromptElements.Add(XPUILabel($"Balance: {points}", row, height, TextAnchor.MiddleCenter, 11, "0.51", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; row++; } } #endregion } } #endregion // Confirm Level Up #region levelup if (function == "levelup") { PromptElements.Add(XPUILabel($"Do you want to level up {name} {type}?", row, height, TextAnchor.MiddleCenter, 15, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; row++; // Economics #region Economics Levelup if (Economics != null) { double balance = Economics.Call("Balance", player.UserIDString); double statcost = 0; double skillcost = 0; if (type == "stat" && config.xpEcon.econstatlevelcost) { switch (name) { case "mentality": statcost = config.xpEcon.econmentality; break; case "dexterity": statcost = config.xpEcon.econdexterity; break; case "might": statcost = config.xpEcon.econmight; break; case "captaincy": statcost = config.xpEcon.econcaptaincy; break; case "weaponry": statcost = config.xpEcon.econweaponry; break; } if (balance < statcost) { econcanafford = false; } PromptElements.Add(XPUILabel($"Economics:", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; PromptElements.Add(XPUILabel($"Cost: {statcost}", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.49", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); PromptElements.Add(XPUILabel($"Balance: {balance}", row, height, TextAnchor.MiddleCenter, 11, "0.51", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; row++; } if (type == "skill" && config.xpEcon.econskilllevelcost) { switch (name) { case "woodcutter": skillcost = config.xpEcon.econwoodcutter; break; case "smithy": skillcost = config.xpEcon.econsmithy; break; case "miner": skillcost = config.xpEcon.econminer; break; case "forager": skillcost = config.xpEcon.econforager; break; case "hunter": skillcost = config.xpEcon.econhunter; break; case "crafter": skillcost = config.xpEcon.econcrafter; break; case "framer": skillcost = config.xpEcon.econframer; break; case "fisher": skillcost = config.xpEcon.econfisher; break; case "medic": skillcost = config.xpEcon.econmedic; break; case "scavenger": skillcost = config.xpEcon.econscavenger; break; case "tamer": skillcost = config.xpEcon.econtamer; break; } if (balance < skillcost) { econcanafford = false; } PromptElements.Add(XPUILabel($"Economics:", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; PromptElements.Add(XPUILabel($"Cost: {skillcost}", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.49", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); PromptElements.Add(XPUILabel($"Balance: {balance}", row, height, TextAnchor.MiddleCenter, 11, "0.51", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; row++; } } #endregion // Server Rewards #region ServerRewards Levelup if (ServerRewards != null) { int points = ServerRewards.Call("CheckPoints", player.userID); int statpoints = 0; int skillpoints = 0; if (type == "stat" && config.sRewards.srewardstatlevelcost) { switch (name) { case "mentality": statpoints = config.sRewards.srewardmentality; break; case "dexterity": statpoints = config.sRewards.srewarddexterity; break; case "might": statpoints = config.sRewards.srewardmight; break; case "captaincy": statpoints = config.sRewards.srewardcaptaincy; break; case "weaponry": statpoints = config.sRewards.srewardweaponry; break; } if (points < statpoints) { srewardcanafford = false; } PromptElements.Add(XPUILabel($"Server Rewards:", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; PromptElements.Add(XPUILabel($"Cost: {statpoints}", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.49", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); PromptElements.Add(XPUILabel($"Balance: {points}", row, height, TextAnchor.MiddleCenter, 11, "0.51", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; row++; } if (type == "skill" && config.sRewards.srewardskilllevelcost) { switch (name) { case "woodcutter": skillpoints = config.sRewards.srewardwoodcutter; break; case "smithy": skillpoints = config.sRewards.srewardsmithy; break; case "miner": skillpoints = config.sRewards.srewardminer; break; case "forager": skillpoints = config.sRewards.srewardforager; break; case "hunter": skillpoints = config.sRewards.srewardhunter; break; case "crafter": skillpoints = config.sRewards.srewardcrafter; break; case "framer": skillpoints = config.sRewards.srewardframer; break; case "fisher": skillpoints = config.sRewards.srewardfisher; break; case "medic": skillpoints = config.sRewards.srewardmedic; break; case "scavenger": skillpoints = config.sRewards.srewardscavenger; break; case "tamer": skillpoints = config.sRewards.srewardtamer; break; } if (points < skillpoints) { srewardcanafford = false; } PromptElements.Add(XPUILabel($"Server Rewards:", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; PromptElements.Add(XPUILabel($"Cost: {skillpoints}", row, height, TextAnchor.MiddleCenter, 11, "0.01", "0.49", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); PromptElements.Add(XPUILabel($"Balance: {points}", row, height, TextAnchor.MiddleCenter, 11, "0.51", "0.99", "1.0 1.0 1.0 1.0"), XPeriencePlayerControlPrompt); row++; row++; } } #endregion } #endregion // Yes or No if (function == "reset") { if(Economics == null || (!config.xpEcon.econresetstats && type == "skills") || (!config.xpEcon.econresetskills && type == "skills")) { econcanafford = true; } if(ServerRewards == null || (!config.sRewards.srewardresetstats && type == "stats") || (!config.sRewards.srewardresetskills && type == "skills")) { srewardcanafford = true; } if (econcanafford && srewardcanafford) { if (name == "all") { PromptElements.Add(XPUIButton($"xp.playercontrol reset {type}", row, height, 12, "0 1 0 1", "〘YES〙", "0.15", "0.35", TextAnchor.MiddleCenter, "1 1 1 1"), XPeriencePlayerControlPrompt); } else { PromptElements.Add(XPUIButton($"xp.playercontrol reset {type} {name}", row, height, 12, "0 1 0 1", "〘YES〙", "0.15", "0.35", TextAnchor.MiddleCenter, "1 1 1 1"), XPeriencePlayerControlPrompt); } } else { PromptElements.Add(XPUIButton("", row, height, 12, ".25 .25 .25 1", "〘Cannot Afford〙", "0.10", "0.35", TextAnchor.MiddleCenter, "1 1 1 1"), XPeriencePlayerControlPrompt); } } if (function == "levelup") { if (econcanafford && srewardcanafford) { PromptElements.Add(XPUIButton($"xp.playeredits {type} {name}", row, height, 12, "0 1 0 1", "〘YES〙", "0.15", "0.35", TextAnchor.MiddleCenter, "1 1 1 1"), XPeriencePlayerControlPrompt); } else { PromptElements.Add(XPUIButton("", row, height, 12, ".25 .25 .25 1", "〘Cannot Afford〙", "0.10", "0.35", TextAnchor.MiddleCenter, "1 1 1 1"), XPeriencePlayerControlPrompt); } } PromptElements.Add(XPUIButton("xp.playercontrol closeprompt", row, height, 12, "1 0 0 1", "〘NO〙", "0.65", "0.85", TextAnchor.MiddleCenter, "1 1 1 1"), XPeriencePlayerControlPrompt); CuiHelper.AddUi(player, PromptElements); } #endregion #region Top Player Panel private IEnumerable GetTopXP(int page, int takeCount, string selection) { IEnumerable data = null; switch (selection) { case "rank": data = _xperienceCache.Values.OrderByDescending(i => i.trueexperience); break; case "level": data = _xperienceCache.Values.OrderByDescending(i => i.truelevel); break; case "experience": data = _xperienceCache.Values.OrderByDescending(i => i.trueexperience); break; case "mentality": data = _xperienceCache.Values.OrderByDescending(i => i.Mentality); break; case "dexterity": data = _xperienceCache.Values.OrderByDescending(i => i.Dexterity); break; case "might": data = _xperienceCache.Values.OrderByDescending(i => i.Might); break; case "captaincy": data = _xperienceCache.Values.OrderByDescending(i => i.Captaincy); break; case "weaponry": data = _xperienceCache.Values.OrderByDescending(i => i.Weaponry); break; case "woodcutter": data = _xperienceCache.Values.OrderByDescending(i => i.WoodCutter); break; case "smithy": data = _xperienceCache.Values.OrderByDescending(i => i.Smithy); break; case "miner": data = _xperienceCache.Values.OrderByDescending(i => i.Miner); break; case "forager": data = _xperienceCache.Values.OrderByDescending(i => i.Forager); break; case "hunter": data = _xperienceCache.Values.OrderByDescending(i => i.Hunter); break; case "fisher": data = _xperienceCache.Values.OrderByDescending(i => i.Fisher); break; case "crafter": data = _xperienceCache.Values.OrderByDescending(i => i.Crafter); break; case "framer": data = _xperienceCache.Values.OrderByDescending(i => i.Framer); break; case "medic": data = _xperienceCache.Values.OrderByDescending(i => i.Medic); break; case "scavenger": data = _xperienceCache.Values.OrderByDescending(i => i.Scavenger); break; case "electrician": data = _xperienceCache.Values.OrderByDescending(i => i.Electrician); break; case "tamer": data = _xperienceCache.Values.OrderByDescending(i => i.Tamer); break; } return data? .Skip((page - 1) * takeCount) .Take(takeCount); } [ConsoleCommand("xp.player")] private void Cmdplayerxpui(ConsoleSystem.Arg arg) { var player = arg.Player(); if (player == null) return; var info = arg.GetString(0); DestroyUi(player, XPerienceTopMain); SelectedPlayerPanelFullMain(player, info); SelectedPlayerInfoPage(player, info); } [ConsoleCommand("xp.topplayers")] private void Cmdtopplayernew(ConsoleSystem.Arg arg) { var player = arg.Player(); if (player == null) return; int page = arg.GetInt(0); string type = arg.GetString(1); string selection = arg.GetString(2); int number = arg.GetInt(3); switch(type) { case "levels": DestroyUi(player, XPerienceTopInner); TopLevels(player, page, selection, number); break; case "stats": DestroyUi(player, XPerienceTopInner); TopStats(player, page, selection, number); break; case "close": DestroyUi(player, XPerienceTopMain); break; } } private void TopPlayerPanelFullMain(BasePlayer player, string selection) { if (player == null) return; var FullScreenelements = new CuiElementContainer(); //var getplayer = FindPlayer(selectedplayer); var height = 0.050f; var buttonheight = 0.034f; // Main UI | Title | Icon FullScreenelements.Add(new CuiPanel { Image = { Color = "0.1 0.1 0.1 0.99" }, RectTransform = { AnchorMin = $"0 0", AnchorMax = $"1 1" }, CursorEnabled = true }, "Overlay", XPerienceTopMain); FullScreenelements.Add(XPUILabel($"ⓍⓅerience", 1, 0.060f, TextAnchor.MiddleLeft, 20, "0.01", "0.18", "1.0 1.0 1.0 1.0"), XPerienceTopMain); FullScreenelements.Add(new CuiElement { Parent = XPerienceTopMain, Components = { new CuiRawImageComponent { Png = ImageLibrary?.Call("GetImage", XPerienceicon) }, new CuiRectTransformComponent { AnchorMin = "0.01 0.75", AnchorMax = "0.15 0.95" } } }); // Spacer double row = 4; // Navigation Menu FullScreenelements.Add(XPUIPanel("0.0 0.0", "0.15 0.85", "1.0 1.0 1.0 0.0"), XPerienceTopMain, XPerienceTopSelection); //Current Player Button FullScreenelements.Add(XPUIButton("xp.playercontrol main", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_014", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); double pagerow = 7; double spacing = 0.2; //Page Buttons if (config.xpLevelRanks.enableresetranks) { FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats rank 0", pagerow, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("rank", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; } FullScreenelements.Add(XPUIButton("xp.topplayers 1 levels level 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("level", player.UserIDString)} / XP", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats mentality 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("mentality", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats dexterity 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("dexterity", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); ; pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats might 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("might", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats captaincy 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("captaincy", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats weaponry 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("weaponry", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats woodcutter 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("woodcutter", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats smithy 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("smithy", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats miner 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("miner", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats forager 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("forager", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats hunter 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("hunter", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats crafter 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("crafter", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats framer 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("framer", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats fisher 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("fisher", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats medic 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("medic", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats scavenger 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("scavenger", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats electrician 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("electrician", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); if (config.tamer.enabletame) { pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 1 stats tamer 0", pagerow + spacing, buttonheight, 15, "0.0 0.0 0.0 0.7", $"{XPLang("tamer", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); } // Close Button pagerow++; spacing += 0.2; FullScreenelements.Add(XPUIButton("xp.topplayers 0 close", pagerow + spacing, buttonheight, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_009", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceTopSelection); // UI End CuiHelper.AddUi(player, FullScreenelements); return; } private void TopLevels(BasePlayer player, int page, string selection, int number) { if (player == null) return; if (selection == null) { selection = "level"; } var FullScreenelements = new CuiElementContainer(); var height = 0.04f; int maxplayers = config.defaultOptions.topplayersperpage; if (maxplayers > 20) { maxplayers = 20; } var vals = GetTopXP(page, maxplayers, "experience"); if (vals == null) { return; } var index = 0; int row = 3; int rowtwo = 3; int start = number; FullScreenelements.Add(XPUIPanel("0.16 0.0", "1 1", "0 0 0 0.75"), XPerienceTopMain, XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{XPLang("topplayers", player.UserIDString)}: 〘{XPLang(selection, player.UserIDString)} / XP〙", 1, 0.060f, TextAnchor.MiddleLeft, 20, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"Player", row, height, TextAnchor.MiddleLeft, 20, "0.03", "0.30", "1.0 1.0 1.0 1.0"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"Rank Level", row, height, TextAnchor.MiddleLeft, 20, "0.30", "0.40", "1.0 1.0 1.0 1.0"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"Rank XP", row, height, TextAnchor.MiddleRight, 20, "0.40", "0.50", "1.0 1.0 1.0 1.0"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"Base Level", row, height, TextAnchor.MiddleLeft, 20, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"Base XP", row, height, TextAnchor.MiddleRight, 20, "0.70", "0.80", "1.0 1.0 1.0 1.0"), XPerienceTopInner); /* if (maxplayers > 20) { FullScreenelements.Add(XPUILabel($"Player", row, height, TextAnchor.MiddleLeft, 20, "0.52", "0.79", "1.0 1.0 1.0 1.0"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{XPLang(selection, player.UserIDString)}", row, height, TextAnchor.MiddleLeft, 20, "0.79", "0.84", "1.0 1.0 1.0 1.0"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"XP", row, height, TextAnchor.MiddleRight, 20, "0.84", "0.95", "1.0 1.0 1.0 1.0"), XPerienceTopInner); } */ row++; rowtwo++; int totalrows = row + maxplayers; for (row = 4; row < totalrows; row++) { if (vals.ElementAtOrDefault(index) == null) { continue; } var playerdata = vals.ElementAtOrDefault(index); if (playerdata == null) continue; Ranks rank = GetXPRank(playerdata.rank); if (playerdata.truelevel > 0) { number++; if (row < 24) { if (playerdata.displayname == player.displayName) { FullScreenelements.Add(XPUILabel(("➤"), row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.03", "1 0.92 0.016 1"), XPerienceTopInner); } else { if (config.defaultOptions.showonlinestatus) { if (playerdata.Status) { FullScreenelements.Add(XPUIImage(XPerienceTopInner, XPerienceonline, row, height, "0.01", "0.02")); } else { FullScreenelements.Add(XPUIImage(XPerienceTopInner, XPerienceoffline, row, height, "0.01", "0.02")); } } } FullScreenelements.Add(XPUIButton($"xp.player {playerdata.id}", row, height, 15, "0 0 0 0", $"{number}. {rank.sig}{playerdata.displayname}", "0.03", "0.30"), XPerienceTopInner); if (config.xpLevelRanks.enableresetranks) { FullScreenelements.Add(XPUILabel($"{playerdata.truelevel}", row, height, TextAnchor.MiddleCenter, 15, "0.30", "0.40", "1 1 1 1"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{playerdata.trueexperience}", row, height, TextAnchor.MiddleRight, 15, "0.40", "0.50", "1 1 1 1"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{playerdata.level}", row, height, TextAnchor.MiddleCenter, 15, "0.60", "0.70", "1 1 1 1"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{playerdata.experience}", row, height, TextAnchor.MiddleRight, 15, "0.70", "0.80", "1 1 1 1"), XPerienceTopInner); } else { FullScreenelements.Add(XPUILabel($"N/A", row, height, TextAnchor.MiddleCenter, 15, "0.30", "0.40", "1 1 1 1"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"N/A", row, height, TextAnchor.MiddleRight, 15, "0.40", "0.50", "1 1 1 1"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{playerdata.level}", row, height, TextAnchor.MiddleCenter, 15, "0.60", "0.70", "1 1 1 1"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{playerdata.experience}", row, height, TextAnchor.MiddleRight, 15, "0.70", "0.80", "1 1 1 1"), XPerienceTopInner); } } else { if (playerdata.displayname == player.displayName) { FullScreenelements.Add(XPUILabel(("➤"), rowtwo, height, TextAnchor.MiddleLeft, 15, "0.50", "0.52", "1 0.92 0.016 1"), XPerienceTopInner); } else { if (config.defaultOptions.showonlinestatus) { if (playerdata.Status) { FullScreenelements.Add(XPUIImage(XPerienceTopInner, XPerienceonline, rowtwo, height, "0.50", "0.51")); } else { FullScreenelements.Add(XPUIImage(XPerienceTopInner, XPerienceoffline, rowtwo, height, "0.50", "0.51")); } } } FullScreenelements.Add(XPUIButton($"xp.player {playerdata.id}", rowtwo, height, 15, "0 0 0 0", $"{number}. {rank.sig}{playerdata.displayname}", "0.52", "0.79"), XPerienceTopInner); if (config.xpLevelRanks.enableresetranks) { FullScreenelements.Add(XPUILabel($"{playerdata.truelevel}", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.79", "0.84", "1 1 1 1"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{playerdata.trueexperience}", rowtwo, height, TextAnchor.MiddleRight, 15, "0.84", "0.95", "1 1 1 1"), XPerienceTopInner); } else { FullScreenelements.Add(XPUILabel($"{playerdata.level}", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.79", "0.84", "1 1 1 1"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{playerdata.experience}", rowtwo, height, TextAnchor.MiddleRight, 15, "0.84", "0.95", "1 1 1 1"), XPerienceTopInner); } rowtwo++; } } index++; } // Page Selection FullScreenelements.Add(XPUIPanel("0 0.02", "1 0.05", "0 0 0 0"), XPerienceTopInner, XPerienceTopPageSelection); if (page > 1) { FullScreenelements.Add(XPUIButton($"xp.topplayers {page - 1} levels {selection} {start - config.defaultOptions.topplayersperpage}", 1, 1f, 18, "0 0 0 1", "⋘ Prev", "0.03", "0.13", TextAnchor.MiddleCenter), XPerienceTopPageSelection); } int totalplayers = start + maxplayers; if (number >= totalplayers) { FullScreenelements.Add(XPUIButton($"xp.topplayers {page + 1} levels {selection} {number}", 1, 1f, 18, "0 0 0 1", "Next ⋙", "0.23", "0.33", TextAnchor.MiddleCenter), XPerienceTopPageSelection); } CuiHelper.AddUi(player, FullScreenelements); } private void TopStats(BasePlayer player, int page, string selection, int number) { if (player == null) return; if (selection == null) { selection = "mentality"; } var FullScreenelements = new CuiElementContainer(); var height = 0.04f; int maxplayers = config.defaultOptions.topplayersperpage; if (maxplayers > 40) { maxplayers = 40; } var vals = GetTopXP(page, maxplayers, selection); if (vals == null) { return; } var index = 0; int row = 3; int rowtwo = 3; int start = number; FullScreenelements.Add(XPUIPanel("0.16 0.0", "1 1", "0 0 0 0.75"), XPerienceTopMain, XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{XPLang("topplayers", player.UserIDString)}: 〘{XPLang(selection, player.UserIDString)}〙", 1, 0.060f, TextAnchor.MiddleLeft, 20, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"Player", row, height, TextAnchor.MiddleLeft, 20, "0.03", "0.35", "1.0 1.0 1.0 1.0"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{XPLang(selection, player.UserIDString)}", row, height, TextAnchor.MiddleRight, 20, "0.35", "0.45", "1.0 1.0 1.0 1.0"), XPerienceTopInner); if (maxplayers > 20) { FullScreenelements.Add(XPUILabel($"Player", row, height, TextAnchor.MiddleLeft, 20, "0.52", "0.84", "1.0 1.0 1.0 1.0"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{XPLang(selection, player.UserIDString)}", row, height, TextAnchor.MiddleRight, 20, "0.84", "0.95", "1.0 1.0 1.0 1.0"), XPerienceTopInner); } row++; rowtwo++; int totalrows = row + maxplayers; for (row = 4; row < totalrows; row++) { if (vals.ElementAtOrDefault(index) == null) { continue; } var playerdata = vals.ElementAtOrDefault(index); if (playerdata == null) continue; Ranks rank = GetXPRank(playerdata.rank); var playerdatatype = playerdata.Mentality; switch (selection) { case "rank": playerdatatype = playerdata.rank; break; case "mentality": playerdatatype = playerdata.Mentality; break; case "dexterity": playerdatatype = playerdata.Dexterity; break; case "might": playerdatatype = playerdata.Might; break; case "captaincy": playerdatatype = playerdata.Captaincy; break; case "weaponry": playerdatatype = playerdata.Weaponry; break; case "woodcutter": playerdatatype = playerdata.WoodCutter; break; case "smithy": playerdatatype = playerdata.Smithy; break; case "miner": playerdatatype = playerdata.Miner; break; case "forager": playerdatatype = playerdata.Forager; break; case "hunter": playerdatatype = playerdata.Hunter; break; case "fisher": playerdatatype = playerdata.Fisher; break; case "crafter": playerdatatype = playerdata.Crafter; break; case "framer": playerdatatype = playerdata.Framer; break; case "medic": playerdatatype = playerdata.Medic; break; case "scavenger": playerdatatype = playerdata.Scavenger; break; case "electrician": playerdatatype = playerdata.Electrician; break; case "tamer": playerdatatype = playerdata.Tamer; break; } if (playerdatatype > 0) { number++; if (row < 24) { if (playerdata.displayname == player.displayName) { FullScreenelements.Add(XPUILabel(("➤"), row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.03", "1 0.92 0.016 1"), XPerienceTopInner); } else { if (config.defaultOptions.showonlinestatus) { if (playerdata.Status) { FullScreenelements.Add(XPUIImage(XPerienceTopInner, XPerienceonline, row, height, "0.01", "0.02")); } else { FullScreenelements.Add(XPUIImage(XPerienceTopInner, XPerienceoffline, row, height, "0.01", "0.02")); } } } FullScreenelements.Add(XPUIButton($"xp.player {playerdata.id}", row, height, 15, "0 0 0 0", $"{number}. {rank.sig}{playerdata.displayname}", "0.03", "0.25"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{rank.name}", row, height, TextAnchor.MiddleLeft, 11, "0.25", "0.40", "1 1 1 1"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{playerdatatype}", row, height, TextAnchor.MiddleRight, 15, "0.40", "0.45", "1 1 1 1"), XPerienceTopInner); } else { if (playerdata.displayname == player.displayName) { FullScreenelements.Add(XPUILabel(("➤"), rowtwo, height, TextAnchor.MiddleLeft, 15, "0.50", "0.52", "1 0.92 0.016 1"), XPerienceTopInner); } else { if (config.defaultOptions.showonlinestatus) { if (playerdata.Status) { FullScreenelements.Add(XPUIImage(XPerienceTopInner, XPerienceonline, rowtwo, height, "0.50", "0.51")); } else { FullScreenelements.Add(XPUIImage(XPerienceTopInner, XPerienceoffline, rowtwo, height, "0.50", "0.51")); } } } FullScreenelements.Add(XPUIButton($"xp.player {playerdata.id}", rowtwo, height, 15, "0 0 0 0", $"{number}. {rank.sig}{playerdata.displayname}", "0.52", "0.74"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{rank.name}", row, height, TextAnchor.MiddleLeft, 11, "0.74", "0.90", "1 1 1 1"), XPerienceTopInner); FullScreenelements.Add(XPUILabel($"{playerdatatype}", rowtwo, height, TextAnchor.MiddleRight, 15, "0.90", "0.95", "1 1 1 1"), XPerienceTopInner); rowtwo++; } } index++; } // Page Selection FullScreenelements.Add(XPUIPanel("0 0.02", "1 0.05", "0 0 0 0"), XPerienceTopInner, XPerienceTopPageSelection); if (page > 1) { FullScreenelements.Add(XPUIButton($"xp.topplayers {page - 1} stats {selection} {start - config.defaultOptions.topplayersperpage}", 1, 1f, 18, "0 0 0 1", "⋘ Prev", "0.03", "0.13", TextAnchor.MiddleCenter), XPerienceTopPageSelection); } int totalplayers = start + maxplayers; if (number >= totalplayers) { FullScreenelements.Add(XPUIButton($"xp.topplayers {page + 1} stats {selection} {number}", 1, 1f, 18, "0 0 0 1", "Next ⋙", "0.23", "0.33", TextAnchor.MiddleCenter), XPerienceTopPageSelection); } CuiHelper.AddUi(player, FullScreenelements); } #endregion #region Admin Panel private void ClearUIs(BasePlayer player) { if (player == null) return; DestroyUi(player, XPerienceAdminPanelInfo); DestroyUi(player, XPerienceAdminPanelLevelXP); DestroyUi(player, XPerienceAdminPanelRanks); DestroyUi(player, XPerienceAdminPanelStats); DestroyUi(player, XPerienceAdminPanelSkills); DestroyUi(player, XPerienceAdminPanelTimerColor); DestroyUi(player, XPerienceAdminPanelOtherMods); DestroyUi(player, XPerienceAdminPanelSQL); DestroyUi(player, XPerienceAdminPanelReset); DestroyUi(player, XPerienceAdminPanelInfoBox); DestroyUi(player, XPerienceAdminPanelAddon); DestroyUi(player, XPerienceAdminPanelDailyLimits); DestroyUi(player, XPerienceAdminPanelCalculations); DestroyUi(player, XPerienceAdminPanelCalculationsLevelSelection); DestroyUi(player, XPerienceAdminPanelCalculationsRanksSelection); DestroyUi(player, XPerienceAdminPanelSoundEffects); DestroyUi(player, XPerienceAdminPanelElectricianSettings); } // Setting Handlers [ConsoleCommand("xp.admin")] private void Cmdadminxp(ConsoleSystem.Arg arg) { var player = arg.Player(); if (player == null) return; if (!player.IsAdmin && !permission.UserHasPermission(player.UserIDString, Admin)) return; string page = arg.GetString(0); string mod = arg.GetString(1); switch (page) { case "main": ClearUIs(player); AdminInfoPage(player); break; case "levelxp": ClearUIs(player); AdminLevelPage(player); break; case "ranks": ClearUIs(player); AdminRanksPage(player); break; case "dailylimits": ClearUIs(player); AdminDailyLimitsPage(player); break; case "calculationsranks": ClearUIs(player); int rpagenumber = arg.GetInt(1); AdminCalculationPageRanks(player, rpagenumber); break; case "calculationslevels": ClearUIs(player); int pagenumber = arg.GetInt(1); int ranknumber = arg.GetInt(2); AdminCalculationPageLevels(player, pagenumber, ranknumber); break; case "calculationsstats": ClearUIs(player); AdminCalculationPageStats(player); break; case "calculationsskills": ClearUIs(player); AdminCalculationPageSkills(player); break; case "stats": ClearUIs(player); AdminStatsPage(player); break; case "skills": ClearUIs(player); AdminSkillsPage(player); break; case "playerdata": ClearUIs(player); AdminPlayerInfoPage(player); break; case "timercolor": ClearUIs(player); AdminTimerColorPage(player); break; case "soundeffects": ClearUIs(player); AdminSoundEffectsPage(player); break; case "othermods": ClearUIs(player); AdminOtherModsPage(player, mod); break; case "sql": ClearUIs(player); AdminSQLPage(player); break; case "save": player.ChatMessage(XPLang("saveconfig", player.UserIDString)); SaveConfig(); break; case "reload": SaveData(); SaveLoot(); SaveConfig(); Interface.Oxide.ReloadPlugin("XPerience"); if(XPerienceAddon != null) { Interface.Oxide.ReloadPlugin("XPerienceAddon"); } break; case "close": DestroyUi(player, XPerienceAdminPanelMain); break; case "reset": ClearUIs(player); AdminResetPage(player); break; case "addon": if (XPerienceAddon != null) { DestroyUi(player, XPerienceAdminPanelMain); XPerienceAddon.Call("AddonAdminControlPanel", player); XPerienceAddon.Call("AddonAdminInfoPage", player); } if (XPerienceAddon == null) { DestroyUi(player, XPerienceAdminPanelInfo); DestroyUi(player, XPerienceAdminPanelLevelXP); DestroyUi(player, XPerienceAdminPanelStats); DestroyUi(player, XPerienceAdminPanelSkills); DestroyUi(player, XPerienceAdminPanelTimerColor); DestroyUi(player, XPerienceAdminPanelOtherMods); DestroyUi(player, XPerienceAdminPanelSQL); DestroyUi(player, XPerienceAdminPanelReset); DestroyUi(player, XPerienceAdminPanelInfoBox); DestroyUi(player, XPerienceAdminPanelAddon); AdminAddonPage(player); } break; case "fix": PlayerFixDataAll(player); break; case "mystats": DestroyUi(player, XPerienceAdminPanelMain); PlayerControlPanelFullMain(player); PlayerInfoPage(player); break; case "openelectriciansettings": DestroyUi(player, XPerienceAdminPanelElectricianSettings); AdminElectricianSettings(player); break; case "closeelectricianbox": DestroyUi(player, XPerienceAdminPanelElectricianSettings); break; } } [ConsoleCommand("xp.config")] private void Cmdadminxpconfig(ConsoleSystem.Arg arg) { var player = arg.Player(); if (player == null) return; if (!player.IsAdmin && !permission.UserHasPermission(player.UserIDString, Admin)) return; string page = arg.GetString(0); string option = arg.GetString(1); double value = Convert.ToDouble(arg.GetString(2)); bool setting = Convert.ToBoolean(arg.GetString(3)); string mod = arg.GetString(4); switch (page) { case "main": DestroyUi(player, XPerienceAdminPanelInfo); AdminInfoPage(player); break; case "levelxp": switch (option) { // Main #region main case "levelstart": config.xpLevel.levelstart = (double)value; break; case "levelmultiplier": config.xpLevel.levelmultiplier = (double)value; break; case "levelmax": config.xpLevel.maxlevel = (int)value; break; case "levelxpboost": config.xpLevel.levelxpboost = (double)value; break; case "statpointsperlvl": config.xpLevel.statpointsperlvl = (int)value; break; case "skillpointsperlvl": config.xpLevel.skillpointsperlvl = (int)value; break; case "alwaysearnxp": config.xpLevel.alwaysearnxp = setting; break; #endregion // Night #region night case "nightenable": config.nightBonus.Enable = setting; break; case "nightstart": config.nightBonus.StartTime = (int)value; break; case "nightend": config.nightBonus.EndTime = (int)value; break; case "nightbonus": config.nightBonus.Bonus = (double)value; break; case "nightskill": config.nightBonus.enableskillboosts = setting; break; #endregion // XP Kills #region kills case "chicken": config.xpGain.chickenxp = (double)value; break; case "fish": config.xpGain.fishxp = (double)value; break; case "boar": config.xpGain.boarxp = (double)value; break; case "stag": config.xpGain.stagxp = (double)value; break; case "wolf": config.xpGain.wolfxp = (double)value; break; case "bear": config.xpGain.bearxp = (double)value; break; case "polarbear": config.xpGain.polarbearxp = (double)value; break; case "shark": config.xpGain.sharkxp = (double)value; break; case "horse": config.xpGain.horsexp = (double)value; break; case "scientist": config.xpGain.scientistxp = (double)value; break; case "sc_cargo": config.xpGain.sc_cargo = (double)value; break; case "sc_full": config.xpGain.sc_full = (double)value; break; case "sc_heavy": config.xpGain.sc_heavy = (double)value; break; case "sc_junkpile": config.xpGain.sc_junkpile = (double)value; break; case "sc_oilrig": config.xpGain.sc_oilrig = (double)value; break; case "sc_patrol": config.xpGain.sc_patrol = (double)value; break; case "sc_peacekeeper": config.xpGain.sc_peacekeeper = (double)value; break; case "sc_roam": config.xpGain.sc_roam = (double)value; break; case "customnpc": config.xpGain.customnpc = (double)value; break; case "dweller": config.xpGain.dwellerxp = (double)value; break; case "tunneldwellerxp": config.xpGain.tunneldwellerxp = (double)value; break; case "underwaterdwellerxp": config.xpGain.underwaterdwellerxp = (double)value; break; case "scarecrownpc": config.xpGain.scarecrownpc = (double)value; break; case "player": config.xpGain.playerxp = (double)value; break; case "bradley": config.xpGain.bradley = (double)value; break; case "heli": config.xpGain.patrolhelicopter = (double)value; break; case "turretallow": config.xpGain.allowturretxp = setting; break; case "turret": config.xpGain.turretxp = (double)value; break; case "zombienpc": config.xpGain.zombienpc = (double)value; break; case "gifts": config.xpGain.gifts = (double)value; break; case "opengifts": config.xpGain.opengifts = (double)value; break; case "opengiftsmed": config.xpGain.opengiftsmed = (double)value; break; case "opengiftslarge": config.xpGain.opengiftslarge = (double)value; break; case "upgradegiftsmed": config.xpGain.upgradegiftsmed = (double)value; break; case "upgradegiftslarge": config.xpGain.upgradegiftslarge = (double)value; break; #endregion // XP Gathering/Looting #region gathering case "loot": config.xpGain.lootcontainerxp = (double)value; break; case "lootbarrel": config.xpGain.lootbarrel = (double)value; break; case "oilbarrel": config.xpGain.oilbarrel = (double)value; break; case "vehicleparts": config.xpGain.vehicleparts = (double)value; break; case "toolcrate": config.xpGain.toolcrate = (double)value; break; case "foodcrate": config.xpGain.foodcrate = (double)value; break; case "normalcrate": config.xpGain.normalcrate = (double)value; break; case "elitecrate": config.xpGain.elitecrate = (double)value; break; case "lootu": config.xpGain.underwaterlootcontainerxp = (double)value; break; case "lootlocked": config.xpGain.lockedcratexp = (double)value; break; case "loothacked": config.xpGain.hackablecratexp = (double)value; break; case "aharvest": config.xpGain.animalharvestxp = (double)value; break; case "charvest": config.xpGain.corpseharvestxp = (double)value; break; case "tree": config.xpGather.treexp = (double)value; break; case "ore": config.xpGather.orexp = (double)value; break; case "metalorexp": config.xpGather.metalorexp = (double)value; break; case "sulfurorexp": config.xpGather.sulfurorexp = (double)value; break; case "stoneorexp": config.xpGather.stoneorexp = (double)value; break; case "harvest": config.xpGather.harvestxp = (double)value; break; case "plant": config.xpGather.plantxp = (double)value; break; case "noxptools": config.xpGather.noxptools = setting; break; case "onetimexp": config.xpGather.onetimexp = setting; break; case "toolxpchance": config.xpGather.toolxpchance = (double)value; break; case "toolxppercent": config.xpGather.toolxppercent = (double)value; break; #endregion // Crafting/Building #region craft/build case "crafting": config.xpGain.craftingxp = (double)value; break; case "craftxpdelay": config.xpGain.craftingxpdelay = setting; break; case "craftxpdelayseconds": config.xpGain.craftingxpdelayseconds = (double)value; break; case "twigbuild": config.xpBuilding.twigstructure = (double)value; break; case "woodbuild": config.xpBuilding.woodstructure = (double)value; break; case "stonebuild": config.xpBuilding.stonestructure = (double)value; break; case "metalbuild": config.xpBuilding.metalstructure = (double)value; break; case "armorbuild": config.xpBuilding.armoredstructure = (double)value; break; case "buildxpdelay": config.xpBuilding.buildxpdelay = setting; break; case "preventBGxp": config.xpBuilding.preventBGxp = setting; break; case "requirebuildingprivlidge": config.xpBuilding.requirebuildingprivlidge = setting; break; case "reducexp": config.xpBuilding.reducexp = setting; break; case "buildxpdelayseconds": config.xpBuilding.buildxpdelayseconds = (int)value; break; case "buildxpreduction": config.xpBuilding.buildxpreduction = (double)value; break; #endregion // XP Reduce #region xp reduce case "suicide": config.xpReducer.suicidereduce = setting; break; case "suicideamt": config.xpReducer.suicidereduceamount = (double)value; break; case "death": config.xpReducer.deathreduce = setting; break; case "deathamt": config.xpReducer.deathreduceamount = (double)value; break; #endregion // Teams #region teams case "enableteamxpgain": config.xpTeams.enableteamxpgain = setting; break; case "enableteamxploss": config.xpTeams.enableteamxploss = setting; break; case "teamdistance": config.xpTeams.teamdistance = (float)value; break; case "teamxpgainamt": config.xpTeams.teamxpgainamount = (double)value; break; case "teamxplossamt": config.xpTeams.teamxplossamount = (double)value; break; #endregion // Missions #region missions case "missionsucceeded": config.xpMissions.missionsucceededxp = (int)value; break; case "missionfailed": config.xpMissions.missionfailed = setting; break; case "missionfailedxp": config.xpMissions.missionfailedxp = (int)value; break; #endregion // XP Boost #region xp boost case "enablexpboost": config.xpGain.enablexpboost = setting; break; case "xpboostamount": config.xpGain.xpboostamount = (double)value; break; case "xpboostorder": config.xpGain.xpboostorder = (int)value; break; #endregion } DestroyUi(player, XPerienceAdminPanelLevelXP); AdminLevelPage(player); break; case "ranks": switch (option) { // Ranks case "enableranks": config.xpLevelRanks.enableresetranks = setting; break; case "resetallstatsskills": config.xpLevelRanks.resetallstatsskills = setting; break; case "playerdisable": config.xpLevelRanks.allowplayerdisable = setting; break; case "showrankinchat": config.xpLevelRanks.showrankinchat = setting; break; case "showrankinliveui": config.xpLevelRanks.showrankinliveui = setting; break; case "maxrank": config.xpLevelRanks.maxresetrank = (int)value; break; case "enablerankxpboost": config.xpLevelRanks.enablerankxpboost = setting; break; case "rankxpboost": config.xpLevelRanks.rankxpboost = (double)value; break; case "rankstatboost": config.xpLevelRanks.rankstatboost = setting; config.Rankboostssettings.researchcost = setting; config.Rankboostssettings.researchspeed = setting; config.Rankboostssettings.block = setting; config.Rankboostssettings.armor = setting; config.Rankboostssettings.distance = setting; config.Rankboostssettings.meleedmg = setting; config.Rankboostssettings.metabolism = setting; break; case "rankstatboostamt": config.xpLevelRanks.rankstatboostamount = (double)value; break; case "rankstatpoints": config.xpLevelRanks.rankstatpointincrease = (int)value; break; case "rankstatpointstart": config.xpLevelRanks.rankstatpointstart = (int)value; break; case "rankskillboost": config.xpLevelRanks.rankskillboost = setting; config.Rankboostssettings.woodcuttergr = setting; config.Rankboostssettings.woodcutterbonus = setting; config.Rankboostssettings.smithypr = setting; config.Rankboostssettings.smithyps = setting; config.Rankboostssettings.smithyfc = setting; config.Rankboostssettings.smithyhqmc = setting; config.Rankboostssettings.smithyhqma = setting; config.Rankboostssettings.minergr = setting; config.Rankboostssettings.minerbonus = setting; config.Rankboostssettings.minerfuel = setting; config.Rankboostssettings.minermfc = setting; config.Rankboostssettings.minermfa = setting; config.Rankboostssettings.fisherfa = setting; config.Rankboostssettings.fisheria = setting; config.Rankboostssettings.fisherotr = setting; config.Rankboostssettings.foragergr = setting; config.Rankboostssettings.foragergwa = setting; config.Rankboostssettings.foragerric = setting; config.Rankboostssettings.huntergr = setting; config.Rankboostssettings.hunterbonus = setting; config.Rankboostssettings.hunterdmg = setting; config.Rankboostssettings.hunterndmg = setting; config.Rankboostssettings.crafterspeed = setting; config.Rankboostssettings.craftercost = setting; config.Rankboostssettings.crafterri = setting; config.Rankboostssettings.crafterrc = setting; config.Rankboostssettings.craftercc = setting; config.Rankboostssettings.crafterca = setting; config.Rankboostssettings.framerucost = setting; config.Rankboostssettings.framerrcost = setting; config.Rankboostssettings.medicrevivala = setting; config.Rankboostssettings.medicrecovera = setting; config.Rankboostssettings.medictools = setting; config.Rankboostssettings.scavelc = setting; config.Rankboostssettings.scavelm = setting; config.Rankboostssettings.scavcic = setting; config.Rankboostssettings.scavcim = setting; break; case "rankskillboostamt": config.xpLevelRanks.rankskillboostamount = (double)value; break; case "rankskillpoints": config.xpLevelRanks.rankskillpointincrease = (int)value; break; case "rankskillpointstart": config.xpLevelRanks.rankskillpointstart = (int)value; break; case "truelevels": config.xpLevelRanks.showtruelevelprofile = setting; break; case "truexp": config.xpLevelRanks.showtruexpprofile = setting; break; case "keepremainingxp": config.xpLevelRanks.keepremainingxp = setting; break; case "keepgrouponrank": config.xpLevelRanks.keepgrouponrank = setting; break; case "increaselevelmultiplier": config.xpLevelRanks.increaselevelmultiplier = setting; break; case "levelmultiplierincrease": config.xpLevelRanks.levelmultiplierincrease = (double)value; break; #region stat/skill options case "researchcost": config.Rankboostssettings.researchcost = setting; break; case "researchspeed": config.Rankboostssettings.researchspeed = setting; break; case "block": config.Rankboostssettings.block = setting; break; case "armor": config.Rankboostssettings.armor = setting; break; case "distance": config.Rankboostssettings.distance = setting; break; case "meleedmg": config.Rankboostssettings.meleedmg = setting; break; case "metabolism": config.Rankboostssettings.metabolism = setting; break; case "woodcuttergr": config.Rankboostssettings.woodcuttergr = setting; break; case "woodcutterbonus": config.Rankboostssettings.woodcutterbonus = setting; break; case "smithypr": config.Rankboostssettings.smithypr = setting; break; case "smithyps": config.Rankboostssettings.smithyps = setting; break; case "smithyfc": config.Rankboostssettings.smithyfc = setting; break; case "smithyhqmc": config.Rankboostssettings.smithyhqmc = setting; break; case "smithyhqma": config.Rankboostssettings.smithyhqma = setting; break; case "minergr": config.Rankboostssettings.minergr = setting; break; case "minerbonus": config.Rankboostssettings.minerbonus = setting; break; case "minerfuel": config.Rankboostssettings.minerfuel = setting; break; case "minermfc": config.Rankboostssettings.minermfc = setting; break; case "minermfa": config.Rankboostssettings.minermfa = setting; break; case "fisherfa": config.Rankboostssettings.fisherfa = setting; break; case "fisheria": config.Rankboostssettings.fisheria = setting; break; case "fisherotr": config.Rankboostssettings.fisherotr = setting; break; case "foragergr": config.Rankboostssettings.foragergr = setting; break; case "foragergwa": config.Rankboostssettings.foragergwa = setting; break; case "foragerric": config.Rankboostssettings.foragerric = setting; break; case "huntergr": config.Rankboostssettings.huntergr = setting; break; case "hunterbonus": config.Rankboostssettings.hunterbonus = setting; break; case "hunterdmg": config.Rankboostssettings.hunterdmg = setting; break; case "hunterndmg": config.Rankboostssettings.hunterndmg = setting; break; case "crafterspeed": config.Rankboostssettings.crafterspeed = setting; break; case "craftercost": config.Rankboostssettings.craftercost = setting; break; case "crafterri": config.Rankboostssettings.crafterri = setting; break; case "crafterrc": config.Rankboostssettings.crafterrc = setting; break; case "craftercc": config.Rankboostssettings.craftercc = setting; break; case "crafterca": config.Rankboostssettings.crafterca = setting; break; case "framerucost": config.Rankboostssettings.framerucost = setting; break; case "framerrcost": config.Rankboostssettings.framerrcost = setting; break; case "medicrevivala": config.Rankboostssettings.medicrevivala = setting; break; case "medicrecovera": config.Rankboostssettings.medicrecovera = setting; break; case "medictools": config.Rankboostssettings.medictools = setting; break; case "scavelc": config.Rankboostssettings.scavelc = setting; break; case "scavelm": config.Rankboostssettings.scavelm = setting; break; case "scavcic": config.Rankboostssettings.scavcic = setting; break; case "scavcim": config.Rankboostssettings.scavcim = setting; break; #endregion } DestroyUi(player, XPerienceAdminPanelRanks); AdminRanksPage(player); break; case "stats": switch (option) { // Mentality case "mentalitymaxlevel": config.mentality.maxlvl = (int)value; break; case "mentalitycost": config.mentality.pointcoststart = (int)value; break; case "mentalitycostmultiplier": config.mentality.costmultiplier = (int)value; break; case "mentalityresearchcost": config.mentality.researchcost = (double)value; break; case "mentalityresearchspeed": config.mentality.researchspeed = (double)value; break; case "mentalitycriticalchance": config.mentality.criticalchance = (double)value; break; case "mentalitydamagepvpnpc": config.mentality.damageincrease = (double)value; break; case "mentalityothermod": config.mentality.useotherresearchmod = setting; break; case "mentalitylocktechtree": config.mentality.locktechtree = setting; break; case "mentalityunlocktechtreelevel": config.mentality.unlocktechtreelevel = (int)value; break; // Dexterity case "dexteritymaxlevel": config.dexterity.maxlvl = (int)value; break; case "dexteritycost": config.dexterity.pointcoststart = (int)value; break; case "dexteritycostmultiplier": config.dexterity.costmultiplier = (int)value; break; case "dexterityblock": config.dexterity.blockchance = (double)value; break; case "dexterityblockamt": config.dexterity.blockamount = (double)value; break; case "dexteritydodge": config.dexterity.dodgechance = (double)value; break; case "dexterityarmor": config.dexterity.reducearmordmg = (double)value; break; case "horsespeed": config.dexterity.horsespeed = (double)value; break; case "boatspeed": config.dexterity.boatspeed = (double)value; break; case "vehiclespeed": config.dexterity.vehiclespeed = (double)value; break; case "fuelreduce": config.dexterity.fuelreduce = (double)value; break; // Captaincy case "captaincymaxlevel": config.captaincy.maxlvl = (int)value; break; case "captaincycost": config.captaincy.pointcoststart = (int)value; break; case "captaincycostmultiplier": config.captaincy.costmultiplier = (int)value; break; case "captaincyskillboost": config.captaincy.skillboost = (double)value; break; case "captaincyenablexpboost": config.captaincy.enablexpboost = setting; break; case "allownoteam": config.captaincy.allownoteam = setting; break; case "captaincyxpboost": config.captaincy.xpboost = (double)value; break; case "captaincydistance": config.captaincy.captaincydistance = (float)value; break; // Weaponry case "weaponrymaxlevel": config.weaponry.maxlvl = (int)value; break; case "weaponrycost": config.weaponry.pointcoststart = (int)value; break; case "weaponrycostmultiplier": config.weaponry.costmultiplier = (int)value; break; case "weaponrychance": config.weaponry.reductionchance = (double)value; break; case "weaponrytools": config.weaponry.tool = (double)value; break; case "weaponrypowertools": config.weaponry.powertools = (double)value; break; case "weaponrymeleeweapons": config.weaponry.meleeweapons = (double)value; break; case "weaponryprojectileweapons": config.weaponry.projectileweapons = (double)value; break; case "weaponrymindamage": config.weaponry.mindamage = (double)value; break; case "weaponrymaxammo": config.weaponry.maxammo = (double)value; break; case "weaponrymaxammolimit": config.weaponry.maxammolimit = (double)value; break; case "skinboxdisable": config.weaponry.skinboxdisable = setting; break; case "weaponryreloadhook": config.weaponry.reloadhook = mod; break; // Might case "mightmaxlevel": config.might.maxlvl = (int)value; break; case "mightcost": config.might.pointcoststart = (int)value; break; case "mightcostmultiplier": config.might.costmultiplier = (int)value; break; case "mightarmor": config.might.armor = (double)value; break; case "mightmelee": config.might.meleedmg = (double)value; break; case "mightmeta": config.might.metabolism = (double)value; break; case "mightbleed": config.might.bleedreduction = (double)value; break; case "mightrad": config.might.radreduction = (double)value; break; case "mightheat": config.might.heattolerance = (double)value; break; case "mightcold": config.might.coldtolerance = (double)value; break; } DestroyUi(player, XPerienceAdminPanelStats); AdminStatsPage(player); break; case "skills": switch (option) { // WoodCutter case "woodcuttermaxlevel": config.woodcutter.maxlvl = (int)value; break; case "woodcuttercost": config.woodcutter.pointcoststart = (int)value; break; case "woodcuttercostmultiplier": config.woodcutter.costmultiplier = (int)value; break; case "woodcuttergatherrate": config.woodcutter.gatherrate = (double)value; break; case "woodcutterbonus": config.woodcutter.bonusincrease = (double)value; break; case "woodcutterapple": config.woodcutter.applechance = (double)value; break; // Smithy case "smithymaxlevel": config.smithy.maxlvl = (int)value; break; case "smithycost": config.smithy.pointcoststart = (int)value; break; case "smithycostmultiplier": config.smithy.costmultiplier = (int)value; break; case "smithyprate": config.smithy.productionrate = (double)value; break; case "smithypspeed": config.smithy.productionspeed = (double)value; break; case "smithyfuel": config.smithy.fuelconsumption = (double)value; break; case "smithymetalchance": config.smithy.metalchance = (double)value; break; case "smithymetalamount": config.smithy.metalamount = (int)value; break; // Miner case "minermaxlevel": config.miner.maxlvl = (int)value; break; case "minercost": config.miner.pointcoststart = (int)value; break; case "minercostmultiplier": config.miner.costmultiplier = (int)value; break; case "minergatherrate": config.miner.gatherrate = (double)value; break; case "minerbonus": config.miner.bonusincrease = (double)value; break; case "minerfuel": config.miner.fuelconsumption = (double)value; break; case "minermetalchance": config.miner.metalchance = (double)value; break; case "minermetalamount": config.miner.metalamount = (int)value; break; // Forager case "foragermaxlevel": config.forager.maxlvl = (int)value; break; case "foragercost": config.forager.pointcoststart = (int)value; break; case "foragercostmultiplier": config.forager.costmultiplier = (int)value; break; case "foragergatherrate": config.forager.gatherrate = (double)value; break; case "foragerseed": config.forager.chanceincrease = (double)value; break; case "foragerrandom": config.forager.randomchance = (double)value; break; case "grubwormincrease": config.forager.grubwormincrease = (double)value; break; // Hunter case "huntermaxlevel": config.hunter.maxlvl = (int)value; break; case "huntercost": config.hunter.pointcoststart = (int)value; break; case "huntercostmultiplier": config.hunter.costmultiplier = (int)value; break; case "huntergatherrate": config.hunter.gatherrate = (double)value; break; case "hunterbonus": config.hunter.bonusincrease = (double)value; break; case "hunterdamage": config.hunter.damageincrease = (double)value; break; case "hunterndamage": config.hunter.nightdmgincrease = (double)value; break; // Fisher case "fishermaxlevel": config.fisher.maxlvl = (int)value; break; case "fishercost": config.fisher.pointcoststart = (int)value; break; case "fishercostmultiplier": config.fisher.costmultiplier = (int)value; break; case "fisheramount": config.fisher.fishamountincrease = (double)value; break; case "fisheritem": config.fisher.itemamountincrease = (double)value; break; case "fisheroxygen": config.fisher.oxygenreduction = (double)value; break; case "fisheroxygentank": config.fisher.oxygentankreduction = (double)value; break; // Crafter case "craftermaxlevel": config.crafter.maxlvl = (int)value; break; case "craftercost": config.crafter.pointcoststart = (int)value; break; case "craftercostmultiplier": config.crafter.costmultiplier = (int)value; break; case "crafterspeed": config.crafter.craftspeed = (double)value; break; case "craftercosts": config.crafter.craftcost = (double)value; break; case "crafterrepair": config.crafter.repairincrease = (double)value; break; case "crafterrepaircost": config.crafter.repaircost = (double)value; break; case "craftercondtition": config.crafter.conditionchance = (double)value; break; case "craftercondtitionamt": config.crafter.conditionamount = (double)value; break; // Framer case "framermaxlevel": config.framer.maxlvl = (int)value; break; case "framercost": config.framer.pointcoststart = (int)value; break; case "framercostmultiplier": config.framer.costmultiplier = (int)value; break; case "framerupgrade": config.framer.upgradecost = (double)value; break; case "framerrepair": config.framer.repaircost = (double)value; break; case "framertime": config.framer.repairtime = (double)value; break; // Electrician case "electricianmaxlevel": config.electrician.maxlvl = (int)value; break; case "electriciancost": config.electrician.pointcoststart = (int)value; break; case "electriciancostmultiplier": config.electrician.costmultiplier = (int)value; break; case "solarpanelinputincrease": config.electrician.solarpanelinputincrease = (double)value; break; case "solarpanelmaxincrease": config.electrician.solarpanelmaxincrease = (double)value; break; case "smallbatterymaxincrease": config.electrician.smallbatterymaxincrease = (double)value; break; case "mediumbatterymaxincrease": config.electrician.mediumbatterymaxincrease = (double)value; break; case "largebatterymaxincrease": config.electrician.largebatterymaxincrease = (double)value; break; case "smallgeneratormaxincrease": config.electrician.smallgeneratormaxincrease = (double)value; break; case "electricwindmillmaxincrease": config.electrician.electricwindmillmaxincrease = (double)value; break; case "allowminsolarinput": config.electrician.allowminsolarinput = setting; break; case "minsolarinput": config.electrician.minsolarinput = (int)value; break; // Medic case "medicmaxlevel": config.medic.maxlvl = (int)value; break; case "mediccost": config.medic.pointcoststart = (int)value; break; case "mediccostmultiplier": config.medic.costmultiplier = (int)value; break; case "medicrevival": config.medic.revivehp = (double)value; break; case "medicrecover": config.medic.recoverhp = (double)value; break; case "mediccraft": config.medic.crafttime = (double)value; break; case "medictools": config.medic.tools = (double)value; break; case "medicteas": config.medic.teas = (double)value; break; case "preventbandageboost": config.medic.preventbandageboost = setting; break; // Scavenger case "scavmaxlevel": config.scavenger.maxlvl = (int)value; break; case "scavccost": config.scavenger.pointcoststart = (int)value; break; case "scavcostmultiplier": config.scavenger.costmultiplier = (int)value; break; case "scavchance": config.scavenger.scavchance = (double)value; break; case "scavlootchance": config.scavenger.scavlootchance = (double)value; break; case "scavmultiplier": config.scavenger.scavmultiplier = (double)value; break; case "customscavmultiplier": config.scavenger.customscavmultiplier = (double)value; break; case "customscavrandom": config.scavenger.customscavrandom = setting; break; case "usecustomscavlist": config.scavenger.usecustomscavlist = setting; break; case "scavbarrel": config.scavenger.drops = setting; break; case "scavcrate": config.scavenger.crates = setting; break; case "scavuncrate": config.scavenger.uncrates = setting; break; case "scavlockedcrate": config.scavenger.lockedcrates = setting; break; case "scavhackcrate": config.scavenger.hackcrates = setting; break; case "scientists": config.scavenger.scientists = setting; break; case "scavcomponly": config.scavenger.componentsonly = setting; break; } DestroyUi(player, XPerienceAdminPanelSkills); AdminSkillsPage(player); break; case "playerdata": switch(option) { case "showinfobox": config.playerinfoBoxsettings.showinfobox = setting; break; case "alivetime": config.playerinfoBoxsettings.alivetime = setting; break; case "sleepingtime": config.playerinfoBoxsettings.sleepingtime = setting; break; case "swimmingtime": config.playerinfoBoxsettings.swimingtime = setting; break; case "drivingtime": config.playerinfoBoxsettings.drivingtime = setting; break; case "flyingtime": config.playerinfoBoxsettings.flyingtime = setting; break; case "boatingtime": config.playerinfoBoxsettings.boatingtime = setting; break; case "basetime": config.playerinfoBoxsettings.basetime = setting; break; case "monumentime": config.playerinfoBoxsettings.monumenttime = setting; break; case "wildernesstime": config.playerinfoBoxsettings.wildernesstime = setting; break; case "metersran": config.playerinfoBoxsettings.metersran = setting; break; case "meterswalked": config.playerinfoBoxsettings.meterswalked = setting; break; case "lastdmgrec": config.playerinfoBoxsettings.lastdmgrec = setting; break; case "lastdmgrecby": config.playerinfoBoxsettings.lastdmgrecby = setting; break; case "lastdmgdelt": config.playerinfoBoxsettings.lastdmgdelt = setting; break; case "lastdmgdeltto": config.playerinfoBoxsettings.lastdmgdeltto = setting; break; } DestroyUi(player, XPerienceAdminPanelInfoBox); AdminPlayerInfoPage(player); break; case "dailylimits": switch (option) { case "resetdailytimer": DailyLimit(true); foreach (var players in BasePlayer.activePlayerList) { players.ChatMessage(XPLang("dailylimitreset", players.UserIDString, config.dailytimer.dailyresettimerhours)); } break; case "dailyresettimerhours": config.dailytimer.dailyresettimerhours = (int)value; break; case "enabledailyxplimit": config.dailyxpLimit.enabledailyxplimit = setting; break; case "dailyxplimit": config.dailyxpLimit.dailyxplimit = (int)value; break; case "dailyxplimitvip": config.dailyxpLimit.dailyxplimitvip = (int)value; break; case "limitmultipliertype": config.dailyxpLimit.limitmultipliertype = (int)value; break; case "limitmultiplier": config.dailyxpLimit.limitmultiplier = (int)value; break; case "limitpercentage": config.dailyxpLimit.limitpercentage = (double)value; break; case "enabledailyresetlimit": config.dailyresetLimit.enabledailyresetlimit = setting; break; case "dailystatlimit": config.dailyresetLimit.dailystatlimit = (int)value; break; case "dailystatlimitvip": config.dailyresetLimit.dailystatlimitvip = (int)value; break; case "dailyskilllimit": config.dailyresetLimit.dailyskilllimit = (int)value; break; case "dailyskilllimitvip": config.dailyresetLimit.dailyskilllimitvip = (int)value; break; } DestroyUi(player, XPerienceAdminPanelDailyLimits); AdminDailyLimitsPage(player); break; case "timercolor": switch (option) { case "userpermissions": config.defaultOptions.userpermissions = setting; break; case "defaultliveuimoveable": config.defaultOptions.liveuistatslocationmoveable = setting; break; case "defaultliveui": config.defaultOptions.liveuistatslocation = (int)value; break; case "showchatprofile": config.defaultOptions.showchatprofileonconnect = setting; break; case "armorchat": config.defaultOptions.disablearmorchat = setting; break; case "showunusedeffects": config.defaultOptions.showunusedeffects = setting; break; case "NotifcationCooldown": config.defaultOptions.NotifcationCooldown = (int)value; break; case "defaultrestristresets": config.defaultOptions.restristresets = setting; break; case "allowrespec": config.defaultOptions.allowrespec = setting; break; case "defaultstattimer": config.defaultOptions.resetminsstats = (int)value; break; case "defaultskilltimer": config.defaultOptions.resetminsskills = (int)value; break; case "defaultvipstattimer": config.defaultOptions.vipresetminstats = (int)value; break; case "defaultvipskilltimer": config.defaultOptions.vipresetminsskills = (int)value; break; case "defaultplayerfixdata": config.defaultOptions.playerfixdatatimer = (int)value; break; case "defaultadminbypass": config.defaultOptions.bypassadminreset = setting; break; case "defaultfixdatadisable": config.defaultOptions.disableplayerfixdata = setting; break; case "defaulthardcore": config.defaultOptions.hardcorenoreset = setting; break; case "allowplayersearch": config.defaultOptions.allowplayersearch = setting; break; case "allowplayerreset": config.defaultOptions.allowplayerreset = setting; break; case "topplayersperpage": config.defaultOptions.topplayersperpage = (int)value; break; case "showonlinestatus": config.defaultOptions.showonlinestatus = setting; break; case "showfuelguage": config.defaultOptions.showfuelguage = setting; break; case "showspeedometer": config.defaultOptions.showspeedometer = setting; break; case "enabledashpanel": config.defaultOptions.enabledashpanel = setting; break; case "speedometertype": config.defaultOptions.speedometertype = (int)value; break; case "useprogressivelevelicons": config.defaultOptions.useprogressivelevelicons = setting; break; case "dropsgotoplayerinventory": config.defaultOptions.dropsgotoplayerinventory = setting; break; case "enableconfirmationprompt": config.defaultOptions.enableconfirmationprompt = setting; break; case "showchatnotifications": config.defaultOptions.showchatnotifications = setting; break; case "useplayeravatar": config.defaultOptions.useplayeravatar = setting; break; } DestroyUi(player, XPerienceAdminPanelTimerColor); AdminTimerColorPage(player); break; case "soundeffects": switch(option) { case "levelup": config.soundEffects.levelup = setting; break; case "leveldown": config.soundEffects.leveldown = setting; break; case "rankup": config.soundEffects.rankup = setting; break; case "skillup": config.soundEffects.skillup = setting; break; case "statup": config.soundEffects.statup = setting; break; case "statreset": config.soundEffects.statreset = setting; break; case "skillreset": config.soundEffects.skillreset = setting; break; case "scavengerloot": config.soundEffects.scavengerloot = setting; break; case "foragerloot": config.soundEffects.foragerloot = setting; break; } DestroyUi(player, XPerienceAdminPanelSoundEffects); AdminSoundEffectsPage(player); break; case "othermods": switch (option) { // Kill Records case "krshowbutton": config.xpBonus.showkrbutton = setting; break; case "krenable": config.xpBonus.enablebonus = setting; break; case "krrequiredkills": config.xpBonus.requiredkills = (int)value; break; case "krbonusamount": config.xpBonus.bonusxp = (double)value; break; case "krbonusend": config.xpBonus.endbonus = (int)value; break; case "krenablemulti": config.xpBonus.multibonus = setting; break; case "krmultitype": if (setting) { config.xpBonus.multibonustype = "increase"; } else { config.xpBonus.multibonustype = "fixed"; } break; // Economics case "showbalanceprofile": config.xpEcon.showbalanceprofile = setting; break; case "econlevelup": config.xpEcon.econlevelup = setting; break; case "econleveldown": config.xpEcon.econleveldown = setting; break; case "econresetstats": config.xpEcon.econresetstats = setting; break; case "econresetskills": config.xpEcon.econresetskills = setting; break; case "econresetstat": config.xpEcon.econresetstat = setting; break; case "econresetskill": config.xpEcon.econresetskill = setting; break; case "econlevelreward": config.xpEcon.econlevelreward = (int)value; break; case "econlevelreduction": config.xpEcon.econlevelreduction = (int)value; break; case "econresetstatscost": config.xpEcon.econresetstatscost = (int)value; break; case "econresetskillscost": config.xpEcon.econresetskillscost = (int)value; break; case "econresetstatcost": config.xpEcon.econresetstatcost = (int)value; break; case "econresetskillcost": config.xpEcon.econresetskillcost = (int)value; break; case "econstatlevelcost": config.xpEcon.econstatlevelcost = setting; break; case "econskilllevelcost": config.xpEcon.econskilllevelcost = setting; break; case "econskilllevelcostmultiplier": config.xpEcon.econskilllevelcostmultiplier = (double)value; break; case "econstatlevelcostmultiplier": config.xpEcon.econstatlevelcostmultiplier = (double)value; break; case "econmentality": config.xpEcon.econmentality = (double)value; break; case "econdexterity": config.xpEcon.econdexterity = (double)value; break; case "econmight": config.xpEcon.econmight = (double)value; break; case "econcaptaincy": config.xpEcon.econcaptaincy = (double)value; break; case "econweaponry": config.xpEcon.econweaponry = (double)value; break; case "econwoodcutter": config.xpEcon.econwoodcutter = (double)value; break; case "econsmithy": config.xpEcon.econsmithy = (double)value; break; case "econminer": config.xpEcon.econminer = (double)value; break; case "econforager": config.xpEcon.econforager = (double)value; break; case "econhunter": config.xpEcon.econhunter = (double)value; break; case "econfisher": config.xpEcon.econfisher = (double)value; break; case "econcrafter": config.xpEcon.econcrafter = (double)value; break; case "econframer": config.xpEcon.econframer = (double)value; break; case "econmedic": config.xpEcon.econmedic = (double)value; break; case "econscavenger": config.xpEcon.econscavenger = (double)value; break; case "econtamer": config.xpEcon.econtamer = (double)value; break; // Server Rewards case "srewardlevelup": config.sRewards.srewardlevelup = setting; break; case "srewardleveldown": config.sRewards.srewardleveldown = setting; break; case "srewardresetstats": config.sRewards.srewardresetstats = setting; break; case "srewardresetskills": config.sRewards.srewardresetskills = setting; break; case "srewardresetstat": config.sRewards.srewardresetstat = setting; break; case "srewardresetskill": config.sRewards.srewardresetskill = setting; break; case "srewardlevelupamt": config.sRewards.srewardlevelupamt = (int)value; break; case "srewardleveldownamt": config.sRewards.srewardleveldownamt = (int)value; break; case "srewardresetstatscost": config.sRewards.srewardresetstatscost = (int)value; break; case "srewardresetskillscost": config.sRewards.srewardresetskillscost = (int)value; break; case "srewardresetstatcost": config.sRewards.srewardresetstatcost = (int)value; break; case "srewardresetskillcost": config.sRewards.srewardresetskillcost = (int)value; break; case "srewardstatlevelcost": config.sRewards.srewardstatlevelcost = setting; break; case "srewardskilllevelcost": config.sRewards.srewardskilllevelcost = setting; break; case "srewardskilllevelcostmultiplier": config.sRewards.srewardskilllevelcostmultiplier = (int)value; break; case "srewardstatlevelcostmultiplier": config.sRewards.srewardstatlevelcostmultiplier = (int)value; break; case "srewardmentality": config.sRewards.srewardmentality = (int)value; break; case "srewarddexterity": config.sRewards.srewarddexterity = (int)value; break; case "srewardmight": config.sRewards.srewardmight = (int)value; break; case "srewardcaptaincy": config.sRewards.srewardcaptaincy = (int)value; break; case "srewardweaponry": config.sRewards.srewardweaponry = (int)value; break; case "srewardwoodcutter": config.sRewards.srewardwoodcutter = (int)value; break; case "srewardsmithy": config.sRewards.srewardsmithy = (int)value; break; case "srewardminer": config.sRewards.srewardminer = (int)value; break; case "srewardforager": config.sRewards.srewardforager = (int)value; break; case "srewardhunter": config.sRewards.srewardhunter = (int)value; break; case "srewardfisher": config.sRewards.srewardfisher = (int)value; break; case "srewardcrafter": config.sRewards.srewardcrafter = (int)value; break; case "srewardframer": config.sRewards.srewardframer = (int)value; break; case "srewardmedic": config.sRewards.srewardmedic = (int)value; break; case "srewardscavenger": config.sRewards.srewardscavenger = (int)value; break; case "srewardtamer": config.sRewards.srewardtamer = (int)value; break; // Clans case "enableclanbonus": config.xpclans.enableclanbonus = setting; break; case "enableclanreduction": config.xpclans.enableclanreduction = setting; break; case "clanbonusamt": config.xpclans.clanbonusamount = (double)value; break; case "clanreductionamt": config.xpclans.clanreductionamount = (double)value; break; // UI Notify case "uinotifyenable": config.UiNotifier.useuinotify = setting; break; case "uinotifydisablechats": config.UiNotifier.disablechats = setting; break; case "uinotifyxpgainloss": config.UiNotifier.xpgainloss = setting; break; case "uinotifyxpgainlosstype": config.UiNotifier.xpgainlosstype = (int)value; break; case "uinotifylevelgainloss": config.UiNotifier.levelupdown = setting; break; case "uinotifylevelgainlosstype": config.UiNotifier.levelupdowntype = (int)value; break; case "uinotifydodgeblock": config.UiNotifier.dodgeblock = setting; break; case "uinotifydodgeblocktype": config.UiNotifier.dodgeblocktype = (int)value; break; case "uinotifycritical": config.UiNotifier.criticalhit = setting; break; case "uinotifycriticaltype": config.UiNotifier.criticalhittype = (int)value; break; // Tamer case "tamerenable": config.tamer.enabletame = setting; break; case "tamermaxlevel": config.tamer.maxlvl = (int)value; break; case "tamercost": config.tamer.pointcoststart = (int)value; break; case "tamercostmultiplier": config.tamer.costmultiplier = (int)value; break; case "tamerchicken": config.tamer.tamechicken = setting; break; case "tamerboar": config.tamer.tameboar = setting; break; case "tamerstag": config.tamer.tamestag = setting; break; case "tamerwolf": config.tamer.tamewolf = setting; break; case "tamerbear": config.tamer.tamebear = setting; break; case "tamerpolarbear": config.tamer.tamepolarbear = setting; break; case "tamerchickenlevel": config.tamer.chickenlevel = (int)value; break; case "tamerboarlevel": config.tamer.boarlevel = (int)value; break; case "tamerstaglevel": config.tamer.staglevel = (int)value; break; case "tamerwolflevel": config.tamer.wolflevel = (int)value; break; case "tamerbearlevel": config.tamer.bearlevel = (int)value; break; case "tamerpolarbearlevel": config.tamer.polarbearlevel = (int)value; break; // Archery case "archenabled": config.archerymod.enablearchery = setting; break; case "archrank": config.archerymod.rankrequired = setting; break; case "archranklevel": config.archerymod.ranklevel = (int)value; break; case "archstatorskill": switch((int)value) { case 1: config.archerymod.statorskill = "Mentality"; break; case 2: config.archerymod.statorskill = "Dexterity"; break; case 3: config.archerymod.statorskill = "Might"; break; case 4: config.archerymod.statorskill = "Captaincy"; break; case 5: config.archerymod.statorskill = "WoodCutter"; break; case 6: config.archerymod.statorskill = "Smithy"; break; case 7: config.archerymod.statorskill = "Miner"; break; case 8: config.archerymod.statorskill = "Forager"; break; case 9: config.archerymod.statorskill = "Hunter"; break; case 10: config.archerymod.statorskill = "Fisher"; break; case 11: config.archerymod.statorskill = "Crafter"; break; case 12: config.archerymod.statorskill = "Framer"; break; case 13: config.archerymod.statorskill = "Medic"; break; case 14: config.archerymod.statorskill = "Scavenger"; break; case 15: config.archerymod.statorskill = "Weaponry"; break; } break; case "archnovice": config.archerymod.novicelevel = (int)value; break; case "archadept": config.archerymod.adeptlevel = (int)value; break; case "archmaster": config.archerymod.masterlevel = (int)value; break; case "archremove": config.archerymod.removeonunload = setting; break; // Wizardry case "wizenabled": config.wizardrymod.enablewizardry = setting; break; case "wizrank": config.wizardrymod.rankrequired = setting; break; case "wizranklevel": config.wizardrymod.ranklevel = (int)value; break; case "wizstatorskill": switch ((int)value) { case 1: config.wizardrymod.statorskill = "Mentality"; break; case 2: config.wizardrymod.statorskill = "Dexterity"; break; case 3: config.wizardrymod.statorskill = "Might"; break; case 4: config.wizardrymod.statorskill = "Captaincy"; break; case 5: config.wizardrymod.statorskill = "WoodCutter"; break; case 6: config.wizardrymod.statorskill = "Smithy"; break; case 7: config.wizardrymod.statorskill = "Miner"; break; case 8: config.wizardrymod.statorskill = "Forager"; break; case 9: config.wizardrymod.statorskill = "Hunter"; break; case 10: config.wizardrymod.statorskill = "Fisher"; break; case 11: config.wizardrymod.statorskill = "Crafter"; break; case 12: config.wizardrymod.statorskill = "Framer"; break; case 13: config.wizardrymod.statorskill = "Medic"; break; case 14: config.wizardrymod.statorskill = "Scavenger"; break; case 15: config.wizardrymod.statorskill = "Weaponry"; break; } break; case "wiznovice": config.wizardrymod.novicelevel = (int)value; break; case "wizadept": config.wizardrymod.adeptlevel = (int)value; break; case "wizmaster": config.wizardrymod.masterlevel = (int)value; break; case "wizremove": config.wizardrymod.removeonunload = setting; break; case "backpacksenable": config.backpacksmod.enablebackpacks = setting; break; case "backpackstatorskill": switch ((int)value) { case 1: config.backpacksmod.statorskill = "Mentality"; break; case 2: config.backpacksmod.statorskill = "Dexterity"; break; case 3: config.backpacksmod.statorskill = "Might"; break; case 4: config.backpacksmod.statorskill = "Captaincy"; break; case 5: config.backpacksmod.statorskill = "WoodCutter"; break; case 6: config.backpacksmod.statorskill = "Smithy"; break; case 7: config.backpacksmod.statorskill = "Miner"; break; case 8: config.backpacksmod.statorskill = "Forager"; break; case 9: config.backpacksmod.statorskill = "Hunter"; break; case 10: config.backpacksmod.statorskill = "Fisher"; break; case 11: config.backpacksmod.statorskill = "Crafter"; break; case 12: config.backpacksmod.statorskill = "Framer"; break; case 13: config.backpacksmod.statorskill = "Medic"; break; case 14: config.backpacksmod.statorskill = "Scavenger"; break; case 15: config.backpacksmod.statorskill = "Weaponry"; break; } break; case "backpack1": config.backpacksmod.backpackrow1 = (int)value; break; case "backpack2": config.backpacksmod.backpackrow2 = (int)value; break; case "backpack3": config.backpacksmod.backpackrow3 = (int)value; break; case "backpack4": config.backpacksmod.backpackrow4 = (int)value; break; case "backpack5": config.backpacksmod.backpackrow5 = (int)value; break; case "backpack6": config.backpacksmod.backpackrow6 = (int)value; break; case "backpack7": config.backpacksmod.backpackrow7 = (int)value; break; case "backpack8": config.backpacksmod.backpackrow8 = (int)value; break; case "backpackremove": config.backpacksmod.removeonunload = setting; break; } DestroyUi(player, XPerienceAdminPanelOtherMods); AdminOtherModsPage(player, mod); break; case "sql": switch (option) { case "sqlenable": config.sql.enablesql = setting; break; case "sqlhost": config.sql.SQLhost = arg.GetString(2); break; case "sqlport": config.sql.SQLport = (int)value; break; } DestroyUi(player, XPerienceAdminPanelSQL); AdminSQLPage(player); break; case "reset": switch (option) { case "resetconfig": player.ChatMessage(XPLang("adminresetconfig", player.UserIDString)); LoadDefaultConfig(); SaveConfig(); DestroyUi(player, XPerienceAdminPanelReset); AdminResetPage(player); break; case "resetall": if (!player.IsAdmin && !permission.UserHasPermission(player.UserIDString, Admin)) return; _xperienceCache.Clear(); _lootCache.Clear(); _XPerienceData.Clear(); _LootContainData.Clear(); _corpseCache.Clear(); _CorpseContainData.Clear(); CheckOnlineStatus(); SaveData(); SaveLoot(); SaveCorpse(); if (config.sql.enablesql) { DeleteSQL(); } if (XPerienceAddon != null) { XPerienceAddon.Call("xpglobalremove", player); XPerienceAddon.Call("Xpaddonremove", player); XPerienceAddon.Call("Xpaddonupdate", player); } player.ChatMessage(XPLang("resetxperience", player.UserIDString)); Interface.Oxide.ReloadPlugin("XPerience"); break; case "resetalllevels": PlayerAllLevelReset(player); CheckOnlineStatus(); SaveData(); SaveLoot(); SaveCorpse(); if (XPerienceAddon != null) { XPerienceAddon.Call("xpglobalremove", player); XPerienceAddon.Call("Xpaddonremove", player); XPerienceAddon.Call("Xpaddonupdate", player); } break; case "resetallranks": PlayerAllRankReset(player); CheckOnlineStatus(); SaveData(); SaveLoot(); SaveCorpse(); if (XPerienceAddon != null) { XPerienceAddon.Call("xpglobalremove", player); XPerienceAddon.Call("Xpaddonremove", player); XPerienceAddon.Call("Xpaddonupdate", player); } break; case "resetallkr": KillRecords.Call("AdminKRReset", player); break; case "resetnewsave": config.defaultOptions.wipedataonnewsave = setting; break; case "fix": PlayerFixDataAll(player); break; } DestroyUi(player, XPerienceAdminPanelReset); AdminResetPage(player); break; } } [ConsoleCommand("xp.color")] private void Cmdadminxpcolors(ConsoleSystem.Arg arg) { var player = arg.Player(); if (player == null) return; if (!player.IsAdmin && !permission.UserHasPermission(player.UserIDString, Admin)) return; string option = arg.GetString(0); string color = arg.GetString(1); switch (option) { case "defaultuicolor": config.uitextColor.defaultcolor = color; break; case "ranknameuicolor": config.uitextColor.rankname = color; break; case "rankleveluicolor": config.uitextColor.ranklevel = color; break; case "rankxpuicolor": config.uitextColor.rankxp = color; break; case "leveluicolor": config.uitextColor.level = color; break; case "xpuicolor": config.uitextColor.experience = color; break; case "nextlvluicolor": config.uitextColor.nextlevel = color; break; case "remainuicolor": config.uitextColor.remainingxp = color; break; case "ssluicolor": config.uitextColor.statskilllevels = color; break; case "perksuicolor": config.uitextColor.perks = color; break; case "upointsuicolor": config.uitextColor.unspentpoints = color; break; case "spointsuicolor": config.uitextColor.spentpoints = color; break; case "petsuicolor": config.uitextColor.pets = color; break; case "mentality": config.uitextColor.mentality = color; break; case "dexterity": config.uitextColor.dexterity = color; break; case "might": config.uitextColor.might = color; break; case "captaincy": config.uitextColor.captaincy = color; break; case "weaponry": config.uitextColor.weaponry = color; break; case "woodcutter": config.uitextColor.woodcutter = color; break; case "smithy": config.uitextColor.smithy = color; break; case "miner": config.uitextColor.miner = color; break; case "forager": config.uitextColor.forager = color; break; case "hunter": config.uitextColor.hunter = color; break; case "fisher": config.uitextColor.fisher = color; break; case "crafter": config.uitextColor.crafter = color; break; case "framer": config.uitextColor.framer = color; break; case "medic": config.uitextColor.medic = color; break; case "scavenger": config.uitextColor.scavenger = color; break; case "electrician": config.uitextColor.electrician = color; break; case "tamer": config.uitextColor.tamer = color; break; case "xpbar": config.uitextColor.xpbar = color; break; case "armorbar": config.uitextColor.armorbar = color; break; } DestroyUi(player, XPerienceAdminPanelTimerColor); AdminTimerColorPage(player); } [ConsoleCommand("xp.electrician")] private void Cmdadminxpelectrician(ConsoleSystem.Arg arg) { var player = arg.Player(); if (player == null) return; if (!player.IsAdmin && !permission.UserHasPermission(player.UserIDString, Admin)) return; string option = arg.GetString(0); double value = Convert.ToDouble(arg.GetString(1)); bool setting = Convert.ToBoolean(arg.GetString(2)); string mod = arg.GetString(3); switch (option) { case "solarpaneldefault": config.electrician.solarpaneldefault = (int)value; break; case "smallbatterydefault": config.electrician.smallbatterydefault = (int)value; break; case "mediumbatterydefault": config.electrician.mediumbatterydefault = (int)value; break; case "largebatterydefault": config.electrician.largebatterydefault = (int)value; break; case "smallgeneratordefault": config.electrician.smallgeneratordefault = (int)value; break; case "electricwindmilldefault": config.electrician.electricwindmilldefault = (int)value; break; } DestroyUi(player, XPerienceAdminPanelElectricianSettings); AdminElectricianSettings(player); } // Control Panels private void AdminControlPanel(BasePlayer player) { if (player == null) return; if (!player.IsAdmin && !permission.UserHasPermission(player.UserIDString, Admin)) return; var ControlPanelelements = new CuiElementContainer(); var height = 0.035f; // Main Screen ControlPanelelements.Add(new CuiPanel { Image = { Color = "0.1 0.1 0.1 0.99" }, RectTransform = { AnchorMin = $"0.0 0.0", AnchorMax = $"1.0 1.0" }, CursorEnabled = true }, "Overlay", XPerienceAdminPanelMain); // Top Label ControlPanelelements.Add(XPUILabel($"ⓍⓅerience {XPLang("adminpanel", player.UserIDString)}:", 1, 0.060f, TextAnchor.MiddleLeft, 20, "0.01", "0.18", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelMain); ControlPanelelements.Add(new CuiElement { Parent = XPerienceAdminPanelMain, Components = { new CuiRawImageComponent { Png = ImageLibrary?.Call("GetImage", XPerienceicon) }, new CuiRectTransformComponent { AnchorMin = "0.01 0.75", AnchorMax = "0.15 0.95" } } }); // Spacer int row = 5; // Navigation Menu ControlPanelelements.Add(XPUIPanel("0.0 0.0", "0.15 0.85", "1.0 1.0 1.0 0.0"), XPerienceAdminPanelMain, XPerienceAdminPanelMenu); ControlPanelelements.Add(XPUIButton("xp.admin mystats", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_014", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; row++; ControlPanelelements.Add(XPUIButton("xp.admin main", row, height, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_001", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; ControlPanelelements.Add(XPUIButton("xp.admin levelxp", row, height + 0.001f, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_002", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; ControlPanelelements.Add(XPUIButton("xp.admin ranks", row, height + 0.0018f, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_020", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; ControlPanelelements.Add(XPUIButton("xp.admin dailylimits", row, height + 0.0024f, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_018", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; ControlPanelelements.Add(XPUIButton("xp.admin stats", row, height + 0.0028f, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_003", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; ControlPanelelements.Add(XPUIButton("xp.admin skills", row, height + 0.0032f, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_004", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; ControlPanelelements.Add(XPUIButton("xp.admin playerdata", row, height + 0.0036f, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_016", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; ControlPanelelements.Add(XPUIButton("xp.admin timercolor", row, height + 0.0040f, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_005", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; ControlPanelelements.Add(XPUIButton("xp.admin othermods main", row, height + 0.0044f, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_012", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; ControlPanelelements.Add(XPUIButton("xp.admin soundeffects", row, height + 0.0048f, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_021", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; ControlPanelelements.Add(XPUIButton("xp.admin calculationslevels 0 0", row, height + 0.0052f, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_019", player.UserIDString)} (beta)", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; ControlPanelelements.Add(XPUIButton("xp.admin sql", row, height + 0.0056f, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_006", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; row++; ControlPanelelements.Add(XPUIButton("xp.admin addon", row, height + 0.006f, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_017", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; row++; ControlPanelelements.Add(XPUIButton("xp.admin reload", row, height + 0.0064f, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_008", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; ControlPanelelements.Add(XPUIButton("xp.admin close", row, height + 0.0068f, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_009", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); row++; ControlPanelelements.Add(XPUIButton("xp.admin reset", row, height + 0.0072f, 18, "0.0 0.0 0.0 0.7", $"{XPLang("adminmenu_013", player.UserIDString)}", "0.03", "1", TextAnchor.MiddleCenter), XPerienceAdminPanelMenu); CuiHelper.AddUi(player, ControlPanelelements); return; } private void AdminInfoPage(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelInfo); ControlPanelelements.Add(new CuiElement { Parent = XPerienceAdminPanelInfo, Components = { new CuiRawImageComponent { Png = ImageLibrary?.Call("GetImage", XPeriencelogo) }, new CuiRectTransformComponent { AnchorMin = "0.43 0.70", AnchorMax = "0.57 0.90" } } }); ControlPanelelements.Add(new CuiLabel { Text = { Text = $"{XPLang("adminpanelinfonew", player.UserIDString)}", FontSize = 18, Align = TextAnchor.UpperCenter, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.02 0.0", AnchorMax = "0.98 0.70" } }, XPerienceAdminPanelInfo); CuiHelper.AddUi(player, ControlPanelelements); return; } private void AdminLevelPage(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.023f; int arrowsize = 14; int row = 4; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"{XPLang("adminxp_001", player.UserIDString)}", 1, 0.090f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); // Main Level Settings #region main ControlPanelelements.Add(XPUILabel($"{XPLang("adminxp_002", player.UserIDString)}", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); row++; // Level Start ControlPanelelements.Add(XPUILabel($"{XPLang("adminxp_003", player.UserIDString)}", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpLevel.levelstart}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp levelstart {config.xpLevel.levelstart + 5} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp levelstart {config.xpLevel.levelstart - 5} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Level Multiplier row++; ControlPanelelements.Add(XPUILabel($"XP Requirement Increase:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpLevel.levelmultiplier}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp levelmultiplier {config.xpLevel.levelmultiplier + 5} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp levelmultiplier {config.xpLevel.levelmultiplier - 5} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Max Level row++; ControlPanelelements.Add(XPUILabel($"Max Level:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpLevel.maxlevel}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp levelmax {config.xpLevel.maxlevel + 10} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp levelmax {config.xpLevel.maxlevel - 10} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Level XP Boost row++; ControlPanelelements.Add(XPUILabel($"Level XP Boost:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpLevel.levelxpboost * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp levelxpboost {config.xpLevel.levelxpboost + 0.01} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp levelxpboost {config.xpLevel.levelxpboost - 0.01} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Stat Points Per LVL row++; ControlPanelelements.Add(XPUILabel($"Stat Points Per LVL:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpLevel.statpointsperlvl}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp statpointsperlvl {config.xpLevel.statpointsperlvl + 1} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp statpointsperlvl {config.xpLevel.statpointsperlvl - 1} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Skill Points Per LVL row++; ControlPanelelements.Add(XPUILabel($"Skill Points Per LVL:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpLevel.skillpointsperlvl}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp skillpointsperlvl {config.xpLevel.skillpointsperlvl + 1} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp skillpointsperlvl {config.xpLevel.skillpointsperlvl - 1} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Always Earn XP row++; ControlPanelelements.Add(XPUILabel($"Earn XP Past Max Level:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpLevel.alwaysearnxp}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp alwaysearnxp 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp alwaysearnxp 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); #endregion // Night Bonus Settings #region night row++; row++; ControlPanelelements.Add(XPUILabel($"[Night Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); // Enable / Disable row++; ControlPanelelements.Add(XPUILabel($"Enable Night Bonus:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.nightBonus.Enable}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp nightenable 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp nightenable 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Start Time row++; ControlPanelelements.Add(XPUILabel($"Start Time:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.nightBonus.StartTime}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp nightstart {config.nightBonus.StartTime + 1} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp nightstart {config.nightBonus.StartTime - 1} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // End Time row++; ControlPanelelements.Add(XPUILabel($"End Time:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.nightBonus.EndTime}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp nightend {config.nightBonus.EndTime + 1} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp nightend {config.nightBonus.EndTime - 1} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Bonus Amount row++; ControlPanelelements.Add(XPUILabel($"Bonus Percent:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.nightBonus.Bonus * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp nightbonus {config.nightBonus.Bonus + 0.1} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp nightbonus {config.nightBonus.Bonus - 0.1} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Enable Skill Boost row++; ControlPanelelements.Add(XPUILabel($"Enable Night Skills:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.nightBonus.enableskillboosts}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp nightskill 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp nightskill 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); #endregion // XP Boost Settings #region XP Boost row++; row++; ControlPanelelements.Add(XPUILabel($"[XP Boost Settings] (xperience.xpboost)", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); // Enable XP Boost row++; ControlPanelelements.Add(XPUILabel($"Enable XP Boost Permission:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.enablexpboost}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp enablexpboost 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp enablexpboost 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // XP Boost Amount row++; ControlPanelelements.Add(XPUILabel($"XP Boost Amount:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.xpboostamount * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp xpboostamount {config.xpGain.xpboostamount + 0.01} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp xpboostamount {config.xpGain.xpboostamount - 0.01} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Boost Order row++; var xpboostorder = ""; switch(config.xpGain.xpboostorder) { case 1: xpboostorder = "first"; break; case 2: xpboostorder = "last"; break; } ControlPanelelements.Add(XPUILabel($"Boost Order (Before other boosts or after):", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {xpboostorder}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp xpboostorder 1 false", row, height, 12, "0.0 1.0 0.0 0", "F", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp xpboostorder 2 false", row, height, 12, "1.0 0.0 0.0 0", "L", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); #endregion // XP Reduce Settings #region Reductions row++; row++; ControlPanelelements.Add(XPUILabel($"[XP Reducer Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); // Enable Suicide Reduction row++; ControlPanelelements.Add(XPUILabel($"Enable Suicide Reduction:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpReducer.suicidereduce}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp suicide 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp suicide 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Suicide Reduction Amount row++; ControlPanelelements.Add(XPUILabel($"Suicide Reduction Percent:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpReducer.suicidereduceamount * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp suicideamt {config.xpReducer.suicidereduceamount + 0.01} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp suicideamt {config.xpReducer.suicidereduceamount - 0.01} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Enable Death Reduction row++; ControlPanelelements.Add(XPUILabel($"Enable Death Reduction:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpReducer.deathreduce}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp death 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp death 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Death Reduction Amount row++; ControlPanelelements.Add(XPUILabel($"Death Reduction Percent:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpReducer.deathreduceamount * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp deathamt {config.xpReducer.deathreduceamount + 0.01} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp deathamt {config.xpReducer.deathreduceamount - 0.01} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); #endregion // Mission Settings #region Missions row++; row++; ControlPanelelements.Add(XPUILabel($"[Mission XP Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); // Mission Succeeded row++; ControlPanelelements.Add(XPUILabel($"Mission Succeeded:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpMissions.missionsucceededxp}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp missionsucceeded {config.xpMissions.missionsucceededxp + 1} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp missionsucceeded {config.xpMissions.missionsucceededxp - 1} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Enable Mission Failed row++; ControlPanelelements.Add(XPUILabel($"Enable Failed Reduction:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpMissions.missionfailed}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp missionfailed 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp missionfailed 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Mission Failed row++; ControlPanelelements.Add(XPUILabel($"Failed Reduction Amount:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpMissions.missionfailedxp}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp missionfailedxp {config.xpMissions.missionfailedxp + 1} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp missionfailedxp {config.xpMissions.missionfailedxp - 1} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); #endregion // Teams Settings #region Teams row++; row++; ControlPanelelements.Add(XPUILabel($"[Team XP Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); // Team XP Gain row++; ControlPanelelements.Add(XPUILabel($"Enable Team XP Gain:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpTeams.enableteamxpgain}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp enableteamxpgain 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp enableteamxpgain 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Team XP Loss row++; ControlPanelelements.Add(XPUILabel($"Enable Team XP Loss:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpTeams.enableteamxploss}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp enableteamxploss 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp enableteamxploss 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Team Gain Amount row++; ControlPanelelements.Add(XPUILabel($"Team XP Gain:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpTeams.teamxpgainamount * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp teamxpgainamt {config.xpTeams.teamxpgainamount + 0.01} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp teamxpgainamt {config.xpTeams.teamxpgainamount - 0.01} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Team Loss Amount row++; ControlPanelelements.Add(XPUILabel($"Team XP Loss:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpTeams.teamxplossamount * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp teamxplossamt {config.xpTeams.teamxplossamount + 0.01} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp teamxplossamt {config.xpTeams.teamxplossamount - 0.01} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Team Distance row++; ControlPanelelements.Add(XPUILabel($"Team Distance (feet):", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpTeams.teamdistance}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp teamdistance {config.xpTeams.teamdistance + 1} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp teamdistance {config.xpTeams.teamdistance - 1} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); #endregion // XP Gathering/Looting #region XP Gather/Loot int rowtwo = 4; ControlPanelelements.Add(XPUILabel($"[XP Gathering/Looting Settings]", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.33", "0.66", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); rowtwo++; // Loot Containers ControlPanelelements.Add(XPUILabel($"General Loot Containers:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.lootcontainerxp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp loot {config.xpGain.lootcontainerxp + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp loot {config.xpGain.lootcontainerxp - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Loot Barrrels rowtwo++; ControlPanelelements.Add(XPUILabel($"Loot Barrels:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.lootbarrel}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp lootbarrel {config.xpGain.lootbarrel + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp lootbarrel {config.xpGain.lootbarrel - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Oil Barrrels rowtwo++; ControlPanelelements.Add(XPUILabel($"Oil Barrels:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.oilbarrel}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp oilbarrel {config.xpGain.oilbarrel + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp oilbarrel {config.xpGain.oilbarrel - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Normal Crates rowtwo++; ControlPanelelements.Add(XPUILabel($"Normal Crates:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.normalcrate}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp normalcrate {config.xpGain.normalcrate + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp normalcrate {config.xpGain.normalcrate - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Elite Crates rowtwo++; ControlPanelelements.Add(XPUILabel($"Elite Crates:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.elitecrate}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp elitecrate {config.xpGain.elitecrate + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp elitecrate {config.xpGain.elitecrate - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Tool Crates rowtwo++; ControlPanelelements.Add(XPUILabel($"Tool Crates:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.toolcrate}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp toolcrate {config.xpGain.toolcrate + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp toolcrate {config.xpGain.toolcrate - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Food Crates rowtwo++; ControlPanelelements.Add(XPUILabel($"Food Crates:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.foodcrate}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp foodcrate {config.xpGain.foodcrate + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp foodcrate {config.xpGain.foodcrate - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Vehicle Parts rowtwo++; ControlPanelelements.Add(XPUILabel($"Vehicle Parts:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.vehicleparts}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp vehicleparts {config.xpGain.vehicleparts + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp vehicleparts {config.xpGain.vehicleparts - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Underwater Loot rowtwo++; ControlPanelelements.Add(XPUILabel($"Underwater Loot Containers:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.underwaterlootcontainerxp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp lootu {config.xpGain.underwaterlootcontainerxp + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp lootu {config.xpGain.underwaterlootcontainerxp - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Locked Crate rowtwo++; ControlPanelelements.Add(XPUILabel($"Locked Crate:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.lockedcratexp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp lootlocked {config.xpGain.lockedcratexp + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp lootlocked {config.xpGain.lockedcratexp - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Hackable Crate rowtwo++; ControlPanelelements.Add(XPUILabel($"Hackable Crate:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.hackablecratexp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp loothacked {config.xpGain.hackablecratexp + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp loothacked {config.xpGain.hackablecratexp - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Animal Harvest rowtwo++; ControlPanelelements.Add(XPUILabel($"Animal Harvest:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.animalharvestxp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp aharvest {config.xpGain.animalharvestxp + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp aharvest {config.xpGain.animalharvestxp - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Corpse Harvest rowtwo++; ControlPanelelements.Add(XPUILabel($"Corpse Harvest:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.corpseharvestxp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp charvest {config.xpGain.corpseharvestxp + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp charvest {config.xpGain.corpseharvestxp - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Tree rowtwo++; ControlPanelelements.Add(XPUILabel($"Tree:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGather.treexp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp tree {config.xpGather.treexp + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp tree {config.xpGather.treexp - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // General Ore rowtwo++; ControlPanelelements.Add(XPUILabel($"General Ore:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGather.orexp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp ore {config.xpGather.orexp + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp ore {config.xpGather.orexp - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Metal Ore rowtwo++; ControlPanelelements.Add(XPUILabel($"Metal Ore:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGather.metalorexp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp metalorexp {config.xpGather.metalorexp + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp metalorexp {config.xpGather.metalorexp - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Sulfur Ore rowtwo++; ControlPanelelements.Add(XPUILabel($"Sulfur Ore:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGather.sulfurorexp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sulfurorexp {config.xpGather.sulfurorexp + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sulfurorexp {config.xpGather.sulfurorexp - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Stone Ore rowtwo++; ControlPanelelements.Add(XPUILabel($"Stone Ore:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGather.stoneorexp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp stoneorexp {config.xpGather.stoneorexp + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp stoneorexp {config.xpGather.stoneorexp - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Harvest rowtwo++; ControlPanelelements.Add(XPUILabel($"Gathering:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGather.harvestxp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp harvest {config.xpGather.harvestxp + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp harvest {config.xpGather.harvestxp - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Plant rowtwo++; ControlPanelelements.Add(XPUILabel($"Plants:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGather.plantxp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp plant {config.xpGather.plantxp + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp plant {config.xpGather.plantxp - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Tool XP Chance rowtwo++; ControlPanelelements.Add(XPUILabel($"Tool XP Chance:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGather.toolxpchance * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp toolxpchance {config.xpGather.toolxpchance + 0.01} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp toolxpchance {config.xpGather.toolxpchance - 0.01} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Tool XP Percent rowtwo++; ControlPanelelements.Add(XPUILabel($"Tool XP Percent:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGather.toolxppercent * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp toolxppercent {config.xpGather.toolxppercent + 0.01} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp toolxppercent {config.xpGather.toolxppercent - 0.01} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // One Time XP rowtwo++; ControlPanelelements.Add(XPUILabel($"Only Give XP At End:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGather.onetimexp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp onetimexp 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp onetimexp 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Disable Tool XP rowtwo++; ControlPanelelements.Add(XPUILabel($"Disable Power Tool Gains:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGather.noxptools}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp noxptools 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp noxptools 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); #endregion // XP Crafting/Building #region Craft/Build rowtwo++; rowtwo++; ControlPanelelements.Add(XPUILabel($"[XP Crafting/Building Settings]", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.33", "0.66", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); // Crafting XP Delay Enable rowtwo++; ControlPanelelements.Add(XPUILabel($"Delay Crafting XP:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.craftingxpdelay}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp craftxpdelay 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp craftxpdelay 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Crafting XP Delay Seconds rowtwo++; ControlPanelelements.Add(XPUILabel($"Delay XP Seconds:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.craftingxpdelayseconds}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp craftxpdelayseconds {config.xpGain.craftingxpdelayseconds + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp craftxpdelayseconds {config.xpGain.craftingxpdelayseconds - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Crafting rowtwo++; ControlPanelelements.Add(XPUILabel($"Crafting:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.craftingxp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp crafting {config.xpGain.craftingxp + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp crafting {config.xpGain.craftingxp - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Require Building Privlidge rowtwo++; ControlPanelelements.Add(XPUILabel($"Require Building Privlidge:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpBuilding.requirebuildingprivlidge}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp requirebuildingprivlidge 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp requirebuildingprivlidge 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Twig Building rowtwo++; ControlPanelelements.Add(XPUILabel($"Twig Structure:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpBuilding.twigstructure}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp twigbuild {config.xpBuilding.twigstructure + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp twigbuild {config.xpBuilding.twigstructure - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Wood Building rowtwo++; ControlPanelelements.Add(XPUILabel($"Wood Structure:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpBuilding.woodstructure}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp woodbuild {config.xpBuilding.woodstructure + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp woodbuild {config.xpBuilding.woodstructure - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Stone Building rowtwo++; ControlPanelelements.Add(XPUILabel($"Stone Structure:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpBuilding.stonestructure}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp stonebuild {config.xpBuilding.stonestructure + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp stonebuild {config.xpBuilding.stonestructure - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Metal Building rowtwo++; ControlPanelelements.Add(XPUILabel($"Metal Structure:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpBuilding.metalstructure}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp metalbuild {config.xpBuilding.metalstructure + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp metalbuild {config.xpBuilding.metalstructure - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Armor Building rowtwo++; ControlPanelelements.Add(XPUILabel($"Armor Structure:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpBuilding.armoredstructure}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp armorbuild {config.xpBuilding.armoredstructure + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp armorbuild {config.xpBuilding.armoredstructure - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Building XP Delay Enable if (BuildingGrades != null) { rowtwo++; ControlPanelelements.Add(XPUILabel($"BuildingGrades Mod Detected", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); // Prevent BG XP rowtwo++; ControlPanelelements.Add(XPUILabel($"No XP with /up:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpBuilding.preventBGxp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp preventBGxp 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp preventBGxp 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Building XP Delay Enable rowtwo++; ControlPanelelements.Add(XPUILabel($"Delay Building XP:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpBuilding.buildxpdelay}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp buildxpdelay 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp buildxpdelay 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Building XP Delay Seconds rowtwo++; ControlPanelelements.Add(XPUILabel($"Delay XP Seconds:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpBuilding.buildxpdelayseconds}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp buildxpdelayseconds {config.xpBuilding.buildxpdelayseconds + 1} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp buildxpdelayseconds {config.xpBuilding.buildxpdelayseconds - 1} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Reduce XP rowtwo++; ControlPanelelements.Add(XPUILabel($"Reduce XP on Downgrade:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpBuilding.reducexp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp reducexp 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp reducexp 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Reduce XP Amount rowtwo++; ControlPanelelements.Add(XPUILabel($"Reduce XP Amount:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpBuilding.buildxpreduction * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp buildxpreduction {config.xpBuilding.buildxpreduction + 0.01} false", rowtwo, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp buildxpreduction {config.xpBuilding.buildxpreduction - 0.01} false", rowtwo, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); } #endregion // XP Kill Settings #region XP Kills int rowthree = 4; ControlPanelelements.Add(XPUILabel($"[XP Kill Settings]", rowthree, height, TextAnchor.MiddleLeft, 15, "0.66", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); // Chicken rowthree++; ControlPanelelements.Add(XPUILabel($"Chicken:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.chickenxp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp chicken {config.xpGain.chickenxp + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp chicken {config.xpGain.chickenxp - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Fish rowthree++; ControlPanelelements.Add(XPUILabel($"Fish:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.fishxp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp fish {config.xpGain.fishxp + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp fish {config.xpGain.fishxp - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Boar rowthree++; ControlPanelelements.Add(XPUILabel($"Boar:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.boarxp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp boar {config.xpGain.boarxp + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp boar {config.xpGain.boarxp - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Stag rowthree++; ControlPanelelements.Add(XPUILabel($"Stag:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.stagxp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp stag {config.xpGain.stagxp + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp stag {config.xpGain.stagxp - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Wolf rowthree++; ControlPanelelements.Add(XPUILabel($"Wolf:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.wolfxp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp wolf {config.xpGain.wolfxp + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp wolf {config.xpGain.wolfxp - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Bear rowthree++; ControlPanelelements.Add(XPUILabel($"Bear:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.bearxp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp bear {config.xpGain.bearxp + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp bear {config.xpGain.bearxp - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // PolarBear rowthree++; ControlPanelelements.Add(XPUILabel($"PolarBear:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.polarbearxp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp polarbear {config.xpGain.polarbearxp + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp polarbear {config.xpGain.polarbearxp - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Shark rowthree++; ControlPanelelements.Add(XPUILabel($"Shark:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.sharkxp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp shark {config.xpGain.sharkxp + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp shark {config.xpGain.sharkxp - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Horse rowthree++; ControlPanelelements.Add(XPUILabel($"Horse:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.horsexp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp horse {config.xpGain.horsexp + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp horse {config.xpGain.horsexp - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Scientist General rowthree++; ControlPanelelements.Add(XPUILabel($"General Scientist:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.scientistxp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp scientist {config.xpGain.scientistxp + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp scientist {config.xpGain.scientistxp - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Scientist Cargo rowthree++; ControlPanelelements.Add(XPUILabel($"Cargo Scientist:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.sc_cargo}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_cargo {config.xpGain.sc_cargo + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_cargo {config.xpGain.sc_cargo - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Scientist Full rowthree++; ControlPanelelements.Add(XPUILabel($"Full Scientist:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.sc_full}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_full {config.xpGain.sc_full + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_full {config.xpGain.sc_full - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Scientist Heavy rowthree++; ControlPanelelements.Add(XPUILabel($"Heavy Scientist:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.sc_heavy}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_heavy {config.xpGain.sc_heavy + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_heavy {config.xpGain.sc_heavy - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Scientist Junkpile rowthree++; ControlPanelelements.Add(XPUILabel($"Junkpile Scientist:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.sc_junkpile}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_junkpile {config.xpGain.sc_junkpile + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_junkpile {config.xpGain.sc_junkpile - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Scientist Oilrig rowthree++; ControlPanelelements.Add(XPUILabel($"Oilrig Scientist:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.sc_oilrig}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_oilrig {config.xpGain.sc_oilrig + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_oilrig {config.xpGain.sc_oilrig - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Scientist Patrol rowthree++; ControlPanelelements.Add(XPUILabel($"Patrol Scientist:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.sc_patrol}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_patrol {config.xpGain.sc_patrol + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_patrol {config.xpGain.sc_patrol - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Scientist PeaceKeeper rowthree++; ControlPanelelements.Add(XPUILabel($"PeaceKeeper Scientist:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.sc_peacekeeper}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_peacekeeper {config.xpGain.sc_peacekeeper + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_peacekeeper {config.xpGain.sc_peacekeeper - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Scientist Roam rowthree++; ControlPanelelements.Add(XPUILabel($"Roam Scientist:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.sc_roam}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_roam {config.xpGain.sc_roam + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp sc_roam {config.xpGain.sc_roam - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // General Dweller rowthree++; ControlPanelelements.Add(XPUILabel($"General Dweller:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.dwellerxp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp dweller {config.xpGain.dwellerxp + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp dweller {config.xpGain.dwellerxp - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Tunnel Dweller rowthree++; ControlPanelelements.Add(XPUILabel($"Tunnel Dweller:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.tunneldwellerxp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp tunneldwellerxp {config.xpGain.tunneldwellerxp + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp tunneldwellerxp {config.xpGain.tunneldwellerxp - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Underwater Dweller rowthree++; ControlPanelelements.Add(XPUILabel($"Underwater Dweller:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.underwaterdwellerxp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp underwaterdwellerxp {config.xpGain.underwaterdwellerxp + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp underwaterdwellerxp {config.xpGain.underwaterdwellerxp - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Scarecrownpc rowthree++; ControlPanelelements.Add(XPUILabel($"Scare Crow:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.scarecrownpc}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp scarecrownpc {config.xpGain.scarecrownpc + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp scarecrownpc {config.xpGain.scarecrownpc - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Custom NPCs rowthree++; ControlPanelelements.Add(XPUILabel($"Custom NPCs:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.customnpc}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp customnpc {config.xpGain.customnpc + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp customnpc {config.xpGain.customnpc - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Zombie NPCs rowthree++; ControlPanelelements.Add(XPUILabel($"Custom Zombie NPCs:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.zombienpc}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp zombienpc {config.xpGain.zombienpc + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp zombienpc {config.xpGain.zombienpc - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Player rowthree++; ControlPanelelements.Add(XPUILabel($"Player:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.playerxp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp player {config.xpGain.playerxp + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp player {config.xpGain.playerxp - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Bradley rowthree++; ControlPanelelements.Add(XPUILabel($"Bradley:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.bradley}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp bradley {config.xpGain.bradley + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp bradley {config.xpGain.bradley - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Heli rowthree++; ControlPanelelements.Add(XPUILabel($"Patrol Helicopter:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.patrolhelicopter}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp heli {config.xpGain.patrolhelicopter + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp heli {config.xpGain.patrolhelicopter - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Allow Turrets rowthree++; ControlPanelelements.Add(XPUILabel($"Allow AutoTurret XP:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.allowturretxp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp turretallow 0 true", rowthree, height, 12, "0.0 1.0 0.0 0", "T", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp turretallow 0 false", rowthree, height, 12, "1.0 0.0 0.0 0", "F", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Turrets rowthree++; ControlPanelelements.Add(XPUILabel($"Auto Turrets:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.turretxp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp turret {config.xpGain.turretxp + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp turret {config.xpGain.turretxp - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); #endregion // Seasonal #region Seasonal rowthree++; rowthree++; ControlPanelelements.Add(XPUILabel($"[Seasonal Settings]", rowthree, height, TextAnchor.MiddleLeft, 15, "0.66", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); // Gift Loot rowthree++; ControlPanelelements.Add(XPUILabel($"Gift Loot:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.gifts}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp gifts {config.xpGain.gifts + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp gifts {config.xpGain.gifts - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Open Small Gift rowthree++; ControlPanelelements.Add(XPUILabel($"Open Small Gift:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.opengifts}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp opengifts {config.xpGain.opengifts + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp opengifts {config.xpGain.opengifts - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Open Medium Gift rowthree++; ControlPanelelements.Add(XPUILabel($"Open Medium Gift:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.opengiftsmed}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp opengiftsmed {config.xpGain.opengiftsmed + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp opengiftsmed {config.xpGain.opengiftsmed - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Open Large Gift rowthree++; ControlPanelelements.Add(XPUILabel($"Open Large Gift:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.opengiftslarge}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp opengiftslarge {config.xpGain.opengiftslarge + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp opengiftslarge {config.xpGain.opengiftslarge - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Upgrade Medium Gift rowthree++; ControlPanelelements.Add(XPUILabel($"Upgrade To Medium Gift:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.upgradegiftsmed}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp upgradegiftsmed {config.xpGain.upgradegiftsmed + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp upgradegiftsmed {config.xpGain.upgradegiftsmed - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); // Upgrade Large Gift rowthree++; ControlPanelelements.Add(XPUILabel($"Upgrade To Large Gift:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUILabel($"| {config.xpGain.upgradegiftslarge}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.88", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp upgradegiftslarge {config.xpGain.upgradegiftslarge + 1} false", rowthree, height, arrowsize, "0.0 1.0 0.0 0", "⇧", "0.88", "0.89", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelLevelXP); ControlPanelelements.Add(XPUIButton($"xp.config levelxp upgradegiftslarge {config.xpGain.upgradegiftslarge - 1} false", rowthree, height, arrowsize, "1.0 0.0 0.0 0", "⇩", "0.90", "0.91", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelLevelXP); #endregion CuiHelper.AddUi(player, ControlPanelelements); return; } private void AdminRanksPage(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); #region Layout var height = 0.025f; int arrowsize = 16; int row = 1; int rowtwo = 1; string lableL = "0.01"; string lableR = "0.20"; string valueL = "0.20"; string valueR = "0.25"; string setting1L = "0.26"; string setting1R = "0.27"; string setting2L = "0.28"; string setting2R = "0.29"; #endregion ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelRanks); // Rank Settings #region Rank Settings int maxranks = config.xpLevelRanks.ranks.Count - 1; row++; ControlPanelelements.Add(XPUILabel($"[Rank Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); // Enable Ranks row++; row++; ControlPanelelements.Add(XPUILabel($"Enable Prestige Ranks:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.enableresetranks}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks enableranks 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks enableranks 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Reset Stats/Skills row++; ControlPanelelements.Add(XPUILabel($"Reset All Stats/Skills", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.resetallstatsskills}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks resetallstatsskills 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks resetallstatsskills 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Allow Player Disable row++; ControlPanelelements.Add(XPUILabel($"Allow Players to Disable:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.allowplayerdisable}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks playerdisable 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks playerdisable 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Keep Group on Ranks row++; ControlPanelelements.Add(XPUILabel($"Keep Previous Rank Groups:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.keepgrouponrank}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks keepgrouponrank 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks keepgrouponrank 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Show Ranks in Chat row++; ControlPanelelements.Add(XPUILabel($"Show Rank Tag in Chat:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.showrankinchat}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks showrankinchat 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks showrankinchat 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Show Ranks in LiveUI row++; ControlPanelelements.Add(XPUILabel($"Show Rank in LiveUI:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.showrankinliveui}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks showrankinliveui 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks showrankinliveui 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Max Rank row++; ControlPanelelements.Add(XPUILabel($"Max Prestige Rank:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.maxresetrank}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.maxresetrank < maxranks) { ControlPanelelements.Add(XPUIButton($"xp.config ranks maxrank {config.xpLevelRanks.maxresetrank + 1} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); } if (config.xpLevelRanks.maxresetrank > 0) { ControlPanelelements.Add(XPUIButton($"xp.config ranks maxrank {config.xpLevelRanks.maxresetrank - 1} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } // Enable Increase XP Requirement row++; ControlPanelelements.Add(XPUILabel($"Increase Level XP Requirement:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.increaselevelmultiplier}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks increaselevelmultiplier 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks increaselevelmultiplier 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Rank XP Requirement Increase row++; ControlPanelelements.Add(XPUILabel($"XP Requirement Increase Amount:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.levelmultiplierincrease}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks levelmultiplierincrease {config.xpLevelRanks.levelmultiplierincrease + 1} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks levelmultiplierincrease {config.xpLevelRanks.levelmultiplierincrease - 1} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Enable Rank XP Boost row++; ControlPanelelements.Add(XPUILabel($"Enable Rank XP Boost:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.enablerankxpboost}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks enablerankxpboost 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks enablerankxpboost 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Rank XP Boost row++; ControlPanelelements.Add(XPUILabel($"Rank XP Boost Amount:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.rankxpboost * 100}%", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankxpboost {config.xpLevelRanks.rankxpboost + 0.01} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankxpboost {config.xpLevelRanks.rankxpboost - 0.01} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Enable Rank Stat Boost row++; ControlPanelelements.Add(XPUILabel($"Enable Rank Stats Boost:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.rankstatboost}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankstatboost 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankstatboost 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Rank Stat Boost row++; ControlPanelelements.Add(XPUILabel($"Rank Stats Boost Amount:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.rankstatboostamount * 100}%", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankstatboostamt {config.xpLevelRanks.rankstatboostamount + 0.01} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankstatboostamt {config.xpLevelRanks.rankstatboostamount - 0.01} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Rank Stat Point Start row++; ControlPanelelements.Add(XPUILabel($"Rank Stats Points Start:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.rankstatpointstart}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankstatpointstart {config.xpLevelRanks.rankstatpointstart + 1} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankstatpointstart {config.xpLevelRanks.rankstatpointstart - 1} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Rank Stat Points row++; ControlPanelelements.Add(XPUILabel($"Rank Stats Points Increase:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.rankstatpointincrease}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankstatpoints {config.xpLevelRanks.rankstatpointincrease + 1} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankstatpoints {config.xpLevelRanks.rankstatpointincrease - 1} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Enable Rank Skill Boost row++; ControlPanelelements.Add(XPUILabel($"Enable Rank Skills Boost:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.rankskillboost}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankskillboost 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankskillboost 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Rank Skill Boost row++; ControlPanelelements.Add(XPUILabel($"Rank Skills Boost Amount:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.rankskillboostamount * 100}%", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankskillboostamt {config.xpLevelRanks.rankskillboostamount + 0.01} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankskillboostamt {config.xpLevelRanks.rankskillboostamount - 0.01} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Rank Skill Point Start row++; ControlPanelelements.Add(XPUILabel($"Rank Skills Points Start:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.rankskillpointstart}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankskillpointstart {config.xpLevelRanks.rankskillpointstart + 1} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankskillpointstart {config.xpLevelRanks.rankskillpointstart - 1} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Rank Skill Points row++; ControlPanelelements.Add(XPUILabel($"Rank Skills Points Increase:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.rankskillpointincrease}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankskillpoints {config.xpLevelRanks.rankskillpointincrease + 1} false", row, height, arrowsize, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks rankskillpoints {config.xpLevelRanks.rankskillpointincrease - 1} false", row, height, arrowsize, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Show Rank TrueLevel row++; ControlPanelelements.Add(XPUILabel($"Show Rank Level:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.showtruelevelprofile}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks truelevels 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks truelevels 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); // Show Rank TrueXP row++; ControlPanelelements.Add(XPUILabel($"Show Rank XP:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.xpLevelRanks.showtruexpprofile}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks truexp 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks truexp 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); #endregion // Rank options #region Rank Options // Stats row++; row++; ControlPanelelements.Add(XPUILabel($"[Rank Options] Stat Effects", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); row++; row++; ControlPanelelements.Add(XPUILabel($"Mentality Research Cost:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.researchcost}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankstatboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks researchcost 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks researchcost 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } row++; ControlPanelelements.Add(XPUILabel($"Mentality Research Speed:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.researchspeed}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankstatboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks researchspeed 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks researchspeed 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } row++; ControlPanelelements.Add(XPUILabel($"Dexterity Block:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.block}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankstatboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks block 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks block 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } row++; ControlPanelelements.Add(XPUILabel($"Dexterity Armor:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.armor}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankstatboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks armor 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks armor 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } row++; ControlPanelelements.Add(XPUILabel($"Captaincy Effective Distance:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.distance}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankstatboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks distance 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks distance 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } row++; ControlPanelelements.Add(XPUILabel($"Might Melee Damage:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.meleedmg}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankstatboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks meleedmg 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks meleedmg 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } row++; ControlPanelelements.Add(XPUILabel($"Might Metabolism:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.metabolism}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankstatboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks metabolism 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks metabolism 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } // Skills rowtwo++; ControlPanelelements.Add(XPUILabel($"[Rank Options] Skill Effects", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.33", "0.56", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); rowtwo++; rowtwo++; ControlPanelelements.Add(XPUILabel($"WoodCutter Gather Rate:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.woodcuttergr}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks woodcuttergr 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks woodcuttergr 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"WoodCutter Bonus Amount:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.woodcutterbonus}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks woodcutterbonus 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks woodcutterbonus 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Smithy Production Rate:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.smithypr}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks smithypr 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks smithypr 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Smithy Production Speed:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.smithyps}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks smithyps 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks smithyps 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Smithy Fuel Consumption:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.smithyfc}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks smithyfc 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks smithyfc 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Smithy HQ Metal Chance:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.smithyhqmc}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks smithyhqmc 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks smithyhqmc 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Smithy HQ Metal Amount:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.smithyhqma}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks smithyhqma 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks smithyhqma 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Miner Gather Rate:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.minergr}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks minergr 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks minergr 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Miner Bonus Amount:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.minerbonus}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks minerbonus 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks minerbonus 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Miner Fuel Consumption:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.minerfuel}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks minerfuel 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks minerfuel 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Miner Metal Frament Chance:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.minermfc}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks minermfc 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks minermfc 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Miner Metal Frament Amount:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.minermfa}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks minermfa 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks minermfa 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Fisher Fish Amount:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.fisherfa}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks fisherfa 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks fisherfa 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Fisher Item Amount:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.fisheria}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks fisheria 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks fisheria 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Fisher Oxygen Tank Reduction:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.fisherotr}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks fisherotr 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks fisherotr 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Forager Gather Rate:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.foragergr}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks foragergr 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks foragergr 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Forager Grub/Worm Chance:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.foragergwa}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks foragergwa 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks foragergwa 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Forager Random Item Chance:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.foragerric}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks foragerric 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks foragerric 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Hunter Gather Rate:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.huntergr}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks huntergr 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks huntergr 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Hunter Bonus Amount:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.hunterbonus}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks hunterbonus 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks hunterbonus 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Hunter Damage Increase (wildlife):", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.hunterdmg}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks hunterdmg 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks hunterdmg 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Hunter Night Damage Increase:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.hunterndmg}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks hunterndmg 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks hunterndmg 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Crafter Crafting Speed:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.crafterspeed}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks crafterspeed 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks crafterspeed 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Crafter Crafting Cost:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.craftercost}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks craftercost 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks craftercost 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Crafter Repair Increase:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.crafterri}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks crafterri 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks crafterri 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Crafter Repair Cost:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.crafterrc}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks crafterrc 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks crafterrc 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Crafter Condition Chance:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.craftercc}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks craftercc 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks craftercc 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Crafter Condition Amount:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.crafterca}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks crafterca 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks crafterca 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Framer Upgrade Cost:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.framerucost}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks framerucost 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks framerucost 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Framer Repair Cost:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.framerrcost}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks framerrcost 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks framerrcost 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Medic Revival Amount:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.medicrevivala}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks medicrevivala 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks medicrevivala 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Medic Recover Amount:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.medicrecovera}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks medicrecovera 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks medicrecovera 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Medic Tools:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.medictools}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks medictools 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks medictools 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Scavenger Extra Loot Chance:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.scavelc}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks scavelc 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks scavelc 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Scavenger Extra Loot Multiplier:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.scavelm}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks scavelm 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks scavelm 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Scavenger Custom Item Chance:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.scavcic}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks scavcic 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks scavcic 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } rowtwo++; ControlPanelelements.Add(XPUILabel($"Scavenger Custom Item Multiplier:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUILabel($"| {config.Rankboostssettings.scavcim}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelRanks); if (config.xpLevelRanks.rankskillboost) { ControlPanelelements.Add(XPUIButton($"xp.config ranks scavcim 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelRanks); ControlPanelelements.Add(XPUIButton($"xp.config ranks scavcim 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelRanks); } #endregion // End CuiHelper.AddUi(player, ControlPanelelements); return; } private void AdminDailyLimitsPage(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.027f; int row = 4; string lableL = "0.01"; string lableR = "0.20"; string valueL = "0.20"; string valueR = "0.25"; string setting1L = "0.26"; string setting1R = "0.27"; string setting2L = "0.28"; string setting2R = "0.29"; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUILabel($"Daily Limit Settings", 1, 0.090f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); // Daily Timer #region Daily Timer row++; row++; ControlPanelelements.Add(XPUILabel($"[Daily Limit Reset]", row, height, TextAnchor.MiddleLeft, 15, "0.01", valueL, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); // Last Reset /* row++; var lastdailyreset = DateTime.Now - config.dailytimer.lastdailyreset; double lastdailyresethours = Math.Round(double.Parse(lastdailyreset.Minutes.ToString()) / 60, 1); string dailytimerlabel = "hours"; if (lastdailyresethours < 1) { lastdailyresethours = int.Parse(lastdailyreset.Minutes.ToString()); dailytimerlabel = "mins"; } ControlPanelelements.Add(XPUILabel($"Last Daily Reset:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUILabel($"| {lastdailyresethours} {dailytimerlabel} ago", row, height, TextAnchor.MiddleLeft, 12, valueL, setting2R, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); */ // Timer Hours row++; ControlPanelelements.Add(XPUILabel($"Daily Limit Reset Every {config.dailytimer.dailyresettimerhours} Hours:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUILabel($"| {config.dailytimer.dailyresettimerhours}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); if (config.dailytimer.dailyresettimerhours < 24) { ControlPanelelements.Add(XPUIButton($"xp.config dailylimits dailyresettimerhours {config.dailytimer.dailyresettimerhours + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); } if (config.dailytimer.dailyresettimerhours > 1) { ControlPanelelements.Add(XPUIButton($"xp.config dailylimits dailyresettimerhours {config.dailytimer.dailyresettimerhours - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); } row++; row++; ControlPanelelements.Add(XPUIButton($"xp.config dailylimits resetdailytimer 0 true", row, height, 13, "0 0 0 1", "Reset ALL Player Limits", lableL, lableR, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); #endregion // Daily XP Limit Settings #region Daily XP Limits row++; row++; ControlPanelelements.Add(XPUILabel($"[XP Limit Settings] (Players with VIP Overide Special Groups)", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.5", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); // Enable Daily Limit row++; ControlPanelelements.Add(XPUILabel($"Enable Daily XP Limit:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUILabel($"| {config.dailyxpLimit.enabledailyxplimit}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits enabledailyxplimit 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits enabledailyxplimit 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); // Daily Limit Default string deflimit = config.dailyxpLimit.dailyxplimit.ToString(); if (deflimit == "0") { deflimit = "∞"; } row++; ControlPanelelements.Add(XPUILabel($"Daily Limit Default:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUILabel($"| {deflimit}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits dailyxplimit {config.dailyxpLimit.dailyxplimit + 100} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); if (config.dailyxpLimit.dailyxplimit > 0) { ControlPanelelements.Add(XPUIButton($"xp.config dailylimits dailyxplimit {config.dailyxpLimit.dailyxplimit - 100} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); } // Daily Limit VIP string viplimit = config.dailyxpLimit.dailyxplimitvip.ToString(); if (viplimit == "0") { viplimit = "∞"; } row++; ControlPanelelements.Add(XPUILabel($"Daily Limit VIP:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUILabel($"| {viplimit}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits dailyxplimitvip {config.dailyxpLimit.dailyxplimitvip + 100} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); if (config.dailyxpLimit.dailyxplimitvip > 0) { ControlPanelelements.Add(XPUIButton($"xp.config dailylimits dailyxplimitvip {config.dailyxpLimit.dailyxplimitvip - 100} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); } // Multiplier Type string multipliertype = "%"; if(config.dailyxpLimit.limitmultipliertype == 1) { multipliertype = "%"; } if(config.dailyxpLimit.limitmultipliertype == 2) { multipliertype = "X"; } row++; ControlPanelelements.Add(XPUILabel($"Daily Limit Multiplier Type:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUILabel($"| {multipliertype}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits limitmultipliertype 1 false", row, height, 12, "0.0 1.0 0.0 0", "%", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits limitmultipliertype 2 false", row, height, 12, "1.0 0.0 0.0 0", "X", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); // Multiplier Value if (config.dailyxpLimit.limitmultipliertype == 1) { row++; ControlPanelelements.Add(XPUILabel($"Percentage Amount Per Level:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUILabel($"| {config.dailyxpLimit.limitpercentage * 100}%", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits limitpercentage {config.dailyxpLimit.limitpercentage + 0.01} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits limitpercentage {config.dailyxpLimit.limitpercentage - 0.01} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); row++; row++; if (config.dailyxpLimit.dailyxplimit > 0) { ControlPanelelements.Add(XPUILabel($"Default: {config.dailyxpLimit.dailyxplimit} + (({config.dailyxpLimit.dailyxplimit} * {config.dailyxpLimit.limitpercentage}) * level)", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); } else { ControlPanelelements.Add(XPUILabel($"Default: Unlimited", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); } row++; if (config.dailyxpLimit.dailyxplimitvip > 0) { ControlPanelelements.Add(XPUILabel($"VIP: {config.dailyxpLimit.dailyxplimitvip} + (({config.dailyxpLimit.dailyxplimitvip} * {config.dailyxpLimit.limitpercentage}) * level)", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); } else { ControlPanelelements.Add(XPUILabel($"VIP: Unlimited", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); } } if (config.dailyxpLimit.limitmultipliertype == 2) { row++; ControlPanelelements.Add(XPUILabel($"Multiplier Amount Per Level:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUILabel($"| {config.dailyxpLimit.limitmultiplier}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits limitmultiplier {config.dailyxpLimit.limitmultiplier + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits limitmultiplier {config.dailyxpLimit.limitmultiplier - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); row++; row++; if (config.dailyxpLimit.dailyxplimit > 0) { ControlPanelelements.Add(XPUILabel($"Default Value: {config.dailyxpLimit.dailyxplimit} + (({config.dailyxpLimit.dailyxplimit} * {config.dailyxpLimit.limitmultiplier}) * level)", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); } else { ControlPanelelements.Add(XPUILabel($"Default Value: Unlimited", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); } row++; if (config.dailyxpLimit.dailyxplimitvip > 0) { ControlPanelelements.Add(XPUILabel($"VIP Value: {config.dailyxpLimit.dailyxplimitvip} + (({config.dailyxpLimit.dailyxplimitvip} * {config.dailyxpLimit.limitmultiplier}) * level)", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); } else { ControlPanelelements.Add(XPUILabel($"VIP Value: Unlimited", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); } } #endregion // Daily Stat & Skill Reset Limits #region Daily Stat & Skill row++; row++; ControlPanelelements.Add(XPUILabel($"[Stat & Skill Limit Settings] (Players with VIP Overide Special Groups)", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.5", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); // Enable Daily Limit row++; ControlPanelelements.Add(XPUILabel($"Enable Daily Reset Limits:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUILabel($"| {config.dailyresetLimit.enabledailyresetlimit}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits enabledailyresetlimit 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits enabledailyresetlimit 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); // Daily Stat Limit Default string defstatlimit = config.dailyresetLimit.dailystatlimit.ToString(); if (defstatlimit == "0") { defstatlimit = "∞"; } row++; ControlPanelelements.Add(XPUILabel($"Daily Stats Reset Limit Default:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUILabel($"| {defstatlimit}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits dailystatlimit {config.dailyresetLimit.dailystatlimit + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); if (config.dailyresetLimit.dailystatlimit > 0) { ControlPanelelements.Add(XPUIButton($"xp.config dailylimits dailystatlimit {config.dailyresetLimit.dailystatlimit - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); } // Daily Stat Limit VIP string vipstatlimit = config.dailyresetLimit.dailystatlimitvip.ToString(); if (vipstatlimit == "0") { vipstatlimit = "∞"; } row++; ControlPanelelements.Add(XPUILabel($"Daily Stats Reset Limit VIP:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUILabel($"| {vipstatlimit}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits dailystatlimitvip {config.dailyresetLimit.dailystatlimitvip + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); if (config.dailyresetLimit.dailystatlimitvip > 0) { ControlPanelelements.Add(XPUIButton($"xp.config dailylimits dailystatlimitvip {config.dailyresetLimit.dailystatlimitvip - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); } // Daily Skill Limit Default string defskilllimit = config.dailyresetLimit.dailyskilllimit.ToString(); if (defskilllimit == "0") { defskilllimit = "∞"; } row++; ControlPanelelements.Add(XPUILabel($"Daily Skill Reset Limit Default:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUILabel($"| {defskilllimit}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits dailyskilllimit {config.dailyresetLimit.dailyskilllimit + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); if (config.dailyresetLimit.dailyskilllimit > 0) { ControlPanelelements.Add(XPUIButton($"xp.config dailylimits dailyskilllimit {config.dailyresetLimit.dailyskilllimit - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); } // Daily Skill Limit VIP string vipskilllimit = config.dailyresetLimit.dailyskilllimitvip.ToString(); if (vipskilllimit == "0") { vipskilllimit = "∞"; } row++; ControlPanelelements.Add(XPUILabel($"Daily Stats Reset Limit VIP:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUILabel($"| {vipskilllimit}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelDailyLimits); ControlPanelelements.Add(XPUIButton($"xp.config dailylimits dailyskilllimitvip {config.dailyresetLimit.dailyskilllimitvip + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); if (config.dailyresetLimit.dailyskilllimitvip > 0) { ControlPanelelements.Add(XPUIButton($"xp.config dailylimits dailyskilllimitvip {config.dailyresetLimit.dailyskilllimitvip - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelDailyLimits); } #endregion // End CuiHelper.AddUi(player, ControlPanelelements); return; } private void AdminStatsPage(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.027f; int row = 4; var mentmaxlevel = "off"; var dexmaxlevel = "off"; var mightmaxlevel = "off"; var captmaxlevel = "off"; var weaponrymaxlevel = "off"; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"Stat Settings - Note that these settings are what players gain per level of each stat.", 1, 0.090f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Mentality Settings #region Mentality ControlPanelelements.Add(XPUILabel($"[Mentality Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"Max (Level / Rank)", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); row++; // Max Level if (config.mentality.maxlvl > 0) { mentmaxlevel = config.mentality.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {mentmaxlevel}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalitymaxlevel {config.mentality.maxlvl + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); if (config.mentality.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config stats mentalitymaxlevel {config.mentality.maxlvl - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); } // Cost to Start row++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.mentality.pointcoststart}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalitycost {config.mentality.pointcoststart + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalitycost {config.mentality.pointcoststart - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); // Cost Multiplier row++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.mentality.costmultiplier}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalitycostmultiplier {config.mentality.costmultiplier + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalitycostmultiplier {config.mentality.costmultiplier - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); // Enable / Disable Tech Tree row++; ControlPanelelements.Add(XPUILabel($"Lock Tech Tree:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.mentality.locktechtree}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalitylocktechtree 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalitylocktechtree 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); // Tech Tree Level if (config.mentality.locktechtree) { row++; ControlPanelelements.Add(XPUILabel($"Tech Tree Level Requirement:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); if (config.mentality.unlocktechtreelevel == 0) { ControlPanelelements.Add(XPUILabel($"| Locked", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); } else { ControlPanelelements.Add(XPUILabel($"| {config.mentality.unlocktechtreelevel}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); } if (config.mentality.unlocktechtreelevel < config.mentality.maxlvl) { ControlPanelelements.Add(XPUIButton($"xp.config stats mentalityunlocktechtreelevel {config.mentality.unlocktechtreelevel + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); } if (config.mentality.unlocktechtreelevel > 0) { ControlPanelelements.Add(XPUIButton($"xp.config stats mentalityunlocktechtreelevel {config.mentality.unlocktechtreelevel - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); } } // Research Cost row++; ControlPanelelements.Add(XPUILabel($"Research Cost Reduction:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.mentality.researchcost * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalityresearchcost {config.mentality.researchcost + 0.01} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalityresearchcost {config.mentality.researchcost - 0.01} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.mentality.researchcost * config.mentality.maxlvl * 100}% / {((config.mentality.researchcost * config.mentality.maxlvl) + (config.xpLevelRanks.rankstatboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Research Speed row++; ControlPanelelements.Add(XPUILabel($"Research Speed Reduction:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.mentality.researchspeed * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalityresearchspeed {config.mentality.researchspeed + 0.01} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalityresearchspeed {config.mentality.researchspeed - 0.01} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.mentality.researchspeed * config.mentality.maxlvl * 100}% / {((config.mentality.researchspeed * config.mentality.maxlvl) + (config.xpLevelRanks.rankstatboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Critical Chance row++; ControlPanelelements.Add(XPUILabel($"Critical Chance Percent:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.mentality.criticalchance * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalitycriticalchance {config.mentality.criticalchance + 0.01} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalitycriticalchance {config.mentality.criticalchance - 0.01} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.mentality.criticalchance * config.mentality.maxlvl * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Damage PVP / NPC row++; ControlPanelelements.Add(XPUILabel($"Damage Increase to NPCs:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.mentality.damageincrease * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalitydamagepvpnpc {config.mentality.damageincrease + 0.01} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalitydamagepvpnpc {config.mentality.damageincrease - 0.01} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.mentality.damageincrease * config.mentality.maxlvl * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Enable / Disable Research row++; ControlPanelelements.Add(XPUILabel($"Use Other Research Mod:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.mentality.useotherresearchmod}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalityothermod 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mentalityothermod 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); #endregion // Dexterity Settings #region Dexterity row++; row++; ControlPanelelements.Add(XPUILabel($"[Dexterity Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); row++; // Max Level if (config.dexterity.maxlvl > 0) { dexmaxlevel = config.dexterity.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {dexmaxlevel}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats dexteritymaxlevel {config.dexterity.maxlvl + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); if(config.dexterity.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config stats dexteritymaxlevel {config.dexterity.maxlvl - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); } // Cost to Start row++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.dexterity.pointcoststart}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats dexteritycost {config.dexterity.pointcoststart + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats dexteritycost {config.dexterity.pointcoststart - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); // Cost Multiplier row++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.dexterity.costmultiplier}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats dexteritycostmultiplier {config.dexterity.costmultiplier + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats dexteritycostmultiplier {config.dexterity.costmultiplier - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); // Block Chance row++; ControlPanelelements.Add(XPUILabel($"Block Chance Percent:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.dexterity.blockchance * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats dexterityblock {config.dexterity.blockchance + 0.01} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats dexterityblock {config.dexterity.blockchance - 0.01} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.dexterity.blockchance * config.dexterity.maxlvl * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Block Amount row++; ControlPanelelements.Add(XPUILabel($"Block Amount Percent:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.dexterity.blockamount * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats dexterityblockamt {config.dexterity.blockamount + 0.01} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats dexterityblockamt {config.dexterity.blockamount - 0.01} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.dexterity.blockamount * config.dexterity.maxlvl * 100}% / {((config.dexterity.blockamount * config.dexterity.maxlvl) + (config.xpLevelRanks.rankstatboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Dodge Chance row++; ControlPanelelements.Add(XPUILabel($"Dodge Chance Percent:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.dexterity.dodgechance * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats dexteritydodge {config.dexterity.dodgechance + 0.01} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats dexteritydodge {config.dexterity.dodgechance - 0.01} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.dexterity.dodgechance * config.dexterity.maxlvl * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Armor Damage row++; ControlPanelelements.Add(XPUILabel($"Armor Damage Reduction:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.dexterity.reducearmordmg * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats dexterityarmor {config.dexterity.reducearmordmg + 0.01} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats dexterityarmor {config.dexterity.reducearmordmg - 0.01} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.dexterity.reducearmordmg * config.dexterity.maxlvl * 100}% / {((config.dexterity.reducearmordmg * config.dexterity.maxlvl) + (config.xpLevelRanks.rankstatboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Horse Speed row++; ControlPanelelements.Add(XPUILabel($"Horse Speed:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.dexterity.horsespeed * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats horsespeed {config.dexterity.horsespeed + 0.01} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats horsespeed {config.dexterity.horsespeed - 0.01} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.dexterity.horsespeed * config.dexterity.maxlvl * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Boat Speed row++; ControlPanelelements.Add(XPUILabel($"Boat Speed:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.dexterity.boatspeed * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats boatspeed {config.dexterity.boatspeed + 0.01} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats boatspeed {config.dexterity.boatspeed - 0.01} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.dexterity.boatspeed * config.dexterity.maxlvl * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Vehicle Speed row++; ControlPanelelements.Add(XPUILabel($"Vehicle Speed:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.dexterity.vehiclespeed * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats vehiclespeed {config.dexterity.vehiclespeed + 0.01} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats vehiclespeed {config.dexterity.vehiclespeed - 0.01} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.dexterity.vehiclespeed * config.dexterity.maxlvl * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Fuel Reduce row++; ControlPanelelements.Add(XPUILabel($"Fuel Reduction Chance:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.dexterity.fuelreduce * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats fuelreduce {config.dexterity.fuelreduce + 0.01} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats fuelreduce {config.dexterity.fuelreduce - 0.01} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.dexterity.fuelreduce * config.dexterity.maxlvl * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); #endregion // Captaincy Settings #region Captaincy row++; row++; ControlPanelelements.Add(XPUILabel($"[Captaincy Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); row++; // Max Level if (config.captaincy.maxlvl > 0) { captmaxlevel = config.captaincy.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {captmaxlevel}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats captaincymaxlevel {config.captaincy.maxlvl + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); if (config.captaincy.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config stats captaincymaxlevel {config.captaincy.maxlvl - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); } // Cost to Start row++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.captaincy.pointcoststart}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats captaincycost {config.captaincy.pointcoststart + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats captaincycost {config.captaincy.pointcoststart - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); // Cost Multiplier row++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.captaincy.costmultiplier}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats captaincycostmultiplier {config.captaincy.costmultiplier + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats captaincycostmultiplier {config.captaincy.costmultiplier - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); // Allow No Team row++; ControlPanelelements.Add(XPUILabel($"Allow No Team:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.captaincy.allownoteam}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats allownoteam 0 true", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats allownoteam 0 false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); // Effective Distance row++; ControlPanelelements.Add(XPUILabel($"Effective Distance (feet):", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.captaincy.captaincydistance}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats captaincydistance {config.captaincy.captaincydistance + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats captaincydistance {config.captaincy.captaincydistance - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.captaincy.captaincydistance * config.captaincy.maxlvl} / {((config.captaincy.captaincydistance * config.captaincy.maxlvl) + (config.xpLevelRanks.rankstatboostamount * config.xpLevelRanks.maxresetrank))}", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Skill Boost row++; ControlPanelelements.Add(XPUILabel($"Team Skill Boost:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.captaincy.skillboost * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats captaincyskillboost {config.captaincy.skillboost + 0.01} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats captaincyskillboost {config.captaincy.skillboost - 0.01} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.captaincy.skillboost * config.captaincy.maxlvl * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Enable XP Boost row++; ControlPanelelements.Add(XPUILabel($"Enable Team XP Boost:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.captaincy.enablexpboost}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats captaincyenablexpboost 0 true", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats captaincyenablexpboost 0 false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); // XP Boost row++; ControlPanelelements.Add(XPUILabel($"Team XP Boost:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.captaincy.xpboost * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats captaincyxpboost {config.captaincy.xpboost + 0.01} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats captaincyxpboost {config.captaincy.xpboost - 0.01} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.captaincy.xpboost * config.captaincy.maxlvl * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); #endregion // Might #region Might int rowtwo = 4; ControlPanelelements.Add(XPUILabel($"[Might Settings]", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.33", "0.55", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"Max (Level / Rank)", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Max Level rowtwo++; if (config.might.maxlvl > 0) { mightmaxlevel = config.might.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {mightmaxlevel}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightmaxlevel {config.might.maxlvl + 1} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); if (config.might.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config stats mightmaxlevel {config.might.maxlvl - 1} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); } // Max Cost to Start rowtwo++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.might.pointcoststart}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightcost {config.might.pointcoststart + 1} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightcost {config.might.pointcoststart - 1} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); // Cost Multiplier rowtwo++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.might.costmultiplier}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightcostmultiplier {config.might.costmultiplier + 1} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightcostmultiplier {config.might.costmultiplier - 1} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); // Armor rowtwo++; ControlPanelelements.Add(XPUILabel($"Armor:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.might.armor * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightarmor {config.might.armor + 0.01} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightarmor {config.might.armor - 0.01} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.might.armor * config.might.maxlvl * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Melee Dmg rowtwo++; ControlPanelelements.Add(XPUILabel($"Melee Damage Increase:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.might.meleedmg * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightmelee {config.might.meleedmg + 0.01} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightmelee {config.might.meleedmg - 0.01} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.might.meleedmg * config.might.maxlvl * 100}% / {((config.might.meleedmg * config.might.maxlvl) + (config.xpLevelRanks.rankstatboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Metabolism rowtwo++; ControlPanelelements.Add(XPUILabel($"Metabolism (Hunger/Thirst):", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.might.metabolism * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightmeta {config.might.metabolism + 0.01} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightmeta {config.might.metabolism - 0.01} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.might.metabolism * config.might.maxlvl * 100}% / {((config.might.metabolism * config.might.maxlvl) + (config.xpLevelRanks.rankstatboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Bleeding rowtwo++; ControlPanelelements.Add(XPUILabel($"Bleed Reduction:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.might.bleedreduction * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightbleed {config.might.bleedreduction + 0.01} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightbleed {config.might.bleedreduction - 0.01} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.might.bleedreduction * config.might.maxlvl * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Radiation rowtwo++; ControlPanelelements.Add(XPUILabel($"Radiation Reduction:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.might.radreduction * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightrad {config.might.radreduction + 0.01} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightrad {config.might.radreduction - 0.01} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.might.bleedreduction * config.might.maxlvl * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Heat rowtwo++; ControlPanelelements.Add(XPUILabel($"Heat Reduction:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.might.heattolerance * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightheat {config.might.heattolerance + 0.01} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightheat {config.might.heattolerance - 0.01} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.might.heattolerance * config.might.maxlvl * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Cold rowtwo++; ControlPanelelements.Add(XPUILabel($"Cold Reduction:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.might.coldtolerance * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightcold {config.might.coldtolerance + 0.01} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats mightcold {config.might.coldtolerance - 0.01} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.might.coldtolerance * config.might.maxlvl * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); #endregion // Weaponry #region Weaponry rowtwo++; rowtwo++; ControlPanelelements.Add(XPUILabel($"[Weaponry Settings]", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.33", "0.55", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Max Level rowtwo++; if (config.weaponry.maxlvl > 0) { weaponrymaxlevel = config.weaponry.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {weaponrymaxlevel}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrymaxlevel {config.weaponry.maxlvl + 1} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); if (config.weaponry.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrymaxlevel {config.weaponry.maxlvl - 1} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); } // Max Cost to Start rowtwo++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.weaponry.pointcoststart}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrycost {config.weaponry.pointcoststart + 1} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrycost {config.weaponry.pointcoststart - 1} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); // Cost Multiplier rowtwo++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.weaponry.costmultiplier}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrycostmultiplier {config.weaponry.costmultiplier + 1} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrycostmultiplier {config.weaponry.costmultiplier - 1} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); // Reduction Chance rowtwo++; ControlPanelelements.Add(XPUILabel($"Condition Reduction Chance:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.weaponry.reductionchance * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrychance {config.weaponry.reductionchance + 0.05} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrychance {config.weaponry.reductionchance - 0.05} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.weaponry.reductionchance * config.weaponry.maxlvl * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Tools rowtwo++; ControlPanelelements.Add(XPUILabel($"Tool Condition Reduction:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.weaponry.tool * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrytools {config.weaponry.tool + 0.01} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrytools {config.weaponry.tool - 0.01} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.weaponry.tool * config.weaponry.maxlvl * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Power Tools rowtwo++; ControlPanelelements.Add(XPUILabel($"Power Tool Condition Reduction:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.weaponry.powertools * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrypowertools {config.weaponry.powertools + 0.01} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrypowertools {config.weaponry.powertools - 0.01} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.weaponry.powertools * config.weaponry.maxlvl * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Melee Weapons rowtwo++; ControlPanelelements.Add(XPUILabel($"Melee Weapon Condition Reduction:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.weaponry.meleeweapons * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrymeleeweapons {config.weaponry.meleeweapons + 0.01} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrymeleeweapons {config.weaponry.meleeweapons - 0.01} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.weaponry.meleeweapons * config.weaponry.maxlvl * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Projectile Weapons rowtwo++; ControlPanelelements.Add(XPUILabel($"Projectile Weapon Condition Reduction:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.weaponry.projectileweapons * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponryprojectileweapons {config.weaponry.projectileweapons + 0.01} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponryprojectileweapons {config.weaponry.projectileweapons - 0.01} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.weaponry.projectileweapons * config.weaponry.maxlvl * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Min Damage rowtwo++; ControlPanelelements.Add(XPUILabel($"Minimum Condition Damage:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.weaponry.mindamage * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrymindamage {config.weaponry.mindamage + 0.01} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrymindamage {config.weaponry.mindamage - 0.01} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.weaponry.mindamage * config.weaponry.maxlvl * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Max Ammo rowtwo++; ControlPanelelements.Add(XPUILabel($"Max Ammo Increase:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.weaponry.maxammo * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrymaxammo {config.weaponry.maxammo + 0.01} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrymaxammo {config.weaponry.maxammo - 0.01} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"{config.weaponry.maxammo * config.weaponry.maxlvl * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Max Ammo Limit rowtwo++; ControlPanelelements.Add(XPUILabel($"Max Ammo Limit:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| x{config.weaponry.maxammolimit}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrymaxammolimit {config.weaponry.maxammolimit + 0.1} false", rowtwo, height, 18, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats weaponrymaxammolimit {config.weaponry.maxammolimit - 0.1} false", rowtwo, height, 18, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"x{config.weaponry.maxammolimit * config.weaponry.maxlvl}", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); // Enable / Disable Skinbox rowtwo++; ControlPanelelements.Add(XPUILabel($"Disable ammo for skinbox skins:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUILabel($"| {config.weaponry.skinboxdisable}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats skinboxdisable 0 true", rowtwo, height, 12, "0.0 1.0 0.0 0", "T", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelStats); ControlPanelelements.Add(XPUIButton($"xp.config stats skinboxdisable 0 false", rowtwo, height, 12, "1.0 0.0 0.0 0", "F", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelStats); // Reload Hook rowtwo++; ControlPanelelements.Add(XPUILabel($"Choose Reload Hook: (if you experience issues with max ammo ability you can select a different hook and see if it fixes your issues)", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelStats); rowtwo++; if (config.weaponry.reloadhook == "OnMagazineReload") { ControlPanelelements.Add(XPUILabel($"{config.weaponry.reloadhook}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.35", "0.65", "0 1 0 1"), XPerienceAdminPanelStats); } else { ControlPanelelements.Add(XPUIButton($"xp.config stats weaponryreloadhook 0 false OnMagazineReload", rowtwo, height, 12, "0.0 1.0 0.0 0", "OnMagazineReload", "0.35", "0.65", TextAnchor.MiddleLeft, "1 1 1 1"), XPerienceAdminPanelStats); } rowtwo++; if (config.weaponry.reloadhook == "OnWeaponReload") { ControlPanelelements.Add(XPUILabel($"{config.weaponry.reloadhook}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.35", "0.65", "0 1 0 1"), XPerienceAdminPanelStats); } else { ControlPanelelements.Add(XPUIButton($"xp.config stats weaponryreloadhook 0 false OnWeaponReload", rowtwo, height, 12, "0.0 1.0 0.0 0", "OnWeaponReload", "0.35", "0.65", TextAnchor.MiddleLeft, "1 1 1 1"), XPerienceAdminPanelStats); } #endregion // End CuiHelper.AddUi(player, ControlPanelelements); return; } private void AdminSkillsPage(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.023f; int buttonsize = 15; int row = 4; var woodcuttermaxlevel = "off"; var smithymaxlevel = "off"; var minermaxlevel = "off"; var fishermaxlevel = "off"; var foragermaxlevel = "off"; var huntermaxlevel = "off"; var craftermaxlevel = "off"; var framermaxlevel = "off"; var medicmaxlevel = "off"; var scavmaxlevel = "off"; var electricianmaxlevel = "off"; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"Skills Settings - Note that these settings are what players gain per level of each skill.", 1, 0.090f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // WoodCutter Settings #region WoodCutter ControlPanelelements.Add(XPUILabel($"[WoodCutter Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"Max (Level / Rank)", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); row++; // Max Level if (config.woodcutter.maxlvl > 0) { woodcuttermaxlevel = config.woodcutter.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {woodcuttermaxlevel}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills woodcuttermaxlevel {config.woodcutter.maxlvl + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); if (config.woodcutter.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config skills woodcuttermaxlevel {config.woodcutter.maxlvl - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); } // Cost to Start row++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.woodcutter.pointcoststart}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills woodcuttercost {config.woodcutter.pointcoststart + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills woodcuttercost {config.woodcutter.pointcoststart - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Cost Multiplier row++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.woodcutter.costmultiplier}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills woodcuttercostmultiplier {config.woodcutter.costmultiplier + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills woodcuttercostmultiplier {config.woodcutter.costmultiplier - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Gather Rate row++; ControlPanelelements.Add(XPUILabel($"Gather Rate:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.woodcutter.gatherrate * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills woodcuttergatherrate {config.woodcutter.gatherrate + 0.1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills woodcuttergatherrate {config.woodcutter.gatherrate - 0.1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.woodcutter.gatherrate * config.woodcutter.maxlvl) * 100}% / {((config.woodcutter.gatherrate * config.woodcutter.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Bonus Amount row++; ControlPanelelements.Add(XPUILabel($"Bonus Amount:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.woodcutter.bonusincrease * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills woodcutterbonus {config.woodcutter.bonusincrease + 0.1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills woodcutterbonus {config.woodcutter.bonusincrease - 0.1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.woodcutter.bonusincrease * config.woodcutter.maxlvl) * 100}% / {((config.woodcutter.bonusincrease * config.woodcutter.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Apple Chance row++; ControlPanelelements.Add(XPUILabel($"Apple Chance:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.woodcutter.applechance * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills woodcutterapple {config.woodcutter.applechance + 0.01} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills woodcutterapple {config.woodcutter.applechance - 0.01} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.woodcutter.applechance * config.woodcutter.maxlvl) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); #endregion // Smithy Settings #region Smithy row++; row++; ControlPanelelements.Add(XPUILabel($"[Smithy Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Max Level row++; if (config.smithy.maxlvl > 0) { smithymaxlevel = config.smithy.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {smithymaxlevel}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smithymaxlevel {config.smithy.maxlvl + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); if (config.smithy.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config skills smithymaxlevel {config.smithy.maxlvl - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); } // Cost to Start row++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.smithy.pointcoststart}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smithycost {config.smithy.pointcoststart + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smithycost {config.smithy.pointcoststart - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Cost Multiplier row++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.smithy.costmultiplier}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smithycostmultiplier {config.smithy.costmultiplier + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smithycostmultiplier {config.smithy.costmultiplier - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Production Rate row++; ControlPanelelements.Add(XPUILabel($"Production Rate:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.smithy.productionrate * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smithyprate {config.smithy.productionrate + 0.01} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smithyprate {config.smithy.productionrate - 0.01} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.smithy.productionrate * config.smithy.maxlvl) * 100}% / {((config.smithy.productionrate * config.smithy.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Production Speed row++; ControlPanelelements.Add(XPUILabel($"Production Speed:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.smithy.productionspeed * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smithypspeed {config.smithy.productionspeed + 0.01} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smithypspeed {config.smithy.productionspeed - 0.01} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.smithy.productionspeed * config.smithy.maxlvl) * 100}% / {((config.smithy.productionspeed * config.smithy.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Fuel Consumption row++; ControlPanelelements.Add(XPUILabel($"Fuel Consumption:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.smithy.fuelconsumption * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smithyfuel {config.smithy.fuelconsumption + 0.01} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smithyfuel {config.smithy.fuelconsumption - 0.01} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.smithy.fuelconsumption * config.smithy.maxlvl) * 100}% / {((config.smithy.fuelconsumption * config.smithy.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Metal Chance row++; ControlPanelelements.Add(XPUILabel($"High Quality Metal Chance:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.smithy.metalchance * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smithymetalchance {config.smithy.metalchance + 0.01} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smithymetalchance {config.smithy.metalchance - 0.01} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.smithy.metalchance * config.smithy.maxlvl) * 100}% / {((config.smithy.metalchance * config.smithy.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Metal Amount row++; ControlPanelelements.Add(XPUILabel($"High Quality Metal Amount:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.smithy.metalamount}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smithymetalamount {config.smithy.metalamount + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smithymetalamount {config.smithy.metalamount - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.smithy.metalamount * config.smithy.maxlvl} / {(config.smithy.metalamount * config.smithy.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)}", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); #endregion // Miner Settings #region Miner row++; row++; ControlPanelelements.Add(XPUILabel($"[Miner Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Max Level row++; if (config.miner.maxlvl > 0) { minermaxlevel = config.miner.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {minermaxlevel}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minermaxlevel {config.miner.maxlvl + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); if (config.miner.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config skills minermaxlevel {config.miner.maxlvl - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); } // Cost to Start row++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.miner.pointcoststart}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minercost {config.miner.pointcoststart + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minercost {config.miner.pointcoststart - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Cost Multiplier row++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.miner.costmultiplier}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minercostmultiplier {config.miner.costmultiplier + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minercostmultiplier {config.miner.costmultiplier - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Gather Rate row++; ControlPanelelements.Add(XPUILabel($"Gather Rate:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.miner.gatherrate * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minergatherrate {config.miner.gatherrate + 0.1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minergatherrate {config.miner.gatherrate - 0.1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.miner.gatherrate * config.miner.maxlvl) * 100}% / {((config.miner.gatherrate * config.miner.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Bonus Amount row++; ControlPanelelements.Add(XPUILabel($"Bonus Amount:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.miner.bonusincrease * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minerbonus {config.miner.bonusincrease + 0.1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minerbonus {config.miner.bonusincrease - 0.1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.miner.bonusincrease * config.miner.maxlvl) * 100}% / {((config.miner.bonusincrease * config.miner.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Fuel Consumption row++; ControlPanelelements.Add(XPUILabel($"Fuel Consumption:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.miner.fuelconsumption * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minerfuel {config.miner.fuelconsumption + 0.01} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minerfuel {config.miner.fuelconsumption - 0.01} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.miner.fuelconsumption * config.miner.maxlvl) * 100}% / {((config.miner.fuelconsumption * config.miner.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Metal Chance row++; ControlPanelelements.Add(XPUILabel($"Metal Fragment Chance:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.miner.metalchance * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minermetalchance {config.miner.metalchance + 0.01} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minermetalchance {config.miner.metalchance - 0.01} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.miner.metalchance * config.miner.maxlvl) * 100}% / {((config.miner.metalchance * config.miner.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Metal Amount row++; ControlPanelelements.Add(XPUILabel($"Metal Fragment Amount:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.miner.metalamount}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minermetalamount {config.miner.metalamount + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minermetalamount {config.miner.metalamount - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.miner.metalamount * config.miner.maxlvl} / {(config.miner.metalamount * config.miner.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)}", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); #endregion // Fisher Settings #region Fisher row++; row++; ControlPanelelements.Add(XPUILabel($"[Fisher Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Max Level row++; if (config.fisher.maxlvl > 0) { fishermaxlevel = config.fisher.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {fishermaxlevel}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills fishermaxlevel {config.fisher.maxlvl + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); if (config.woodcutter.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config skills fishermaxlevel {config.fisher.maxlvl - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); } // Cost to Start row++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.fisher.pointcoststart}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills fishercost {config.fisher.pointcoststart + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills fishercost {config.fisher.pointcoststart - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Cost Multiplier row++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.fisher.costmultiplier}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills fishercostmultiplier {config.fisher.costmultiplier + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills fishercostmultiplier {config.fisher.costmultiplier - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Fish Amount row++; ControlPanelelements.Add(XPUILabel($"Fish Amount:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.fisher.fishamountincrease * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills fisheramount {config.fisher.fishamountincrease + 0.05} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills fisheramount {config.fisher.fishamountincrease - 0.05} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.fisher.fishamountincrease * config.fisher.maxlvl) * 100}% / {((config.fisher.fishamountincrease * config.fisher.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Item Amount row++; ControlPanelelements.Add(XPUILabel($"Item Amount:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.fisher.itemamountincrease * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills fisheritem {config.fisher.itemamountincrease + 0.05} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills fisheritem {config.fisher.itemamountincrease - 0.05} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.fisher.itemamountincrease * config.fisher.maxlvl) * 100}% / {((config.fisher.itemamountincrease * config.fisher.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Oxygen Amount row++; ControlPanelelements.Add(XPUILabel($"Oxygen Reduction:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.fisher.oxygenreduction * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills fisheroxygen {config.fisher.oxygenreduction + 0.01} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills fisheroxygen {config.fisher.oxygenreduction - 0.01} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.fisher.oxygenreduction * config.fisher.maxlvl) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Oxygen Tank Amount row++; ControlPanelelements.Add(XPUILabel($"Oxygen Tank Reduction:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.fisher.oxygentankreduction * 100}%", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills fisheroxygentank {config.fisher.oxygentankreduction + 0.01} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills fisheroxygentank {config.fisher.oxygentankreduction - 0.01} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.fisher.oxygentankreduction * config.fisher.maxlvl) * 100}% / {((config.fisher.oxygentankreduction * config.fisher.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", row, height, TextAnchor.MiddleLeft, 10, "0.25", "0.32", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); #endregion // Forager #region Forager int rowtwo = 4; ControlPanelelements.Add(XPUILabel($"[Forager Settings]", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.33", "0.57", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"Max (Level / Rank)", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Max Level rowtwo++; if (config.forager.maxlvl > 0) { foragermaxlevel = config.forager.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {foragermaxlevel}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills foragermaxlevel {config.forager.maxlvl + 1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); if (config.forager.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config skills foragermaxlevel {config.forager.maxlvl - 1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); } // Max Cost to Start rowtwo++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.forager.pointcoststart}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills foragercost {config.forager.pointcoststart + 1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills foragercost {config.forager.pointcoststart - 1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Cost Multiplier rowtwo++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.forager.costmultiplier}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills foragercostmultiplier {config.forager.costmultiplier + 1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills foragercostmultiplier {config.forager.costmultiplier - 1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Gather Rate rowtwo++; ControlPanelelements.Add(XPUILabel($"Gather Rate:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.forager.gatherrate * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills foragergatherrate {config.forager.gatherrate + 0.1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills foragergatherrate {config.forager.gatherrate - 0.1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.forager.gatherrate * config.forager.maxlvl * 100}% / {((config.forager.gatherrate * config.forager.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Seed Chance rowtwo++; ControlPanelelements.Add(XPUILabel($"Increase Seed Chance/Amount:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.forager.chanceincrease * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills foragerseed {config.forager.chanceincrease + 0.01} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills foragerseed {config.forager.chanceincrease - 0.01} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.forager.chanceincrease * config.forager.maxlvl * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Worm / Grub Chance rowtwo++; ControlPanelelements.Add(XPUILabel($"Increase Grub/Worm Chance:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.forager.grubwormincrease * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills grubwormincrease {config.forager.grubwormincrease + 0.01} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills grubwormincrease {config.forager.grubwormincrease - 0.01} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.forager.grubwormincrease * config.forager.maxlvl * 100}% / {((config.forager.grubwormincrease * config.forager.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Seed Chance rowtwo++; ControlPanelelements.Add(XPUILabel($"Random Item Chance:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.forager.randomchance * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills foragerrandom {config.forager.randomchance + 0.01} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills foragerrandom {config.forager.randomchance - 0.01} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.forager.randomchance * config.forager.maxlvl * 100}% / {((config.forager.randomchance * config.forager.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); #endregion // Hunter #region Hunter rowtwo++; rowtwo++; ControlPanelelements.Add(XPUILabel($"[Hunter Settings]", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.33", "0.66", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Max Level rowtwo++; if (config.hunter.maxlvl > 0) { huntermaxlevel = config.hunter.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {huntermaxlevel}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills huntermaxlevel {config.hunter.maxlvl + 1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); if (config.hunter.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config skills huntermaxlevel {config.hunter.maxlvl - 1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); } // Max Cost to Start rowtwo++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.hunter.pointcoststart}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills huntercost {config.hunter.pointcoststart + 1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills huntercost {config.hunter.pointcoststart - 1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Cost Multiplier rowtwo++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.hunter.costmultiplier}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills huntercostmultiplier {config.hunter.costmultiplier + 1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills huntercostmultiplier {config.hunter.costmultiplier - 1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Gather Rate rowtwo++; ControlPanelelements.Add(XPUILabel($"Gather Rate:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.hunter.gatherrate * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills huntergatherrate {config.hunter.gatherrate + 0.1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills huntergatherrate {config.hunter.gatherrate - 0.1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.hunter.gatherrate * config.hunter.maxlvl * 100}% / {((config.hunter.gatherrate * config.hunter.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Bonus Amount rowtwo++; ControlPanelelements.Add(XPUILabel($"Bonus Amount:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.hunter.bonusincrease * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills hunterbonus {config.hunter.bonusincrease + 0.1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills hunterbonus {config.hunter.bonusincrease - 0.1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.hunter.bonusincrease * config.hunter.maxlvl * 100}% / {((config.hunter.bonusincrease * config.hunter.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Damage Increase Wildlife rowtwo++; ControlPanelelements.Add(XPUILabel($"Damage Increase (Wildlife):", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.hunter.damageincrease * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills hunterdamage {config.hunter.damageincrease + 0.01} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills hunterdamage {config.hunter.damageincrease - 0.01} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.hunter.damageincrease * config.hunter.maxlvl * 100}% / {((config.hunter.damageincrease * config.hunter.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Damage Increase Night rowtwo++; ControlPanelelements.Add(XPUILabel($"Night Damage Increase (Wildlife):", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.hunter.nightdmgincrease * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills hunterndamage {config.hunter.nightdmgincrease + 0.01} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills hunterndamage {config.hunter.nightdmgincrease - 0.01} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.hunter.nightdmgincrease * config.hunter.maxlvl * 100}% / {((config.hunter.nightdmgincrease * config.hunter.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); #endregion // Crafter #region Crafter rowtwo++; rowtwo++; ControlPanelelements.Add(XPUILabel($"[Crafter Settings]", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.33", "0.66", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Max Level rowtwo++; if (config.crafter.maxlvl > 0) { craftermaxlevel = config.crafter.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {craftermaxlevel}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills craftermaxlevel {config.crafter.maxlvl + 1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); if (config.crafter.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config skills craftermaxlevel {config.crafter.maxlvl - 1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); } // Max Cost to Start rowtwo++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.crafter.pointcoststart}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills craftercost {config.crafter.pointcoststart + 1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills craftercost {config.crafter.pointcoststart - 1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Cost Multiplier rowtwo++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.crafter.costmultiplier}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills craftercostmultiplier {config.crafter.costmultiplier + 1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills craftercostmultiplier {config.crafter.costmultiplier - 1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Craft Speed rowtwo++; ControlPanelelements.Add(XPUILabel($"Crafting Speed:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.crafter.craftspeed * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills crafterspeed {config.crafter.craftspeed + 0.01} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills crafterspeed {config.crafter.craftspeed - 0.01} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.crafter.craftspeed * config.crafter.maxlvl * 100}% / {((config.crafter.craftspeed * config.crafter.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Craft Cost rowtwo++; ControlPanelelements.Add(XPUILabel($"Crafting Cost:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| -{config.crafter.craftcost * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills craftercosts {config.crafter.craftcost + 0.01} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills craftercosts {config.crafter.craftcost - 0.01} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"-{config.crafter.craftcost * config.crafter.maxlvl * 100}% / -{((config.crafter.craftcost * config.crafter.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Repair Increase rowtwo++; ControlPanelelements.Add(XPUILabel($"Repair Increase:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.crafter.repairincrease * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills crafterrepair {config.crafter.repairincrease + 0.01} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills crafterrepair {config.crafter.repairincrease - 0.01} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.crafter.repairincrease * config.crafter.maxlvl * 100}% / {((config.crafter.repairincrease * config.crafter.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Repair Cost rowtwo++; ControlPanelelements.Add(XPUILabel($"Repair Cost:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| -{config.crafter.repaircost * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills crafterrepaircost {config.crafter.repaircost + 0.01} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills crafterrepaircost {config.crafter.repaircost - 0.01} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"-{config.crafter.repaircost * config.crafter.maxlvl * 100}% / -{((config.crafter.repaircost * config.crafter.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Condition Chance rowtwo++; ControlPanelelements.Add(XPUILabel($"Condition Chance:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.crafter.conditionchance * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills craftercondtition {config.crafter.conditionchance + 0.01} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills craftercondtition {config.crafter.conditionchance - 0.01} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.crafter.conditionchance * config.crafter.maxlvl * 100}% / {((config.crafter.conditionchance * config.crafter.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Condition Amount rowtwo++; ControlPanelelements.Add(XPUILabel($"Condition Amount:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| +{config.crafter.conditionamount * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills craftercondtitionamt {config.crafter.conditionamount + 0.01} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills craftercondtitionamt {config.crafter.conditionamount - 0.01} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.crafter.conditionamount * config.crafter.maxlvl * 100}% / {((config.crafter.conditionamount * config.crafter.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); #endregion // Framer Settings #region Framer rowtwo++; rowtwo++; ControlPanelelements.Add(XPUILabel($"[Framer Settings]", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.33", "0.66", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Max Level rowtwo++; if (config.framer.maxlvl > 0) { framermaxlevel = config.framer.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {framermaxlevel}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills framermaxlevel {config.framer.maxlvl + 1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); if (config.framer.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config skills framermaxlevel {config.framer.maxlvl - 1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); } // Max Cost to Start rowtwo++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.framer.pointcoststart}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills framercost {config.framer.pointcoststart + 1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills framercost {config.framer.pointcoststart - 1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Cost Multiplier rowtwo++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.framer.costmultiplier}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills framercostmultiplier {config.framer.costmultiplier + 1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills framercostmultiplier {config.framer.costmultiplier - 1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Upgrade Cost rowtwo++; ControlPanelelements.Add(XPUILabel($"Upgrade Cost:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| -{config.framer.upgradecost * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills framerupgrade {config.framer.upgradecost + 0.01} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills framerupgrade {config.framer.upgradecost - 0.01} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"-{config.framer.upgradecost * config.framer.maxlvl * 100}% / -{((config.framer.upgradecost * config.framer.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Repair Cost rowtwo++; ControlPanelelements.Add(XPUILabel($"Repair Cost:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| -{config.framer.repaircost * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills framerrepair {config.framer.repaircost + 0.01} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills framerrepair {config.framer.repaircost - 0.01} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"-{config.framer.repaircost * config.framer.maxlvl * 100}% / -{((config.framer.repaircost * config.framer.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Repair Time rowtwo++; ControlPanelelements.Add(XPUILabel($"Repair Time:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.33", "0.48", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| -{config.framer.repairtime * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.48", "0.53", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills framertime {config.framer.repairtime + 0.1} false", rowtwo, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.53", "0.54", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills framertime {config.framer.repairtime - 0.1} false", rowtwo, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.55", "0.56", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"-{config.framer.repairtime * config.framer.maxlvl * 100}%", rowtwo, height, TextAnchor.MiddleLeft, 10, "0.57", "0.65", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); #endregion // Medic Settings #region Medic int rowthree = 4; ControlPanelelements.Add(XPUILabel($"[Medic Settings]", rowthree, height, TextAnchor.MiddleLeft, 15, "0.66", "0.90", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"Max (Level / Rank)", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Max Level rowthree++; if (config.medic.maxlvl > 0) { medicmaxlevel = config.medic.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {medicmaxlevel}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills medicmaxlevel {config.medic.maxlvl + 1} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); if (config.medic.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config skills medicmaxlevel {config.medic.maxlvl - 1} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); } // Max Cost to Start rowthree++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.medic.pointcoststart}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills mediccost {config.medic.pointcoststart + 1} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills mediccost {config.medic.pointcoststart - 1} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Cost Multiplier rowthree++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.medic.costmultiplier}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills mediccostmultiplier {config.medic.costmultiplier + 1} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills mediccostmultiplier {config.medic.costmultiplier - 1} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Revive HP rowthree++; ControlPanelelements.Add(XPUILabel($"Revival Amount:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.medic.revivehp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills medicrevival {config.medic.revivehp + 1} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills medicrevival {config.medic.revivehp - 1} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.medic.revivehp * config.medic.maxlvl} / {(config.medic.revivehp * config.medic.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)}", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Recover HP rowthree++; ControlPanelelements.Add(XPUILabel($"Recover Amount:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.medic.recoverhp}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills medicrecover {config.medic.recoverhp + 1} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills medicrecover {config.medic.recoverhp - 1} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.medic.recoverhp * config.medic.maxlvl} / {(config.medic.recoverhp * config.medic.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)}", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Medic Tools rowthree++; ControlPanelelements.Add(XPUILabel($"Medical Tools:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.medic.tools}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills medictools {config.medic.tools + 1} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills medictools {config.medic.tools - 1} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.medic.tools * config.medic.maxlvl} / {(config.medic.tools * config.medic.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)}", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Medic Teas rowthree++; ControlPanelelements.Add(XPUILabel($"Medical Teas:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.medic.teas * 100}%", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills medicteas {config.medic.teas + 0.01} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills medicteas {config.medic.teas - 0.01} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.medic.teas * config.medic.maxlvl) * 100}%", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Mixing Speed rowthree++; ControlPanelelements.Add(XPUILabel($"Mixing Table Speed:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.medic.crafttime * 100}%", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills mediccraft {config.medic.crafttime + 0.01} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills mediccraft {config.medic.crafttime - 0.01} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.medic.crafttime * config.medic.maxlvl) * 100}%", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); rowthree++; ControlPanelelements.Add(XPUILabel($"Prevent Bandage Boost:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.medic.preventbandageboost}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills preventbandageboost 0 true", rowthree, height, 12, "0.0 1.0 0.0 0", "T", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills preventbandageboost 0 false", rowthree, height, 12, "1.0 0.0 0.0 0", "F", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); #endregion // Scavenger Settings #region Scavenger rowthree++; rowthree++; ControlPanelelements.Add(XPUILabel($"[Scavenger Settings]", rowthree, height, TextAnchor.MiddleLeft, 15, "0.66", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Max Level rowthree++; if (config.scavenger.maxlvl > 0) { scavmaxlevel = config.scavenger.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {scavmaxlevel}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavmaxlevel {config.scavenger.maxlvl + 1} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); if (config.scavenger.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config skills scavmaxlevel {config.scavenger.maxlvl - 1} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); } // Max Cost to Start rowthree++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.scavenger.pointcoststart}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavccost {config.scavenger.pointcoststart + 1} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavccost {config.scavenger.pointcoststart - 1} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Cost Multiplier rowthree++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.scavenger.costmultiplier}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavcostmultiplier {config.scavenger.costmultiplier + 1} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavcostmultiplier {config.scavenger.costmultiplier - 1} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Default Multiplier Chance rowthree++; ControlPanelelements.Add(XPUILabel($"Extra Loot Chance:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.scavenger.scavlootchance * 100}%", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavlootchance {config.scavenger.scavlootchance + 0.01} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavlootchance {config.scavenger.scavlootchance - 0.01} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.scavenger.scavlootchance * config.scavenger.maxlvl) * 100}% / {((config.scavenger.scavlootchance * config.scavenger.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Default Multiplier rowthree++; ControlPanelelements.Add(XPUILabel($"Extra Loot Multiplier:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.scavenger.scavmultiplier}x", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavmultiplier {config.scavenger.scavmultiplier + 0.1} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavmultiplier {config.scavenger.scavmultiplier - 0.1} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.scavenger.scavmultiplier * config.scavenger.maxlvl}x / {(config.scavenger.scavlootchance * config.scavenger.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)}x", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Drops rowthree++; ControlPanelelements.Add(XPUILabel($"Increase Loot Drops:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.scavenger.drops}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavbarrel 0 true", rowthree, height, 12, "0.0 1.0 0.0 0", "T", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavbarrel 0 false", rowthree, height, 12, "1.0 0.0 0.0 0", "F", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Loot Crates rowthree++; ControlPanelelements.Add(XPUILabel($"Increase Loot Crates:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.scavenger.crates}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavcrate 0 true", rowthree, height, 12, "0.0 1.0 0.0 0", "T", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavcrate 0 false", rowthree, height, 12, "1.0 0.0 0.0 0", "F", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // UnLoot Crates rowthree++; ControlPanelelements.Add(XPUILabel($"Increase Water Loot Crates:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.scavenger.uncrates}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavuncrate 0 true", rowthree, height, 12, "0.0 1.0 0.0 0", "T", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavuncrate 0 false", rowthree, height, 12, "1.0 0.0 0.0 0", "F", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Locked Crates rowthree++; ControlPanelelements.Add(XPUILabel($"Increase Locked Crates:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.scavenger.lockedcrates}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavlockedcrate 0 true", rowthree, height, 12, "0.0 1.0 0.0 0", "T", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavlockedcrate 0 false", rowthree, height, 12, "1.0 0.0 0.0 0", "F", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Hack Crates rowthree++; ControlPanelelements.Add(XPUILabel($"Increase Hackable Crates:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.scavenger.hackcrates}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavhackcrate 0 true", rowthree, height, 12, "0.0 1.0 0.0 0", "T", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavhackcrate 0 false", rowthree, height, 12, "1.0 0.0 0.0 0", "F", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Scientists rowthree++; ControlPanelelements.Add(XPUILabel($"Increase Scientists Loot:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.scavenger.scientists}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scientists 0 true", rowthree, height, 12, "0.0 1.0 0.0 0", "T", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scientists 0 false", rowthree, height, 12, "1.0 0.0 0.0 0", "F", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Components Only rowthree++; ControlPanelelements.Add(XPUILabel($"Increase Components Only:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.scavenger.componentsonly}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavcomponly 0 true", rowthree, height, 12, "0.0 1.0 0.0 0", "T", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavcomponly 0 false", rowthree, height, 12, "1.0 0.0 0.0 0", "F", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Custom List Enable rowthree++; ControlPanelelements.Add(XPUILabel($"Use Custom Item List:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.scavenger.usecustomscavlist}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills usecustomscavlist 0 true", rowthree, height, 12, "0.0 1.0 0.0 0", "T", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills usecustomscavlist 0 false", rowthree, height, 12, "1.0 0.0 0.0 0", "F", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Custom Item Chance rowthree++; ControlPanelelements.Add(XPUILabel($"Custom Item Chance:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.scavenger.scavchance * 100}%", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavchance {config.scavenger.scavchance + 0.01} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills scavchance {config.scavenger.scavchance - 0.01} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{(config.scavenger.scavchance * config.scavenger.maxlvl) * 100}% / {((config.scavenger.scavchance * config.scavenger.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)) * 100}%", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Custom Multiplier rowthree++; ControlPanelelements.Add(XPUILabel($"Custom Item Multiplier:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.scavenger.customscavmultiplier}x", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills customscavmultiplier {config.scavenger.customscavmultiplier + 0.1} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills customscavmultiplier {config.scavenger.customscavmultiplier - 0.1} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.scavenger.customscavmultiplier * config.scavenger.maxlvl}x / {(config.scavenger.scavlootchance * config.scavenger.maxlvl) + (config.xpLevelRanks.rankskillboostamount * config.xpLevelRanks.maxresetrank)}x", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Custom Random rowthree++; ControlPanelelements.Add(XPUILabel($"Custom Item Random Amount:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.scavenger.customscavrandom}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills customscavrandom 0 true", rowthree, height, 12, "0.0 1.0 0.0 0", "T", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills customscavrandom 0 false", rowthree, height, 12, "1.0 0.0 0.0 0", "F", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); #endregion // Electrician Settings #region Electrician rowthree++; rowthree++; ControlPanelelements.Add(XPUILabel($"[Electrician Settings]", rowthree, height, TextAnchor.MiddleLeft, 15, "0.66", "0.80", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.admin openelectriciansettings", rowthree, height, 12, "1.0 0.0 0.0 0.7", $"〘Edit Default Settings〙", "0.82", "0.95", TextAnchor.MiddleCenter), XPerienceAdminPanelSkills); // Max Level rowthree++; if (config.electrician.maxlvl > 0) { electricianmaxlevel = config.electrician.maxlvl.ToString(); } ControlPanelelements.Add(XPUILabel($"Max Level:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {electricianmaxlevel}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills electricianmaxlevel {config.electrician.maxlvl + 1} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); if (config.electrician.maxlvl > 0) { ControlPanelelements.Add(XPUIButton($"xp.config skills electricianmaxlevel {config.electrician.maxlvl - 1} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); } // Max Cost to Start rowthree++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.electrician.pointcoststart}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills electriciancost {config.electrician.pointcoststart + 1} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills electriciancost {config.electrician.pointcoststart - 1} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Cost Multiplier rowthree++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.electrician.costmultiplier}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills electriciancostmultiplier {config.electrician.costmultiplier + 1} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills electriciancostmultiplier {config.electrician.costmultiplier - 1} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Solar Panel Input Increase rowthree++; ControlPanelelements.Add(XPUILabel($"Solar Panel Input:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| +{config.electrician.solarpanelinputincrease * 100}%", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills solarpanelinputincrease {config.electrician.solarpanelinputincrease + 0.01} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills solarpanelinputincrease {config.electrician.solarpanelinputincrease - 0.01} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"+{config.electrician.solarpanelinputincrease * config.electrician.maxlvl * 100}%", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Solar Panel Max Increase rowthree++; ControlPanelelements.Add(XPUILabel($"Solar Panel MaxOutput:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| +{config.electrician.solarpanelmaxincrease * 100}%", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills solarpanelmaxincrease {config.electrician.solarpanelmaxincrease + 0.01} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills solarpanelmaxincrease {config.electrician.solarpanelmaxincrease - 0.01} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"+{config.electrician.solarpanelmaxincrease * config.electrician.maxlvl * 100}%", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Small Battery MaxOutput rowthree++; ControlPanelelements.Add(XPUILabel($"Small Battery MaxOutput:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| +{config.electrician.smallbatterymaxincrease * 100}%", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smallbatterymaxincrease {config.electrician.smallbatterymaxincrease + 0.01} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smallbatterymaxincrease {config.electrician.smallbatterymaxincrease - 0.01} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"+{config.electrician.smallbatterymaxincrease * config.electrician.maxlvl * 100}%", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Medium Battery MaxOutput rowthree++; ControlPanelelements.Add(XPUILabel($"Medium Battery MaxOutput:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| +{config.electrician.mediumbatterymaxincrease * 100}%", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills mediumbatterymaxincrease {config.electrician.mediumbatterymaxincrease + 0.01} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills mediumbatterymaxincrease {config.electrician.mediumbatterymaxincrease - 0.01} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"+{config.electrician.mediumbatterymaxincrease * config.electrician.maxlvl * 100}%", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Large Battery MaxOutput rowthree++; ControlPanelelements.Add(XPUILabel($"Large Battery MaxOutput:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| +{config.electrician.largebatterymaxincrease * 100}%", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills largebatterymaxincrease {config.electrician.largebatterymaxincrease + 0.01} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills largebatterymaxincrease {config.electrician.largebatterymaxincrease - 0.01} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"+{config.electrician.largebatterymaxincrease * config.electrician.maxlvl * 100}%", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Small Generator MaxOutput rowthree++; ControlPanelelements.Add(XPUILabel($"Small Generator MaxOutput:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| +{config.electrician.smallgeneratormaxincrease * 100}%", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smallgeneratormaxincrease {config.electrician.smallgeneratormaxincrease + 0.01} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills smallgeneratormaxincrease {config.electrician.smallgeneratormaxincrease - 0.01} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"+{config.electrician.smallgeneratormaxincrease * config.electrician.maxlvl * 100}%", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Electric Windmill MaxOutput rowthree++; ControlPanelelements.Add(XPUILabel($"Electric Windmill MaxOutput:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| +{config.electrician.electricwindmillmaxincrease * 100}%", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills electricwindmillmaxincrease {config.electrician.electricwindmillmaxincrease + 0.01} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills electricwindmillmaxincrease {config.electrician.electricwindmillmaxincrease - 0.01} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"+{config.electrician.electricwindmillmaxincrease * config.electrician.maxlvl * 100}%", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); // Allow Min Solar Input rowthree++; ControlPanelelements.Add(XPUILabel($"Allow Min Solar Input:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.electrician.allowminsolarinput}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills allowminsolarinput 0 true", rowthree, height, 12, "0.0 1.0 0.0 0", "T", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills allowminsolarinput 0 false", rowthree, height, 12, "1.0 0.0 0.0 0", "F", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); // Minimum Solar Input rowthree++; ControlPanelelements.Add(XPUILabel($"Min Solar Input:", rowthree, height, TextAnchor.MiddleLeft, 12, "0.66", "0.81", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"| {config.electrician.minsolarinput}", rowthree, height, TextAnchor.MiddleLeft, 12, "0.81", "0.86", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minsolarinput {config.electrician.minsolarinput + 1} false", rowthree, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.86", "0.87", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUIButton($"xp.config skills minsolarinput {config.electrician.minsolarinput - 1} false", rowthree, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.88", "0.89", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSkills); ControlPanelelements.Add(XPUILabel($"{config.electrician.minsolarinput * config.electrician.maxlvl}", rowthree, height, TextAnchor.MiddleLeft, 10, "0.90", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSkills); #endregion // UI End CuiHelper.AddUi(player, ControlPanelelements); return; } private void AdminPlayerInfoPage(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); #region Layout var height = 0.028f; int row = 4; string lableL = "0.01"; string lableR = "0.20"; string valueL = "0.20"; string valueR = "0.25"; string setting1L = "0.26"; string setting1R = "0.27"; string setting2L = "0.28"; string setting2R = "0.29"; #endregion ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"Player Info Settings", 1, 0.090f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); // Main UI Settings ControlPanelelements.Add(XPUILabel($"[Info Box Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); // Allow LiveStats Location row++; ControlPanelelements.Add(XPUILabel($"Show Player Info Box:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.showinfobox}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata showinfobox 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata showinfobox 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); row++; ControlPanelelements.Add(XPUILabel($"Show Alive Time:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.alivetime}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata alivetime 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata alivetime 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); row++; ControlPanelelements.Add(XPUILabel($"Show Sleeping Time:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.sleepingtime}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata sleepingtime 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata sleepingtime 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); row++; ControlPanelelements.Add(XPUILabel($"Show Swimming Time:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.swimingtime}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata swimmingtime 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata swimmingtime 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); row++; ControlPanelelements.Add(XPUILabel($"Show Driving Time:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.drivingtime}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata drivingtime 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata drivingtime 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); row++; ControlPanelelements.Add(XPUILabel($"Show Flying Time:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.flyingtime}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata flyingtime 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata flyingtime 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); row++; ControlPanelelements.Add(XPUILabel($"Show Boating Time:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.boatingtime}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata boatingtime 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata boatingtime 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); row++; ControlPanelelements.Add(XPUILabel($"Show Base Time:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.basetime}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata basetime 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata basetime 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); row++; ControlPanelelements.Add(XPUILabel($"Show Monument Time:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.monumenttime}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata monumentime 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata monumentime 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); row++; ControlPanelelements.Add(XPUILabel($"Show Wilderness Time:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.wildernesstime}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata wildernesstime 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata wildernesstime 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); row++; ControlPanelelements.Add(XPUILabel($"Show Meters Ran:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.metersran}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata metersran 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata metersran 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); row++; ControlPanelelements.Add(XPUILabel($"Show Meters Walked:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.meterswalked}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata meterswalked 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata meterswalked 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); row++; ControlPanelelements.Add(XPUILabel($"Show Last DMG Recieved:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.lastdmgrec}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata lastdmgrec 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata lastdmgrec 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); row++; ControlPanelelements.Add(XPUILabel($"Show Last DMG Recieved By:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.lastdmgrecby}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata lastdmgrecby 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata lastdmgrecby 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); row++; ControlPanelelements.Add(XPUILabel($"Show Last DMG Delt:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.lastdmgdelt}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata lastdmgdelt 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata lastdmgdelt 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); row++; ControlPanelelements.Add(XPUILabel($"Show Last DMG Delt To:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUILabel($"| {config.playerinfoBoxsettings.lastdmgdeltto}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata lastdmgdeltto 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelInfoBox); ControlPanelelements.Add(XPUIButton($"xp.config playerdata lastdmgdeltto 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelInfoBox); // End CuiHelper.AddUi(player, ControlPanelelements); return; } private void AdminCalculationPageLevels(BasePlayer player, int page = 0, int rank = 0) { var ControlPanelelements = new CuiElementContainer(); #region Layout var height = 0.025f; int row = 7; int current = 0; var ranklable = ""; if (config.xpLevelRanks.increaselevelmultiplier) { ranklable = $"Rank = {rank}"; } #endregion ControlPanelelements.Add(XPUIPanel("0.16 0.10", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{XPLang("adminmenu_019", player.UserIDString)} - Based off current settings (For reference only) (BETA)", 1, 0.090f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationslevels 0 0", 4, height, 12, "0 0 0 1", "Levels", "0.02", "0.12", TextAnchor.MiddleCenter, "0 1 0 1"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationsranks 0", 4, height, 12, "0 0 0 1", "Ranks", "0.13", "0.23", TextAnchor.MiddleCenter, "1 1 1 1"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationsstats", 4, height, 12, "0 0 0 1", "Stats", "0.24", "0.34", TextAnchor.MiddleCenter, "1 1 1 1"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationsskills", 4, height, 12, "0 0 0 1", "Skills", "0.35", "0.45", TextAnchor.MiddleCenter, "1 1 1 1"), XPerienceAdminPanelCalculations); // Max Level int startxp = (int)config.xpLevel.levelstart, reqxp = (int)config.xpLevel.levelmultiplier, reqxp2 = (int)config.xpLevelRanks.levelmultiplierincrease, maxlev = config.xpLevel.maxlevel - 1, totalreqxpmax = 0, totalreqxp = 0, b = 0, c = 0; for (int l = 0; l <= maxlev; l++) { if (config.xpLevelRanks.increaselevelmultiplier) { b = (reqxp + (reqxp2 * rank)) * l; totalreqxpmax += b; } else { b = reqxp * l; totalreqxpmax += b; } } ControlPanelelements.Add(XPUILabel($"[Max Level XP Calculations] {ranklable}", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.49", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; ControlPanelelements.Add(XPUILabel($"Max Level:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.07", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.xpLevel.maxlevel}", row, height, TextAnchor.MiddleLeft, 13, "0.08", "0.12", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Total Required XP:", row, height, TextAnchor.MiddleLeft, 13, "0.13", "0.22", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{String.Format("{0:N0}", totalreqxpmax + startxp)}", row, height, TextAnchor.MiddleLeft, 13, "0.23", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); // Level List row++; row++; ControlPanelelements.Add(XPUILabel($"[Per Level XP Calculations] {ranklable}", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.49", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; row++; ControlPanelelements.Add(XPUILabel($"Level", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.10", "1 1 1 1"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Requirement Increase", row, height, TextAnchor.MiddleLeft, 12, "0.11", "0.25", "1 1 1 1"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Level Required XP", row, height, TextAnchor.MiddleLeft, 12, "0.26", "0.40", "1 1 1 1"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIPanel("0 0", "1 0.72", "0 0 0 0"), XPerienceAdminPanelCalculations, "LevelList"); var height2 = 0.035f; for (int i = 0; i <= maxlev; i++) { if (config.xpLevelRanks.increaselevelmultiplier) { c = (reqxp + (reqxp2 * rank)) * i; } else { c = reqxp * i; } totalreqxp += c; if (current >= page && current < page + 25) { int pos = (current - page); string color = "1 1 1 1"; if (current % 2 == 0) { color = ".5 .5 .5 1"; } ControlPanelelements.Add(XPUILabel($"{String.Format("{0:N0}", current + 1)}", pos + 1, height2, TextAnchor.MiddleLeft, 12, "0.01", "0.10", color), "LevelList"); ControlPanelelements.Add(XPUILabel($"{String.Format("{0:N0}", c)}", pos + 1, height2, TextAnchor.MiddleLeft, 12, "0.11", "0.25", color), "LevelList"); ControlPanelelements.Add(XPUILabel($"{String.Format("{0:N0}", totalreqxp + startxp)}", pos + 1, height2, TextAnchor.MiddleLeft, 12, "0.26", "0.40", color), "LevelList"); } current++; } // Page Selection int back = page <= 25 ? 0 : page - 25; int next = page + 25 >= current ? page : page + 25; AdminCalculationPageLevelsPageSelection(player, back, next, page, rank); // End CuiHelper.AddUi(player, ControlPanelelements); } private void AdminCalculationPageLevelsPageSelection(BasePlayer player, int back, int next, int page, int rank) { if (player == null) return; float height3 = 1f; var ControlPanelPageelements = new CuiElementContainer(); ControlPanelPageelements.Add(XPUIPanel(".16 0", "1 .098", "0 0 0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelCalculationsLevelSelection); // Prev Page if (page >= 1) { ControlPanelPageelements.Add(XPUIButton($"xp.admin calculationslevels {back} {rank}", 1, height3, 35, "0 0 0 0", "⇧", "0", ".10", TextAnchor.MiddleCenter, "1 1 0 1"), XPerienceAdminPanelCalculationsLevelSelection); } // Next Page if (page + 25 < config.xpLevel.maxlevel) { ControlPanelPageelements.Add(XPUIButton($"xp.admin calculationslevels {next} {rank}", 1, height3, 35, "0 0 0 0", "⇩", ".11", ".21", TextAnchor.MiddleCenter, "1 1 0 1"), XPerienceAdminPanelCalculationsLevelSelection); } if (config.xpLevelRanks.increaselevelmultiplier) { // Prev Rank if (rank >= 1) { ControlPanelPageelements.Add(XPUIButton($"xp.admin calculationslevels {page} {rank - 1}", 1, height3, 20, "0 0 0 0", "Rank ⇩", ".50", ".60", TextAnchor.MiddleCenter, "0 1 0 1"), XPerienceAdminPanelCalculationsLevelSelection); } // Next Rank if (rank < config.xpLevelRanks.maxresetrank) { ControlPanelPageelements.Add(XPUIButton($"xp.admin calculationslevels {page} {rank + 1}", 1, height3, 20, "0 0 0 0", "Rank ⇧", ".61", ".71", TextAnchor.MiddleCenter, "0 1 0 1"), XPerienceAdminPanelCalculationsLevelSelection); } } // UI End CuiHelper.AddUi(player, ControlPanelPageelements); } private void AdminCalculationPageRanks(BasePlayer player, int page = 0) { var ControlPanelelements = new CuiElementContainer(); #region Layout var height = 0.025f; int row = 7; int current = 0; int perpage = 20; #endregion ControlPanelelements.Add(XPUIPanel("0.16 0.10", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{XPLang("adminmenu_019", player.UserIDString)} - Based off current settings (For reference only) (BETA)", 1, 0.090f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationslevels 0 0", 4, height, 12, "0 0 0 1", "Levels", "0.02", "0.12", TextAnchor.MiddleCenter, "1 1 1 1"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationsranks 0", 4, height, 12, "0 0 0 1", "Ranks", "0.13", "0.23", TextAnchor.MiddleCenter, "0 1 0 1"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationsstats", 4, height, 12, "0 0 0 1", "Stats", "0.24", "0.34", TextAnchor.MiddleCenter, "1 1 1 1"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationsskills", 4, height, 12, "0 0 0 1", "Skills", "0.35", "0.45", TextAnchor.MiddleCenter, "1 1 1 1"), XPerienceAdminPanelCalculations); row++; ControlPanelelements.Add(XPUILabel($"[XP Calculations Per Rank]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.50", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIPanel("0 0", "1 0.80", "0 0 0 0"), XPerienceAdminPanelCalculations, "RankList"); var height2 = 0.035f; // Ranks Without Increase #region Rank XP W/O Increase if (!config.xpLevelRanks.increaselevelmultiplier) { int startxp = (int)config.xpLevel.levelstart, reqxp = (int)config.xpLevel.levelmultiplier, maxlev = config.xpLevel.maxlevel - 1, totalreqxp = 0; for (int r = 1; r <= config.xpLevelRanks.maxresetrank; r++) { for (int l = 1; l <= maxlev; l++) { int c = reqxp * l; totalreqxp += c; } totalreqxp += startxp; if (current >= page && current < page + perpage) { int pos = (current - page); string color = "1 1 1 1"; if (current % 2 == 0) { color = ".5 .5 .5 1"; } ControlPanelelements.Add(XPUILabel($"[Rank {r}]", pos + 1, height2, TextAnchor.MiddleLeft, 13, "0.01", "0.06", color), "RankList"); ControlPanelelements.Add(XPUILabel($"Required XP:", pos + 1, height2, TextAnchor.MiddleLeft, 13, "0.07", "0.15", color), "RankList"); ControlPanelelements.Add(XPUILabel($"{String.Format("{0:N0}", totalreqxp)}", pos + 1, height2, TextAnchor.MiddleLeft, 13, "0.16", "0.49", color), "RankList"); } current++; } } #endregion // Ranks With Increase #region Rank XP W Increase if (config.xpLevelRanks.increaselevelmultiplier) { int startxp2 = (int)config.xpLevel.levelstart, reqxp2 = (int)config.xpLevel.levelmultiplier, maxlev2 = config.xpLevel.maxlevel - 1, reqxp3 = (int)config.xpLevelRanks.levelmultiplierincrease, totalreqxp2 = 0, c2 = 0; for (int r2 = 1; r2 <= config.xpLevelRanks.maxresetrank; r2++) { if (r2 == 1) { for (int l2 = 1; l2 <= maxlev2; l2++) { c2 = reqxp2 * l2; totalreqxp2 += c2; } } else { for (int l2 = 1; l2 <= maxlev2; l2++) { c2 = (reqxp2 + (reqxp3 * (r2 - 1))) * l2; totalreqxp2 += c2; } } totalreqxp2 += startxp2; if (current >= page && current < page + perpage) { int pos = (current - page); string color = "1 1 1 1"; if (current % 2 == 0) { color = ".5 .5 .5 1"; } ControlPanelelements.Add(XPUILabel($"[Rank {r2}]", pos + 1, height2, TextAnchor.MiddleLeft, 13, "0.01", "0.06", color), "RankList"); ControlPanelelements.Add(XPUILabel($"Required XP:", pos + 1, height2, TextAnchor.MiddleLeft, 13, "0.07", "0.15", color), "RankList"); ControlPanelelements.Add(XPUILabel($"{String.Format("{0:N0}", totalreqxp2)}", pos + 1, height2, TextAnchor.MiddleLeft, 13, "0.16", "0.49", color), "RankList"); } current++; } } #endregion // Page Selection int back = page <= perpage ? 0 : page - perpage; int next = page + perpage >= current ? page : page + perpage; AdminCalculationPageRanksPageSelection(player, back, next, page); // End CuiHelper.AddUi(player, ControlPanelelements); } private void AdminCalculationPageRanksPageSelection(BasePlayer player, int back, int next, int page) { if (player == null) return; float height3 = 1f; int perpage = 20; var ControlPanelPageelements = new CuiElementContainer(); ControlPanelPageelements.Add(XPUIPanel(".16 0", "1 .098", "0 0 0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelCalculationsRanksSelection); // Prev Page if (page >= 1) { ControlPanelPageelements.Add(XPUIButton($"xp.admin calculationsranks {back}", 1, height3, 35, "0 0 0 0", "⇧", "0", ".10", TextAnchor.MiddleCenter, "1 1 0 1"), XPerienceAdminPanelCalculationsRanksSelection); } // Next Page if (page + perpage < config.xpLevelRanks.maxresetrank) { ControlPanelPageelements.Add(XPUIButton($"xp.admin calculationsranks {next}", 1, height3, 35, "0 0 0 0", "⇩", ".11", ".21", TextAnchor.MiddleCenter, "1 1 0 1"), XPerienceAdminPanelCalculationsRanksSelection); } // UI End CuiHelper.AddUi(player, ControlPanelPageelements); } private void AdminCalculationPageStats(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.025f; int row = 7; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{XPLang("adminmenu_019", player.UserIDString)} - Based off current settings (For reference only) (BETA)", 1, 0.090f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationslevels 0 0", 4, height, 12, "0 0 0 1", "Levels", "0.02", "0.12", TextAnchor.MiddleCenter, "1 1 1 1"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationsranks 0", 4, height, 12, "0 0 0 1", "Ranks", "0.13", "0.23", TextAnchor.MiddleCenter, "1 1 1 1"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationsstats", 4, height, 12, "0 0 0 1", "Stats", "0.24", "0.34", TextAnchor.MiddleCenter, "0 1 0 1"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationsskills", 4, height, 12, "0 0 0 1", "Skills", "0.35", "0.45", TextAnchor.MiddleCenter, "1 1 1 1"), XPerienceAdminPanelCalculations); // Level #region Level / Ranks int levelstatpoints = config.xpLevel.statpointsperlvl * config.xpLevel.maxlevel; int rankstatpoints = ((config.xpLevel.statpointsperlvl + (config.xpLevelRanks.rankstatpointincrease * config.xpLevelRanks.maxresetrank)) * config.xpLevel.maxlevel) + (config.xpLevelRanks.rankstatpointstart * config.xpLevelRanks.maxresetrank); int totalrankstatpoints = 0; int perrankstatpoints = 0; if (!config.xpLevelRanks.resetallstatsskills) { for (int x = 0; x <= config.xpLevelRanks.maxresetrank; x++) { for (int i = 0; i <= config.xpLevel.maxlevel + 1; i++) { int c = (config.xpLevel.statpointsperlvl + config.xpLevelRanks.rankstatpointincrease * x) * i; totalrankstatpoints = c + (config.xpLevelRanks.rankstatpointstart * x); } perrankstatpoints += totalrankstatpoints; } rankstatpoints = perrankstatpoints; } ControlPanelelements.Add(XPUILabel($"[Level / Rank Calculations]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; ControlPanelelements.Add(XPUILabel($"Max Level:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.xpLevel.maxlevel}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Total Stat Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{levelstatpoints}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.36", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; ControlPanelelements.Add(XPUILabel($"Max Rank:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.xpLevelRanks.maxresetrank}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Total Stat Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{rankstatpoints}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.36", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); #endregion // Stats #region Stats row++; row++; ControlPanelelements.Add(XPUILabel($"[Stat Calculations]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; // Mentality int totalmentality = 0; if (config.mentality.maxlvl > 0) { for (int i = 1; i <= config.mentality.maxlvl; i++) { int ment = config.mentality.costmultiplier * i; totalmentality += ment; } totalmentality += config.mentality.pointcoststart - config.mentality.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Mentality:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.mentality.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Stat Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalmentality}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Dexterity int totaldexterity = 0; if (config.dexterity.maxlvl > 0) { for (int i = 1; i <= config.dexterity.maxlvl; i++) { int dex = config.dexterity.costmultiplier * i; totaldexterity += dex; } totaldexterity += config.dexterity.pointcoststart - config.dexterity.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Dextertiy:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.dexterity.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Stat Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totaldexterity}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Might int totalmight = 0; if (config.might.maxlvl > 0) { for (int i = 1; i <= config.might.maxlvl; i++) { int might = config.might.costmultiplier * i; totalmight += might; } totalmight += config.might.pointcoststart - config.might.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Might:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.might.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Stat Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalmight}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Captaincy int totalcaptaincy = 0; if (config.captaincy.maxlvl > 0) { for (int i = 1; i <= config.captaincy.maxlvl; i++) { int capt = config.captaincy.costmultiplier * i; totalcaptaincy += capt; } totalcaptaincy += config.captaincy.pointcoststart - config.captaincy.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Captaincy:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.captaincy.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Stat Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalcaptaincy}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Weaponry int totalweaponry = 0; if (config.weaponry.maxlvl > 0) { for (int i = 1; i <= config.weaponry.maxlvl; i++) { int weap = config.weaponry.costmultiplier * i; totalweaponry += weap; } totalweaponry += config.weaponry.pointcoststart - config.weaponry.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Weapnry:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.weaponry.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Stat Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalweaponry}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Total Stat Points Required row++; int totalallstats = totalmentality + totaldexterity + totalmight + totalcaptaincy + totalweaponry; ControlPanelelements.Add(XPUILabel($"Total Stat Points Required:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalallstats}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; row++; #endregion // End CuiHelper.AddUi(player, ControlPanelelements); } private void AdminCalculationPageSkills(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.025f; int row = 7; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{XPLang("adminmenu_019", player.UserIDString)} - Based off current settings (For reference only) (BETA)", 1, 0.090f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationslevels 0 0", 4, height, 12, "0 0 0 1", "Levels", "0.02", "0.12", TextAnchor.MiddleCenter, "1 1 1 1"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationsranks 0", 4, height, 12, "0 0 0 1", "Ranks", "0.13", "0.23", TextAnchor.MiddleCenter, "1 1 1 1"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationsstats", 4, height, 12, "0 0 0 1", "Stats", "0.24", "0.34", TextAnchor.MiddleCenter, "1 1 1 1"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUIButton($"xp.admin calculationsskills", 4, height, 12, "0 0 0 1", "Skills", "0.35", "0.45", TextAnchor.MiddleCenter, "0 1 0 1"), XPerienceAdminPanelCalculations); // Level #region Level / Ranks int levelskillpoints = config.xpLevel.skillpointsperlvl * config.xpLevel.maxlevel; int rankskillpoints = ((config.xpLevel.skillpointsperlvl + (config.xpLevelRanks.rankskillpointincrease * config.xpLevelRanks.maxresetrank)) * config.xpLevel.maxlevel) + (config.xpLevelRanks.rankskillpointstart * config.xpLevelRanks.maxresetrank); int totalrankskillpoints = 0; int perrankskillpoints = 0; if (!config.xpLevelRanks.resetallstatsskills) { for (int x = 0; x <= config.xpLevelRanks.maxresetrank; x++) { for (int i = 0; i <= config.xpLevel.maxlevel + 1; i++) { int c = (config.xpLevel.statpointsperlvl + config.xpLevelRanks.rankstatpointincrease * x) * i; totalrankskillpoints = c + (config.xpLevelRanks.rankstatpointstart * x); } perrankskillpoints += totalrankskillpoints; } rankskillpoints = perrankskillpoints; } ControlPanelelements.Add(XPUILabel($"[Level / Rank Calculations]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; ControlPanelelements.Add(XPUILabel($"Max Level:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.xpLevel.maxlevel}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Total Stat Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{levelskillpoints}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.36", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; ControlPanelelements.Add(XPUILabel($"Max Rank:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.xpLevelRanks.maxresetrank}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Total Stat Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{rankskillpoints}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.36", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); #endregion // Skills #region Skills row++; row++; ControlPanelelements.Add(XPUILabel($"[Skill Calculations]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; // Woodcutter int totalwoodcutter = 0; if (config.woodcutter.maxlvl > 0) { for (int i = 1; i <= config.woodcutter.maxlvl; i++) { int woodcutter = config.woodcutter.costmultiplier * i; totalwoodcutter += woodcutter; } totalwoodcutter += config.woodcutter.pointcoststart - config.woodcutter.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max WoodCutter:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.woodcutter.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Skill Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalwoodcutter}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Smithy int totalsmithy = 0; if (config.smithy.maxlvl > 0) { for (int i = 1; i <= config.smithy.maxlvl; i++) { int smithy = config.smithy.costmultiplier * i; totalsmithy += smithy; } totalsmithy += config.smithy.pointcoststart - config.smithy.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Smithy:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.smithy.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Skill Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalsmithy}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Miner int totalminer = 0; if (config.miner.maxlvl > 0) { for (int i = 1; i <= config.miner.maxlvl; i++) { int miner = config.miner.costmultiplier * i; totalminer += miner; } totalminer += config.miner.pointcoststart - config.miner.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Miner:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.miner.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Skill Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalminer}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Forager int totalforager = 0; if (config.forager.maxlvl > 0) { for (int i = 1; i <= config.forager.maxlvl; i++) { int forager = config.forager.costmultiplier * i; totalforager += forager; } totalforager += config.forager.pointcoststart - config.forager.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Forager:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.forager.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Skill Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalforager}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Hunter int totalhunter = 0; if (config.hunter.maxlvl > 0) { for (int i = 1; i <= config.hunter.maxlvl; i++) { int hunter = config.hunter.costmultiplier * i; totalhunter += hunter; } totalhunter += config.hunter.pointcoststart - config.hunter.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Hunter:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.hunter.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Skill Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalhunter}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Crafter int totalcrafter = 0; if (config.crafter.maxlvl > 0) { for (int i = 1; i <= config.crafter.maxlvl; i++) { int crafter = config.crafter.costmultiplier * i; totalcrafter += crafter; } totalcrafter += config.crafter.pointcoststart - config.crafter.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Crafter:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.crafter.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Skill Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalcrafter}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Framer int totalframer = 0; if (config.framer.maxlvl > 0) { for (int i = 1; i <= config.framer.maxlvl; i++) { int framer = config.framer.costmultiplier * i; totalframer += framer; } totalframer += config.framer.pointcoststart - config.framer.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Framer:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.framer.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Skill Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalframer}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Fisher int totalfisher = 0; if (config.fisher.maxlvl > 0) { for (int i = 1; i <= config.fisher.maxlvl; i++) { int fisher = config.fisher.costmultiplier * i; totalfisher += fisher; } totalfisher += config.fisher.pointcoststart - config.fisher.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Fisher:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.fisher.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Skill Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalfisher}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Medic int totalmedic = 0; if (config.medic.maxlvl > 0) { for (int i = 1; i <= config.medic.maxlvl; i++) { int medic = config.medic.costmultiplier * i; totalmedic += medic; } totalmedic += config.medic.pointcoststart - config.medic.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Medic:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.medic.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Skill Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalmedic}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Scavenger int totalscavenger = 0; if (config.scavenger.maxlvl > 0) { for (int i = 1; i <= config.scavenger.maxlvl; i++) { int scavenger = config.scavenger.costmultiplier * i; totalscavenger += scavenger; } totalscavenger += config.scavenger.pointcoststart - config.scavenger.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Scavenger:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.scavenger.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Skill Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalscavenger}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Electrician int totalelectrician = 0; if (config.electrician.maxlvl > 0) { for (int i = 1; i <= config.electrician.maxlvl; i++) { int electrician = config.electrician.costmultiplier * i; totalelectrician += electrician; } totalelectrician += config.electrician.pointcoststart - config.electrician.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Electrician:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.electrician.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Skill Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalelectrician}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Tamer int totaltamer = 0; if ((Pets != null || PersonalAnimal != null) && config.tamer.maxlvl > 0) { for (int i = 1; i <= config.tamer.maxlvl; i++) { int tamer = config.tamer.costmultiplier * i; totaltamer += tamer; } totaltamer += config.tamer.pointcoststart - config.tamer.costmultiplier; ControlPanelelements.Add(XPUILabel($"Max Tamer:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.10", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{config.tamer.maxlvl}", row, height, TextAnchor.MiddleLeft, 13, "0.11", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"Skill Points:", row, height, TextAnchor.MiddleLeft, 13, "0.16", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totaltamer}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); row++; } // Total Skill Points Required row++; int totalallskills = totalwoodcutter + totalsmithy + totalminer + totalforager + totalhunter + totalcrafter + totalframer + totalfisher + totalmedic + totalscavenger + totalelectrician + totaltamer; ControlPanelelements.Add(XPUILabel($"Total Skill Points Required:", row, height, TextAnchor.MiddleLeft, 13, "0.01", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); ControlPanelelements.Add(XPUILabel($"{totalallskills}", row, height, TextAnchor.MiddleLeft, 13, "0.26", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelCalculations); #endregion // End CuiHelper.AddUi(player, ControlPanelelements); } private void AdminTimerColorPage(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.026f; int row = 4; string lableL = "0.01"; string lableR = "0.20"; string valueL = "0.20"; string valueR = "0.25"; string setting1L = "0.26"; string setting1R = "0.27"; string setting2L = "0.28"; string setting2R = "0.29"; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"Other Settings", 1, 0.090f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); // Main UI Settings #region Live Stats & UI / Chat Settings ControlPanelelements.Add(XPUILabel($"[Live Stats & UI / Chat Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); // Allow LiveStats Location row++; ControlPanelelements.Add(XPUILabel($"Allow Players to Move UI:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.liveuistatslocationmoveable}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultliveuimoveable 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultliveuimoveable 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Default Location row++; ControlPanelelements.Add(XPUILabel($"Default Location:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.liveuistatslocation}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultliveui 1 false", row, height, 12, "0.0 1.0 0.0 0", "1", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultliveui 2 false", row, height, 12, "1.0 0.0 0.0 0", "2", setting2L, setting2R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultliveui 3 false", row, height, 12, "0.0 1.0 0.0 0", "3", "0.30", "0.31", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultliveui 4 false", row, height, 12, "1.0 0.0 0.0 0", "4", "0.32", "0.33", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultliveui 5 false", row, height, 12, "1.0 0.0 0.0 0", "5", "0.34", "0.35", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); /* // Show Fuel Guage (removed) row++; ControlPanelelements.Add(XPUILabel($"Show Fuel Guage UI:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.showfuelguage}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor showfuelguage 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor showfuelguage 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Show Speedometer (removed) row++; ControlPanelelements.Add(XPUILabel($"Show Speedometer UI:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.showspeedometer}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor showspeedometer 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor showspeedometer 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); */ // Player Avatar row++; ControlPanelelements.Add(XPUILabel($"Use Player Avatar:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.useplayeravatar}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor useplayeravatar 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor useplayeravatar 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Enable Dash Panel row++; ControlPanelelements.Add(XPUILabel($"Enable Dash Panel:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.enabledashpanel}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor enabledashpanel 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor enabledashpanel 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Speedometer Type row++; string speedometer = "MPH"; if (config.defaultOptions.speedometertype == 1) { speedometer = "MPH"; } if (config.defaultOptions.speedometertype == 2) { speedometer = "KPH"; } ControlPanelelements.Add(XPUILabel($"Speedometer Type:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {speedometer}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor speedometertype 1 false", row, height, 12, "0.0 1.0 0.0 0", "MPH", setting1L, setting2L, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor speedometertype 2 false", row, height, 12, "1.0 0.0 0.0 0", "KPH", setting2R, "0.31", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Progressive Level Icons row++; ControlPanelelements.Add(XPUILabel($"Use Progressive Level Icons:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.useprogressivelevelicons}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor useprogressivelevelicons 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor useprogressivelevelicons 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Show Profile in Chat row++; ControlPanelelements.Add(XPUILabel($"Show Player Stats in Chat On Connect:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.showchatprofileonconnect}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor showchatprofile 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor showchatprofile 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Show Online Status row++; ControlPanelelements.Add(XPUILabel($"Show Online Status:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.showonlinestatus}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor showonlinestatus 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor showonlinestatus 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Show Unused Effects row++; ControlPanelelements.Add(XPUILabel($"Show Unused Effects in UI:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.showunusedeffects}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor showunusedeffects 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor showunusedeffects 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Notifcation Cooldown row++; ControlPanelelements.Add(XPUILabel($"Notify Message Cooldown: (seconds)", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.NotifcationCooldown}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor NotifcationCooldown {config.defaultOptions.NotifcationCooldown + 1} false", row, height, 12, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor NotifcationCooldown {config.defaultOptions.NotifcationCooldown - 1} false", row, height, 12, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Show Armor Absorb Chat row++; ControlPanelelements.Add(XPUILabel($"Show Armor Absorb Chat Messages:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.disablearmorchat}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor armorchat 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor armorchat 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Player Search row++; ControlPanelelements.Add(XPUILabel($"Allow Player Search:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.allowplayersearch}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor allowplayersearch 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor allowplayersearch 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Player Reset row++; ControlPanelelements.Add(XPUILabel($"Allow Player Reset:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.allowplayerreset}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor allowplayerreset 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor allowplayerreset 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Top Player Per Page string max = config.defaultOptions.topplayersperpage.ToString(); if (config.defaultOptions.topplayersperpage >= 40) { max = "max"; } row++; ControlPanelelements.Add(XPUILabel($"Top Players Per Page:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {max}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); if (config.defaultOptions.topplayersperpage < 40) { ControlPanelelements.Add(XPUIButton($"xp.config timercolor topplayersperpage {config.defaultOptions.topplayersperpage + 1} false", row, height, 12, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); } ControlPanelelements.Add(XPUIButton($"xp.config timercolor topplayersperpage {config.defaultOptions.topplayersperpage - 1} false", row, height, 12, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); row++; // Live XP Bar Color ControlPanelelements.Add(XPUILabel($"XP Bar Color:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.xpbar}", row, height, TextAnchor.MiddleLeft, 12, valueL, "0.29", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color xpbar blue", row, height, 12, "0.0 1.0 0.0 0", "B", "0.30", "0.31", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color xpbar cyan", row, height, 12, "1.0 0.0 0.0 0", "C", "0.32", "0.33", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color xpbar grey", row, height, 12, "0.0 1.0 0.0 0", "G", "0.34", "0.35", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color xpbar green", row, height, 12, "1.0 0.0 0.0 0", "G", "0.36", "0.37", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color xpbar magenta", row, height, 12, "1.0 0.0 0.0 0", "M", "0.38", "0.39", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color xpbar red", row, height, 12, "0.0 1.0 0.0 0", "R", "0.40", "0.41", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color xpbar yellow", row, height, 12, "1.0 0.0 0.0 0", "Y", "0.42", "0.43", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); row++; // Live Armor Bar Color ControlPanelelements.Add(XPUILabel($"Armor Bar Color:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.armorbar}", row, height, TextAnchor.MiddleLeft, 12, valueL, "0.29", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color armorbar blue", row, height, 12, "0.0 1.0 0.0 0", "B", "0.30", "0.31", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color armorbar cyan", row, height, 12, "1.0 0.0 0.0 0", "C", "0.32", "0.33", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color armorbar grey", row, height, 12, "0.0 1.0 0.0 0", "G", "0.34", "0.35", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color armorbar green", row, height, 12, "1.0 0.0 0.0 0", "G", "0.36", "0.37", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color armorbar magenta", row, height, 12, "1.0 0.0 0.0 0", "M", "0.38", "0.39", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color armorbar red", row, height, 12, "0.0 1.0 0.0 0", "R", "0.40", "0.41", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color armorbar yellow", row, height, 12, "1.0 0.0 0.0 0", "Y", "0.42", "0.43", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); #endregion // Stat / Skill Settings #region Stat / Skill Settings row++; row++; ControlPanelelements.Add(XPUILabel($"[Stat / Skill Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); // Drops to Inventory row++; ControlPanelelements.Add(XPUILabel($"Drops go in player inventory:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.dropsgotoplayerinventory}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor dropsgotoplayerinventory 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor dropsgotoplayerinventory 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Use Permissions row++; ControlPanelelements.Add(XPUILabel($"Use Permissions:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.userpermissions}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor userpermissions 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor userpermissions 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Show Confirmation Prompt row++; ControlPanelelements.Add(XPUILabel($"Show Confirmation Prompt:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.enableconfirmationprompt}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor enableconfirmationprompt 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor enableconfirmationprompt 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Show Chat Messages row++; ControlPanelelements.Add(XPUILabel($"Show Chat Notifications:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.showchatnotifications}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor showchatnotifications 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor showchatnotifications 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Allow Respec row++; ControlPanelelements.Add(XPUILabel($"Allow Single Respecs (bypasses timers):", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.allowrespec}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor allowrespec 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor allowrespec 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Restrict Resets row++; ControlPanelelements.Add(XPUILabel($"Restrict Resets:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.restristresets}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultrestristresets 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultrestristresets 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Stat Reset Timer row++; ControlPanelelements.Add(XPUILabel($"Stat Reset Timer Mins:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.resetminsstats}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultstattimer {config.defaultOptions.resetminsstats + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultstattimer {config.defaultOptions.resetminsstats - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Skill Reset Timer row++; ControlPanelelements.Add(XPUILabel($"Skill Reset Timer Mins:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.resetminsskills}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultskilltimer {config.defaultOptions.resetminsskills + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultskilltimer {config.defaultOptions.resetminsskills - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // VIP Stat Reset Timer row++; ControlPanelelements.Add(XPUILabel($"VIP Stat Reset Timer Mins:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.vipresetminstats}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultvipstattimer {config.defaultOptions.vipresetminstats + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultvipstattimer {config.defaultOptions.vipresetminstats - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // VIP Skill Reset Timer row++; ControlPanelelements.Add(XPUILabel($"VIP Skill Reset Timer Mins:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.vipresetminsskills}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultvipskilltimer {config.defaultOptions.vipresetminsskills + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultvipskilltimer {config.defaultOptions.vipresetminsskills - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Fix Data Reset Timer row++; ControlPanelelements.Add(XPUILabel($"Player Fix Data Timer Mins:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.playerfixdatatimer}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultplayerfixdata {config.defaultOptions.playerfixdatatimer + 1} false", row, height, 18, "0.0 1.0 0.0 0", "⇧", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultplayerfixdata {config.defaultOptions.playerfixdatatimer - 1} false", row, height, 18, "1.0 0.0 0.0 0", "⇩", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Disable Fix Data row++; ControlPanelelements.Add(XPUILabel($"Disable Fix Data (players):", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.disableplayerfixdata}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultfixdatadisable 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultfixdatadisable 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Admin Bypass Resets row++; ControlPanelelements.Add(XPUILabel($"Admins Bypass:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.bypassadminreset}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultadminbypass 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaultadminbypass 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); // Hardcore Mode Resets row++; ControlPanelelements.Add(XPUILabel($"Hardcore Mode (No Resets):", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.hardcorenoreset}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaulthardcore 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.config timercolor defaulthardcore 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); #endregion // Column Two int rowtwo = 4; // Color Options #region Color Options ControlPanelelements.Add(XPUILabel($"[UI Text Color Settings]", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.50", "0.98", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); // Default rowtwo++; ControlPanelelements.Add(XPUILabel($"Default Color:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.defaultcolor}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color defaultuicolor blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color defaultuicolor cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color defaultuicolor grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color defaultuicolor green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color defaultuicolor magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color defaultuicolor red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color defaultuicolor white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color defaultuicolor yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Rank Name rowtwo++; ControlPanelelements.Add(XPUILabel($"Rank Name Color:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.rankname}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ranknameuicolor blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ranknameuicolor cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ranknameuicolor grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ranknameuicolor green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ranknameuicolor magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ranknameuicolor red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ranknameuicolor white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ranknameuicolor yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Rank Level rowtwo++; ControlPanelelements.Add(XPUILabel($"Rank Level Color:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.ranklevel}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankleveluicolor blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankleveluicolor cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankleveluicolor grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankleveluicolor green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankleveluicolor magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankleveluicolor red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankleveluicolor white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankleveluicolor yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Rank XP rowtwo++; ControlPanelelements.Add(XPUILabel($"Rank XP Color:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.rankxp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankxpuicolor blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankxpuicolor cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankxpuicolor grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankxpuicolor green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankxpuicolor magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankxpuicolor red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankxpuicolor white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color rankxpuicolor yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Level rowtwo++; ControlPanelelements.Add(XPUILabel($"Level Color:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.level}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color leveluicolor blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color leveluicolor cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color leveluicolor grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color leveluicolor green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color leveluicolor magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color leveluicolor red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color leveluicolor white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color leveluicolor yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Experience rowtwo++; ControlPanelelements.Add(XPUILabel($"Experience Color:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.experience}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color xpuicolor blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color xpuicolor cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color xpuicolor grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color xpuicolor green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color xpuicolor magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color xpuicolor red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color xpuicolor white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color xpuicolor yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Next Level rowtwo++; ControlPanelelements.Add(XPUILabel($"Next Level Color:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.nextlevel}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color nextlvluicolor blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color nextlvluicolor cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color nextlvluicolor grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color nextlvluicolor green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color nextlvluicolor magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color nextlvluicolor red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color nextlvluicolor white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color nextlvluicolor yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Remaining XP rowtwo++; ControlPanelelements.Add(XPUILabel($"Remaining XP Color:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.remainingxp}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color remainuicolor blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color remainuicolor cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color remainuicolor grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color remainuicolor green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color remainuicolor magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color remainuicolor red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color remainuicolor white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color remainuicolor yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Stats / Skills / Levels rowtwo++; ControlPanelelements.Add(XPUILabel($"Stats/Skills/Levels Color:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.statskilllevels}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ssluicolor blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ssluicolor cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ssluicolor grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ssluicolor green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ssluicolor magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ssluicolor red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ssluicolor white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color ssluicolor yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Perks rowtwo++; ControlPanelelements.Add(XPUILabel($"Perks Color:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.perks}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color perksuicolor blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color perksuicolor cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color perksuicolor grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color perksuicolor green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color perksuicolor magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color perksuicolor red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color perksuicolor white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color perksuicolor yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Unspent Points rowtwo++; ControlPanelelements.Add(XPUILabel($"Unspent Points Color:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.unspentpoints}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color upointsuicolor blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color upointsuicolor cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color upointsuicolor grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color upointsuicolor green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color upointsuicolor magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color upointsuicolor red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color upointsuicolor white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color upointsuicolor yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Spent Points rowtwo++; ControlPanelelements.Add(XPUILabel($"Spent Points Color:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.spentpoints}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color spointsuicolor blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color spointsuicolor cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color spointsuicolor grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color spointsuicolor green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color spointsuicolor magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color spointsuicolor red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color spointsuicolor white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color spointsuicolor yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Pets rowtwo++; ControlPanelelements.Add(XPUILabel($"Pets Color:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.pets}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color petsuicolor blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color petsuicolor cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color petsuicolor grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color petsuicolor green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color petsuicolor magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color petsuicolor red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color petsuicolor white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color petsuicolor yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); rowtwo++; rowtwo++; // Stats ControlPanelelements.Add(XPUILabel($"[Stats Label Color Settings]", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.50", "0.98", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); // Mentality rowtwo++; ControlPanelelements.Add(XPUILabel($"Mentality:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.mentality}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color mentality blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color mentality cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color mentality grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color mentality green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color mentality magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color mentality red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color mentality white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color mentality yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Dexterity rowtwo++; ControlPanelelements.Add(XPUILabel($"Dexterity:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.dexterity}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color dexterity blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color dexterity cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color dexterity grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color dexterity green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color dexterity magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color dexterity red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color dexterity white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color dexterity yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Might rowtwo++; ControlPanelelements.Add(XPUILabel($"Might:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.might}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color might blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color might cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color might grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color might green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color might magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color might red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color might white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color might yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Captaincy rowtwo++; ControlPanelelements.Add(XPUILabel($"Captaincy:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.captaincy}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color captaincy blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color captaincy cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color captaincy grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color captaincy green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color captaincy magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color captaincy red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color captaincy white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color captaincy yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); // Weaponry rowtwo++; ControlPanelelements.Add(XPUILabel($"Weaponry:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.weaponry}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color weaponry blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color weaponry cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color weaponry grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color weaponry green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color weaponry magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color weaponry red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color weaponry white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color weaponry yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); rowtwo++; rowtwo++; // Skills ControlPanelelements.Add(XPUILabel($"[Skill Label Color Settings]", rowtwo, height, TextAnchor.MiddleLeft, 15, "0.50", "0.98", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); rowtwo++; // WoodCutter ControlPanelelements.Add(XPUILabel($"WoodCutter:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.woodcutter}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color woodcutter blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color woodcutter cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color woodcutter grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color woodcutter green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color woodcutter magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color woodcutter red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color woodcutter white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color woodcutter yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); rowtwo++; // Smithy ControlPanelelements.Add(XPUILabel($"Smithy:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.smithy}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color smithy blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color smithy cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color smithy grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color smithy green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color smithy magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color smithy red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color smithy white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color smithy yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); rowtwo++; // Miner ControlPanelelements.Add(XPUILabel($"Miner:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.miner}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color miner blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color miner cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color miner grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color miner green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color miner magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color miner red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color miner white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color miner yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); rowtwo++; // Forager ControlPanelelements.Add(XPUILabel($"Forager:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.forager}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color forager blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color forager cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color forager grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color forager green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color forager magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color forager red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color forager white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color forager yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); rowtwo++; // Hunter ControlPanelelements.Add(XPUILabel($"Hunter:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.hunter}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color hunter blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color hunter cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color hunter grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color hunter green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color hunter magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color hunter red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color hunter white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color hunter yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); rowtwo++; // Fisher ControlPanelelements.Add(XPUILabel($"Fisher:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.fisher}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color fisher blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color fisher cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color fisher grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color fisher green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color fisher magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color fisher red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color fisher white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color fisher yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); rowtwo++; // Crafter ControlPanelelements.Add(XPUILabel($"Crafter:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.crafter}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color crafter blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color crafter cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color crafter grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color crafter green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color crafter magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color crafter red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color crafter white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color crafter yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); rowtwo++; // Framer ControlPanelelements.Add(XPUILabel($"Framer:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.framer}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color framer blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color framer cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color framer grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color framer green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color framer magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color framer red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color framer white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color framer yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); rowtwo++; // Medic ControlPanelelements.Add(XPUILabel($"Medic:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.medic}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color medic blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color medic cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color medic grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color medic green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color medic magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color medic red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color medic white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color medic yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); rowtwo++; // Scavenger ControlPanelelements.Add(XPUILabel($"Scavenger:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.scavenger}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color scavenger blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color scavenger cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color scavenger grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color scavenger green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color scavenger magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color scavenger red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color scavenger white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color scavenger yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); rowtwo++; // Electrician ControlPanelelements.Add(XPUILabel($"Electrician:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.electrician}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color electrician blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color electrician cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color electrician grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color electrician green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color electrician magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color electrician red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color electrician white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color electrician yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); rowtwo++; // Tamer ControlPanelelements.Add(XPUILabel($"Tamer:", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.50", "0.60", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUILabel($"| {config.uitextColor.tamer}", rowtwo, height, TextAnchor.MiddleLeft, 12, "0.60", "0.70", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color tamer blue", rowtwo, height, 12, "0.0 1.0 0.0 0", "B", "0.70", "0.71", TextAnchor.MiddleCenter, "0.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color tamer cyan", rowtwo, height, 12, "1.0 0.0 0.0 0", "C", "0.72", "0.73", TextAnchor.MiddleCenter, "0.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color tamer grey", rowtwo, height, 12, "0.0 1.0 0.0 0", "G", "0.74", "0.75", TextAnchor.MiddleCenter, "0.0 0.5 0.5 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color tamer green", rowtwo, height, 12, "1.0 0.0 0.0 0", "G", "0.76", "0.77", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color tamer magenta", rowtwo, height, 12, "1.0 0.0 0.0 0", "M", "0.78", "0.79", TextAnchor.MiddleCenter, "1.0 0.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color tamer red", rowtwo, height, 12, "0.0 1.0 0.0 0", "R", "0.80", "0.81", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color tamer white", rowtwo, height, 12, "1.0 0.0 0.0 0", "W", "0.82", "0.83", TextAnchor.MiddleCenter, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelTimerColor); ControlPanelelements.Add(XPUIButton($"xp.color tamer yellow", rowtwo, height, 12, "1.0 0.0 0.0 0", "Y", "0.84", "0.85", TextAnchor.MiddleCenter, "1.0 0.92 0.016 1.0"), XPerienceAdminPanelTimerColor); #endregion // End CuiHelper.AddUi(player, ControlPanelelements); return; } private void AdminOtherModsPage(BasePlayer player, string mod) { if (mod == "main") { var ControlPanelelements = new CuiElementContainer(); var height = 0.023f; int fontsize = 11; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"Other Mod Settings", 1, 0.05f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel("You must have the listed mods installed before editing their settings. Select the mod you wish to edit below. These mods are not required to use XPerience.", 2, 0.05f, TextAnchor.MiddleLeft, 15, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); int row = 6; // Mod List ControlPanelelements.Add(XPUIButton("xp.admin othermods killrecords", row, height, fontsize, "0.0 0.0 0.0 0.7", "Kill Records", "0.02", "0.20", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); row++; row++; ControlPanelelements.Add(XPUIButton("xp.admin othermods econ", row, height, fontsize, "0.0 0.0 0.0 0.7", "Economics", "0.02", "0.20", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); row++; row++; ControlPanelelements.Add(XPUIButton("xp.admin othermods srewards", row, height, fontsize, "0.0 0.0 0.0 0.7", "Server Rewards", "0.02", "0.20", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); row++; row++; ControlPanelelements.Add(XPUIButton("xp.admin othermods uinotify", row, height, fontsize, "0.0 0.0 0.0 0.7", "UI Notify", "0.02", "0.20", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); row++; row++; ControlPanelelements.Add(XPUIButton("xp.admin othermods clans", row, height, fontsize, "0.0 0.0 0.0 0.7", "Clans", "0.02", "0.20", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); row++; row++; ControlPanelelements.Add(XPUIButton("xp.admin othermods archery", row, height, fontsize, "0.0 0.0 0.0 0.7", "Archery", "0.02", "0.20", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); row++; row++; ControlPanelelements.Add(XPUIButton("xp.admin othermods wizardry", row, height, fontsize, "0.0 0.0 0.0 0.7", "Wizardry", "0.02", "0.20", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); row++; row++; ControlPanelelements.Add(XPUIButton("xp.admin othermods backpacks", row, height, fontsize, "0.0 0.0 0.0 0.7", "Backpacks", "0.02", "0.20", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); row++; row++; ControlPanelelements.Add(XPUIButton("xp.admin othermods pets", row, height, fontsize, "0.0 0.0 0.0 0.7", "Pets/Personal Animals (Tamer Skill)", "0.02", "0.20", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); row++; row++; // UI End CuiHelper.AddUi(player, ControlPanelelements); return; } if (mod == "killrecords") { OtherMods_KillRecords(player); return; } if (mod == "econ") { OtherMods_Economics(player); return; } if (mod == "srewards") { OtherMods_ServerRewards(player); return; } if (mod == "uinotify") { OtherMods_UINotify(player); return; } if (mod == "clans") { OtherMods_Clans(player); return; } if (mod == "archery") { OtherMods_Archery(player); return; } if (mod == "wizardry") { OtherMods_Wizardry(player); return; } if (mod == "backpacks") { OtherMods_Backpacks(player); return; } if (mod == "pets") { OtherMods_Pets(player); return; } } #region Other Mods private void OtherMods_KillRecords(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.023f; int buttonsize = 12; int fontsize = 11; int row = 5; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1 1", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton("xp.admin othermods main", 2, 0.030f, 15, "0.0 0.0 0.0 0.7", $"<-- Back To Mod List", "0.02", "0.15", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"[Kill Records Settings] (Requires KillRecords plugin)", 3, 0.035f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); #region KillRecords // KR Enable row++; ControlPanelelements.Add(XPUILabel($"Enable KillRecords Bonus:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpBonus.enablebonus}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods krenable 0 true killrecords", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods krenable 0 false killrecords", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // KR Button row++; ControlPanelelements.Add(XPUILabel($"Show KillRecords Button:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpBonus.showkrbutton}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods krshowbutton 0 true killrecords", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods krshowbutton 0 false killrecords", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // KR Required Kills row++; ControlPanelelements.Add(XPUILabel($"Required Kills:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpBonus.requiredkills}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods krrequiredkills {config.xpBonus.requiredkills + 5} false killrecords", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods krrequiredkills {config.xpBonus.requiredkills - 5} false killrecords", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // KR Bonus Amount row++; ControlPanelelements.Add(XPUILabel($"Bonus XP Amount:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpBonus.bonusxp}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods krbonusamount {config.xpBonus.bonusxp + 5} false killrecords", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods krbonusamount {config.xpBonus.bonusxp - 5} false killrecords", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // KR Bonus End row++; ControlPanelelements.Add(XPUILabel($"Bonus XP End:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpBonus.endbonus}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods krbonusend {config.xpBonus.endbonus + 10} false killrecords", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods krbonusend {config.xpBonus.endbonus - 10} false killrecords", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // KR Enable MultiBonus row++; ControlPanelelements.Add(XPUILabel($"Multiple Bonus:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpBonus.multibonus}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods krenablemulti 0 true killrecords", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods krenablemulti 0 false killrecords", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // KR MultiBonus Type row++; ControlPanelelements.Add(XPUILabel($"Multiple Bonus Type:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpBonus.multibonustype}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.26", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods krmultitype 0 true killrecords", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods krmultitype 0 false killrecords", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); #endregion CuiHelper.AddUi(player, ControlPanelelements); } private void OtherMods_Economics(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.023f; int buttonsize = 12; int fontsize = 11; int row = 5; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton("xp.admin othermods main", 2, 0.030f, 15, "0.0 0.0 0.0 0.7", $"<-- Back To Mod List", "0.02", "0.15", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"[Economics Settings] (Requires Economics plugin)", 3, 0.035f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); #region Economics // Show Profile Balance row++; ControlPanelelements.Add(XPUILabel($"Show Balance in Profiles:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.showbalanceprofile}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods showbalanceprofile 0 true econ", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods showbalanceprofile 0 false econ", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable Levelup Reward row++; ControlPanelelements.Add(XPUILabel($"Enable Level Up Reward:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econlevelup}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econlevelup 0 true econ", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econlevelup 0 false econ", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable Leveldown Reduction row++; ControlPanelelements.Add(XPUILabel($"Enable Level Down Reduction:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econleveldown}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econleveldown 0 true econ", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econleveldown 0 false econ", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Level Up Reward Amount row++; ControlPanelelements.Add(XPUILabel($"Level Up Reward Amount:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econlevelreward}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econlevelreward {config.xpEcon.econlevelreward + 10} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econlevelreward {config.xpEcon.econlevelreward - 10} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Level Down Reduction row++; ControlPanelelements.Add(XPUILabel($"Level Loss Reduction:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econlevelreduction}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econlevelreduction {config.xpEcon.econlevelreduction + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econlevelreduction {config.xpEcon.econlevelreduction - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable ResetStats Cost row++; ControlPanelelements.Add(XPUILabel($"Enable Reset Stats Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econresetstats}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetstats 0 true econ", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetstats 0 false econ", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable ResetSkill Cost row++; ControlPanelelements.Add(XPUILabel($"Enable Reset Skills Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econresetskills}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetskills 0 true econ", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetskills 0 false econ", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable RespecStats Cost row++; ControlPanelelements.Add(XPUILabel($"Enable Respec Stat Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econresetstat}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetstat 0 true econ", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetstat 0 false econ", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable RespecSkill Cost row++; ControlPanelelements.Add(XPUILabel($"Enable Respec Skill Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econresetskill}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetskill 0 true econ", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetskill 0 false econ", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Reset Stats Cost row++; ControlPanelelements.Add(XPUILabel($"Reset Stats Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econresetstatscost}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetstatscost {config.xpEcon.econresetstatscost + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetstatscost {config.xpEcon.econresetstatscost - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Reset Skills Cost row++; ControlPanelelements.Add(XPUILabel($"Reset Skills Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econresetskillscost}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetskillscost {config.xpEcon.econresetskillscost + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetskillscost {config.xpEcon.econresetskillscost - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Respec Stat Cost row++; ControlPanelelements.Add(XPUILabel($"Respec Stat Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econresetstatcost}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetstatcost {config.xpEcon.econresetstatcost + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetstatcost {config.xpEcon.econresetstatcost - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Respec Skill Cost row++; ControlPanelelements.Add(XPUILabel($"Respec Skill Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econresetskillcost}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetskillcost {config.xpEcon.econresetskillcost + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econresetskillcost {config.xpEcon.econresetskillcost - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable Stat Level Cost row++; ControlPanelelements.Add(XPUILabel($"Enable Stat Level Up Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econstatlevelcost}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econstatlevelcost 0 true econ", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econstatlevelcost 0 false econ", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Stat Level Up Multiplier row++; ControlPanelelements.Add(XPUILabel($"Stat Cost Multiplier:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econstatlevelcostmultiplier}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econstatlevelcostmultiplier {config.xpEcon.econstatlevelcostmultiplier + 1} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econstatlevelcostmultiplier {config.xpEcon.econstatlevelcostmultiplier - 1} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Stat Costs row++; ControlPanelelements.Add(XPUILabel($"Mentality Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econmentality}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econmentality {config.xpEcon.econmentality + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econmentality {config.xpEcon.econmentality - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Dexterity Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econdexterity}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econdexterity {config.xpEcon.econdexterity + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econdexterity {config.xpEcon.econdexterity - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Might Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econmight}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econmight {config.xpEcon.econmight + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econmight {config.xpEcon.econmight - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Captaincy Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econcaptaincy}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econcaptaincy {config.xpEcon.econcaptaincy + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econcaptaincy {config.xpEcon.econcaptaincy - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Weaponry Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econweaponry}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econweaponry {config.xpEcon.econweaponry + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econweaponry {config.xpEcon.econweaponry - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable Skill Level Cost row++; ControlPanelelements.Add(XPUILabel($"Enable Skill Level Up Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econskilllevelcost}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econskilllevelcost 0 true econ", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econskilllevelcost 0 false econ", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Skill Level Up Multiplier row++; ControlPanelelements.Add(XPUILabel($"Skill Cost Multiplier:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econskilllevelcostmultiplier}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econskilllevelcostmultiplier {config.xpEcon.econskilllevelcostmultiplier + 1} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econskilllevelcostmultiplier {config.xpEcon.econskilllevelcostmultiplier - 1} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Skill Costs row++; ControlPanelelements.Add(XPUILabel($"WoodCutter Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econwoodcutter}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econwoodcutter {config.xpEcon.econwoodcutter + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econwoodcutter {config.xpEcon.econwoodcutter - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Smithy Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econsmithy}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econsmithy {config.xpEcon.econsmithy + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econsmithy {config.xpEcon.econsmithy - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Miner Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econminer}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econminer {config.xpEcon.econminer + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econminer {config.xpEcon.econminer - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Forager Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econforager}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econforager {config.xpEcon.econforager + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econforager {config.xpEcon.econforager - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Hunter Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econhunter}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econhunter {config.xpEcon.econhunter + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econhunter {config.xpEcon.econhunter - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Fisher Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econfisher}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econfisher {config.xpEcon.econfisher + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econfisher {config.xpEcon.econfisher - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Crafter Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econcrafter}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econcrafter {config.xpEcon.econcrafter + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econcrafter {config.xpEcon.econcrafter - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Framer Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econframer}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econframer {config.xpEcon.econframer + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econframer {config.xpEcon.econframer - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Medic Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econmedic}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econmedic {config.xpEcon.econmedic + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econmedic {config.xpEcon.econmedic - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Scavenger Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econscavenger}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econscavenger {config.xpEcon.econscavenger + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econscavenger {config.xpEcon.econscavenger - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Tamer Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpEcon.econtamer}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econtamer {config.xpEcon.econtamer + 5} false econ", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods econtamer {config.xpEcon.econtamer - 5} false econ", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); #endregion CuiHelper.AddUi(player, ControlPanelelements); } private void OtherMods_ServerRewards(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.023f; int buttonsize = 12; int fontsize = 11; int row = 5; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1 1", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton("xp.admin othermods main", 2, 0.030f, 15, "0.0 0.0 0.0 0.7", $"<-- Back To Mod List", "0.02", "0.15", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"[Server Rewards Settings] (Requires Server Rewards plugin)", 3, 0.035f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); #region ServerRewards // Enable Level Up Reward row++; ControlPanelelements.Add(XPUILabel($"Enable Level Up Reward:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardlevelup}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardlevelup 0 true srewards", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardlevelup 0 false srewards", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable Level Down Reduction row++; ControlPanelelements.Add(XPUILabel($"Enable Level Down Reduction:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardleveldown}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardleveldown 0 true srewards", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardleveldown 0 false srewards", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Level Up Amount row++; ControlPanelelements.Add(XPUILabel($"Level Up Amount:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardlevelupamt}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardlevelupamt {config.sRewards.srewardlevelupamt + 1} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardlevelupamt {config.sRewards.srewardlevelupamt - 1} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Level Down Amount row++; ControlPanelelements.Add(XPUILabel($"Level Down Amount:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardleveldownamt}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardleveldownamt {config.sRewards.srewardleveldownamt + 1} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardleveldownamt {config.sRewards.srewardleveldownamt - 1} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable ResetStats Cost row++; ControlPanelelements.Add(XPUILabel($"Enable Reset Stats Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardresetstats}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetstats 0 true srewards", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetstats 0 false srewards", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable ResetSkill Cost row++; ControlPanelelements.Add(XPUILabel($"Enable Reset Skills Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardresetskills}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetskills 0 true srewards", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetskills 0 false srewards", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable RespecStats Cost row++; ControlPanelelements.Add(XPUILabel($"Enable Respec Stat Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardresetstat}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetstat 0 true srewards", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetstat 0 false srewards", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable RespecSkill Cost row++; ControlPanelelements.Add(XPUILabel($"Enable Respec Skill Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardresetskill}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetskill 0 true srewards", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetskill 0 false srewards", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Reset Stats Cost row++; ControlPanelelements.Add(XPUILabel($"Reset Stats Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardresetstatscost}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetstatscost {config.sRewards.srewardresetstatscost + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetstatscost {config.sRewards.srewardresetstatscost - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Reset Skills Cost row++; ControlPanelelements.Add(XPUILabel($"Reset Skills Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardresetskillscost}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetskillscost {config.sRewards.srewardresetskillscost + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetskillscost {config.sRewards.srewardresetskillscost - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Respec Stats Cost row++; ControlPanelelements.Add(XPUILabel($"Respec Stat Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardresetstatcost}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetstatcost {config.sRewards.srewardresetstatcost + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetstatcost {config.sRewards.srewardresetstatcost - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Respec Skills Cost row++; ControlPanelelements.Add(XPUILabel($"Respec Skill Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardresetskillcost}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetskillcost {config.sRewards.srewardresetskillcost + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardresetskillcost {config.sRewards.srewardresetskillcost - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable Stat Level Cost row++; ControlPanelelements.Add(XPUILabel($"Enable Stat Level Up Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardstatlevelcost}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardstatlevelcost 0 true srewards", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardstatlevelcost 0 false srewards", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Stat Level Up Multiplier row++; ControlPanelelements.Add(XPUILabel($"Stat Cost Multiplier:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardstatlevelcostmultiplier}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardstatlevelcostmultiplier {config.sRewards.srewardstatlevelcostmultiplier + 1} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardstatlevelcostmultiplier {config.sRewards.srewardstatlevelcostmultiplier - 1} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Stat Costs row++; ControlPanelelements.Add(XPUILabel($"Mentality Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardmentality}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardmentality {config.sRewards.srewardmentality + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardmentality {config.sRewards.srewardmentality - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Dexterity Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewarddexterity}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewarddexterity {config.sRewards.srewarddexterity + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewarddexterity {config.sRewards.srewarddexterity - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Might Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardmight}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardmight {config.sRewards.srewardmight + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardmight {config.sRewards.srewardmight - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Captaincy Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardcaptaincy}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardcaptaincy {config.sRewards.srewardcaptaincy + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardcaptaincy {config.sRewards.srewardcaptaincy - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Weaponry Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardweaponry}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardweaponry {config.sRewards.srewardweaponry + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardweaponry {config.sRewards.srewardweaponry - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable Skill Level Cost row++; ControlPanelelements.Add(XPUILabel($"Enable Skill Level Up Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardskilllevelcost}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardskilllevelcost 0 true srewards", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardskilllevelcost 0 false srewards", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Skill Level Up Multiplier row++; ControlPanelelements.Add(XPUILabel($"Skill Cost Multiplier:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardskilllevelcostmultiplier}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardskilllevelcostmultiplier {config.sRewards.srewardskilllevelcostmultiplier + 1} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardskilllevelcostmultiplier {config.sRewards.srewardskilllevelcostmultiplier - 1} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Skill Costs row++; ControlPanelelements.Add(XPUILabel($"WoodCutter Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardwoodcutter}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardwoodcutter {config.sRewards.srewardwoodcutter + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardwoodcutter {config.sRewards.srewardwoodcutter - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Smithy Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardsmithy}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardsmithy {config.sRewards.srewardsmithy + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardsmithy {config.sRewards.srewardsmithy - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Miner Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardminer}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardminer {config.sRewards.srewardminer + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardminer {config.sRewards.srewardminer - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Forager Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardforager}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardforager {config.sRewards.srewardforager + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardforager {config.sRewards.srewardforager - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Hunter Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardhunter}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardhunter {config.sRewards.srewardhunter + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardhunter {config.sRewards.srewardhunter - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Fisher Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardfisher}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardfisher {config.sRewards.srewardfisher + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardfisher {config.sRewards.srewardfisher - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Crafter Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardcrafter}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardcrafter {config.sRewards.srewardcrafter + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardcrafter {config.sRewards.srewardcrafter - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Framer Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardframer}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardframer {config.sRewards.srewardframer + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardframer {config.sRewards.srewardframer - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Medic Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardmedic}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardmedic {config.sRewards.srewardmedic + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardmedic {config.sRewards.srewardmedic - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Scavenger Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardscavenger}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardscavenger {config.sRewards.srewardscavenger + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardscavenger {config.sRewards.srewardscavenger - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); row++; ControlPanelelements.Add(XPUILabel($"Tamer Base Cost:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.sRewards.srewardtamer}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardtamer {config.sRewards.srewardtamer + 5} false srewards", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods srewardtamer {config.sRewards.srewardtamer - 5} false srewards", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); #endregion CuiHelper.AddUi(player, ControlPanelelements); } private void OtherMods_UINotify(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.023f; int buttonsize = 12; int fontsize = 11; int row = 5; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1 1", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton("xp.admin othermods main", 2, 0.030f, 15, "0.0 0.0 0.0 0.7", $"<-- Back To Mod List", "0.02", "0.15", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"[UI Notify] (Requires UINotify Plugin)", 3, 0.035f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); #region UINotify // Enable UINotify row++; ControlPanelelements.Add(XPUILabel($"Enable UINotify:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.UiNotifier.useuinotify}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifyenable 0 true uinotify", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifyenable 0 false uinotify", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Disable Chats row++; ControlPanelelements.Add(XPUILabel($"Disable Default Chats:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.UiNotifier.disablechats}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifydisablechats 0 true uinotify", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifydisablechats 0 false uinotify", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // UI XP Gain/Loss row++; ControlPanelelements.Add(XPUILabel($"Show XP Gain/Loss:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.UiNotifier.xpgainloss}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifyxpgainloss 0 true uinotify", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifyxpgainloss 0 false uinotify", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // UI XP Gain/Loss Type row++; ControlPanelelements.Add(XPUILabel($"XP Gain/Loss Message Type:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.UiNotifier.xpgainlosstype}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifyxpgainlosstype {config.UiNotifier.xpgainlosstype + 1} false uinotify", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifyxpgainlosstype {config.UiNotifier.xpgainlosstype - 1} false uinotify", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // UI Level Gain/Loss row++; ControlPanelelements.Add(XPUILabel($"Show Level Gain/Loss:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.UiNotifier.levelupdown}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifylevelgainloss 0 true uinotify", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifylevelgainloss 0 false uinotify", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // UI Level Gain/Loss Type row++; ControlPanelelements.Add(XPUILabel($"Level Gain/Loss Message Type:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.UiNotifier.levelupdowntype}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifylevelgainlosstype {config.UiNotifier.levelupdowntype + 1} false uinotify", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifylevelgainlosstype {config.UiNotifier.levelupdowntype - 1} false uinotify", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // UI Dodge/Block row++; ControlPanelelements.Add(XPUILabel($"Show Dodge/Block:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.UiNotifier.dodgeblock}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifydodgeblock 0 true uinotify", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifydodgeblock 0 false uinotify", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // UI Dodge/Block Type row++; ControlPanelelements.Add(XPUILabel($"Dodge/Block Message Type:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.UiNotifier.dodgeblocktype}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifydodgeblocktype {config.UiNotifier.dodgeblocktype + 1} false uinotify", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifydodgeblocktype {config.UiNotifier.dodgeblocktype - 1} false uinotify", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // UI Criticals row++; ControlPanelelements.Add(XPUILabel($"Show Critical Hits:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.UiNotifier.criticalhit}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifycritical 0 true uinotify", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifycritical 0 false uinotify", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // UI Dodge/Block Type row++; ControlPanelelements.Add(XPUILabel($"Critical Hit Message Type:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.UiNotifier.criticalhittype}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifycriticaltype {config.UiNotifier.criticalhittype + 1} false uinotify", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods uinotifycriticaltype {config.UiNotifier.criticalhittype - 1} false uinotify", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); #endregion CuiHelper.AddUi(player, ControlPanelelements); } private void OtherMods_Clans(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.023f; int buttonsize = 12; int fontsize = 11; int row = 5; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1 1", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton("xp.admin othermods main", 2, 0.030f, 15, "0.0 0.0 0.0 0.7", $"<-- Back To Mod List", "0.02", "0.15", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"[Clans Settings] (Requires Clans plugin)", 3, 0.035f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); #region Clans // Enable Clan Bonus row++; ControlPanelelements.Add(XPUILabel($"Enable Clans Bonus:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpclans.enableclanbonus}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods enableclanbonus 0 true clans", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods enableclanbonus 0 false clans", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable Clan Bonus row++; ControlPanelelements.Add(XPUILabel($"Clans Bonus Amount:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpclans.clanbonusamount * 100}%", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods clanbonusamt {config.xpclans.clanbonusamount + 0.01} false clans", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods clanbonusamt {config.xpclans.clanbonusamount - 0.01} false clans", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable Clan Reduction row++; ControlPanelelements.Add(XPUILabel($"Enable Clans Reduction:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpclans.enableclanreduction}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods enableclanreduction 0 true clans", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods enableclanreduction 0 false clans", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable Clan Bonus row++; ControlPanelelements.Add(XPUILabel($"Clans Reduction Amount:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.xpclans.clanreductionamount * 100}%", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods clanreductionamt {config.xpclans.clanreductionamount + 0.01} false clans", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods clanreductionamt {config.xpclans.clanreductionamount - 0.01} false clans", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); #endregion CuiHelper.AddUi(player, ControlPanelelements); } private void OtherMods_Archery(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.023f; int buttonsize = 12; int fontsize = 11; int row = 5; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1 1", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton("xp.admin othermods main", 2, 0.030f, 15, "0.0 0.0 0.0 0.7", $"<-- Back To Mod List", "0.02", "0.15", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"[Archery Settings] (Requires Archery plugin)", 3, 0.035f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); #region Archery row++; // Enable row++; ControlPanelelements.Add(XPUILabel($"Enable Archery:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.archerymod.enablearchery}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods archenabled 0 true archery", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods archenabled 0 false archery", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Rank row++; ControlPanelelements.Add(XPUILabel($"Requires Rank to Unlock:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.archerymod.rankrequired}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods archrank 0 true archery", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods archrank 0 false archery", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Rank Level row++; ControlPanelelements.Add(XPUILabel($"Rank Level:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.archerymod.ranklevel}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods archranklevel {config.archerymod.ranklevel + 1} false archery", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.archerymod.ranklevel > 0) { ControlPanelelements.Add(XPUIButton($"xp.config othermods archranklevel {config.archerymod.ranklevel - 1} false archery", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Stat or Skill row++; int next = 0; int prev = 0; switch (config.archerymod.statorskill) { case "Mentality": prev = 15; next = 2; break; case "Dexterity": prev = 1; next = 3; break; case "Might": prev = 2; next = 4; break; case "Captaincy": prev = 3; next = 5; break; case "WoodCutter": prev = 4; next = 6; break; case "Smithy": prev = 5; next = 7; break; case "Miner": prev = 6; next = 8; break; case "Forager": prev = 7; next = 9; break; case "Hunter": prev = 8; next = 10; break; case "Fisher": prev = 9; next = 11; break; case "Crafter": prev = 10; next = 12; break; case "Framer": prev = 11; next = 13; break; case "Medic": prev = 12; next = 14; break; case "Scavenger": prev = 13; next = 15; break; case "Weaponry": prev = 14; next = 1; break; } ControlPanelelements.Add(XPUILabel($"Stat or Skill Control:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.archerymod.statorskill}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.27", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods archstatorskill {next} false archery", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods archstatorskill {prev} false archery", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Novice Level row++; ControlPanelelements.Add(XPUILabel($"Novice Unlock Level:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.archerymod.novicelevel}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods archnovice {config.archerymod.novicelevel + 1} false archery", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.archerymod.novicelevel > 1) { ControlPanelelements.Add(XPUIButton($"xp.config othermods archnovice {config.archerymod.novicelevel - 1} false archery", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Adept Level row++; ControlPanelelements.Add(XPUILabel($"Adept Unlock Level:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.archerymod.adeptlevel}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods archadept {config.archerymod.adeptlevel + 1} false archery", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.archerymod.adeptlevel > 1) { ControlPanelelements.Add(XPUIButton($"xp.config othermods archadept {config.archerymod.adeptlevel - 1} false archery", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Master Level row++; ControlPanelelements.Add(XPUILabel($"Master Unlock Level:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.archerymod.masterlevel}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods archmaster {config.archerymod.masterlevel + 1} false archery", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.archerymod.masterlevel > 1) { ControlPanelelements.Add(XPUIButton($"xp.config othermods archmaster {config.archerymod.masterlevel - 1} false archery", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Remove row++; ControlPanelelements.Add(XPUILabel($"Remove Permissions on Unload:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.archerymod.removeonunload}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods archremove 0 true archery", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods archremove 0 false archery", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); #endregion CuiHelper.AddUi(player, ControlPanelelements); } private void OtherMods_Wizardry(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.023f; int buttonsize = 12; int fontsize = 11; int row = 5; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1 1", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton("xp.admin othermods main", 2, 0.030f, 15, "0.0 0.0 0.0 0.7", $"<-- Back To Mod List", "0.02", "0.15", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"[Wizardry Settings] (Requires Wizardry plugin)", 3, 0.035f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); #region Wizardry // Enable row++; ControlPanelelements.Add(XPUILabel($"Enable Wizardry:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.wizardrymod.enablewizardry}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods wizenabled 0 true wizardry", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods wizenabled 0 false wizardry", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Rank row++; ControlPanelelements.Add(XPUILabel($"Requires Rank to Unlock:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.wizardrymod.rankrequired}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods wizrank 0 true wizardry", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods wizrank 0 false wizardry", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Rank Level row++; ControlPanelelements.Add(XPUILabel($"Rank Level:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.wizardrymod.ranklevel}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods wizranklevel {config.wizardrymod.ranklevel + 1} false wizardry", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.wizardrymod.ranklevel > 0) { ControlPanelelements.Add(XPUIButton($"xp.config othermods wizranklevel {config.wizardrymod.ranklevel - 1} false wizardry", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Stat or Skill row++; int nextr = 0; int prevr = 0; switch (config.wizardrymod.statorskill) { case "Mentality": prevr = 15; nextr = 2; break; case "Dexterity": prevr = 1; nextr = 3; break; case "Might": prevr = 2; nextr = 4; break; case "Captaincy": prevr = 3; nextr = 5; break; case "WoodCutter": prevr = 4; nextr = 6; break; case "Smithy": prevr = 5; nextr = 7; break; case "Miner": prevr = 6; nextr = 8; break; case "Forager": prevr = 7; nextr = 9; break; case "Hunter": prevr = 8; nextr = 10; break; case "Fisher": prevr = 9; nextr = 11; break; case "Crafter": prevr = 10; nextr = 12; break; case "Framer": prevr = 11; nextr = 13; break; case "Medic": prevr = 12; nextr = 14; break; case "Scavenger": prevr = 13; nextr = 15; break; case "Weaponry": prevr = 14; nextr = 1; break; } ControlPanelelements.Add(XPUILabel($"Stat or Skill Control:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.wizardrymod.statorskill}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.27", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods wizstatorskill {nextr} false wizardry", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods wizstatorskill {prevr} false wizardry", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Novice Level row++; ControlPanelelements.Add(XPUILabel($"Novice Unlock Level:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.wizardrymod.novicelevel}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods wiznovice {config.wizardrymod.novicelevel + 1} false wizardry", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.wizardrymod.novicelevel > 1) { ControlPanelelements.Add(XPUIButton($"xp.config othermods wiznovice {config.wizardrymod.novicelevel - 1} false wizardry", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Adept Level row++; ControlPanelelements.Add(XPUILabel($"Adept Unlock Level:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.wizardrymod.adeptlevel}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods wizadept {config.wizardrymod.adeptlevel + 1} false wizardry", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.wizardrymod.adeptlevel > 1) { ControlPanelelements.Add(XPUIButton($"xp.config othermods wizadept {config.wizardrymod.adeptlevel - 1} false wizardry", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Master Level row++; ControlPanelelements.Add(XPUILabel($"Master Unlock Level:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.wizardrymod.masterlevel}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods wizmaster {config.wizardrymod.masterlevel + 1} false wizardry", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.wizardrymod.masterlevel > 1) { ControlPanelelements.Add(XPUIButton($"xp.config othermods wizmaster {config.wizardrymod.masterlevel - 1} false wizardry", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Remove row++; ControlPanelelements.Add(XPUILabel($"Remove Permissions on Unload:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.wizardrymod.removeonunload}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods wizremove 0 true wizardry", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods wizremove 0 false wizardry", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); #endregion CuiHelper.AddUi(player, ControlPanelelements); } private void OtherMods_Pets(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.023f; int buttonsize = 12; int fontsize = 11; int row = 5; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1 1", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton("xp.admin othermods main", 2, 0.030f, 15, "0.0 0.0 0.0 0.7", $"<-- Back To Mod List", "0.02", "0.15", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"[Tamer Settings] (Requires Pets or Personal Animals plugin)", 3, 0.035f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); #region Tamer row++; // Enable / Disable row++; ControlPanelelements.Add(XPUILabel($"Enable Pets:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.enabletame}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerenable 0 true pets", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerenable 0 false pets", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Max Level row++; ControlPanelelements.Add(XPUILabel($"Max Level:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.maxlvl}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamermaxlevel {config.tamer.maxlvl + 1} false pets", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamermaxlevel {config.tamer.maxlvl - 1} false pets", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Max Cost to Start row++; ControlPanelelements.Add(XPUILabel($"Point Cost To Start:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.pointcoststart}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamercost {config.tamer.pointcoststart + 1} false pets", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamercost {config.tamer.pointcoststart - 1} false pets", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Cost Multiplier row++; ControlPanelelements.Add(XPUILabel($"Cost Multiplier:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.costmultiplier}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamercostmultiplier {config.tamer.costmultiplier + 1} false pets", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamercostmultiplier {config.tamer.costmultiplier - 1} false pets", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable Chicken row++; ControlPanelelements.Add(XPUILabel($"Chicken:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.tamechicken}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerchicken 0 true pets", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerchicken 0 false pets", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable Boar row++; ControlPanelelements.Add(XPUILabel($"Boar:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.tameboar}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerboar 0 true pets", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerboar 0 false pets", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable Stag row++; ControlPanelelements.Add(XPUILabel($"Stag:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.tamestag}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerstag 0 true pets", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerstag 0 false pets", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable Wolf row++; ControlPanelelements.Add(XPUILabel($"Wolf:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.tamewolf}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerwolf 0 true pets", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerwolf 0 false pets", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable Bear row++; ControlPanelelements.Add(XPUILabel($"Bear:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.tamebear}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerbear 0 true pets", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerbear 0 false pets", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Enable PolarBear row++; ControlPanelelements.Add(XPUILabel($"PolarBear:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.tamepolarbear}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerpolarbear 0 true pets", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerpolarbear 0 false pets", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Chicken Level row++; ControlPanelelements.Add(XPUILabel($"Chicken Level:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.chickenlevel}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerchickenlevel {config.tamer.chickenlevel + 1} false pets", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerchickenlevel {config.tamer.chickenlevel - 1} false pets", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Boar Level row++; ControlPanelelements.Add(XPUILabel($"Boar Level:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.boarlevel}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerboarlevel {config.tamer.boarlevel + 1} false pets", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerboarlevel {config.tamer.boarlevel - 1} false pets", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Stag Level row++; ControlPanelelements.Add(XPUILabel($"Stag Level:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.staglevel}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerstaglevel {config.tamer.staglevel + 1} false pets", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerstaglevel {config.tamer.staglevel - 1} false pets", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Wolf Level row++; ControlPanelelements.Add(XPUILabel($"Wolf Level:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.wolflevel}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerwolflevel {config.tamer.wolflevel + 1} false pets", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerwolflevel {config.tamer.wolflevel - 1} false pets", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Bear Level row++; ControlPanelelements.Add(XPUILabel($"Bear Level:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.bearlevel}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerbearlevel {config.tamer.bearlevel + 1} false pets", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerbearlevel {config.tamer.bearlevel - 1} false pets", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Polar Bear Level row++; ControlPanelelements.Add(XPUILabel($"Polar Bear Level:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.tamer.polarbearlevel}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerpolarbearlevel {config.tamer.polarbearlevel + 1} false pets", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods tamerpolarbearlevel {config.tamer.polarbearlevel - 1} false pets", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.27", "0.28", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); #endregion CuiHelper.AddUi(player, ControlPanelelements); } private void OtherMods_Backpacks(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.023f; int buttonsize = 12; int fontsize = 11; int row = 5; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1 1", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton("xp.admin othermods main", 2, 0.030f, 15, "0.0 0.0 0.0 0.7", $"<-- Back To Mod List", "0.02", "0.15", TextAnchor.MiddleCenter), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"[Backpacks Settings] (Requires Backpacks plugin)", 3, 0.035f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); #region Backpacks row++; // Enable row++; ControlPanelelements.Add(XPUILabel($"Enable Backpacks:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.backpacksmod.enablebackpacks}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods backpacksenable 0 true backpacks", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods backpacksenable 0 false backpacks", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Stat or Skill row++; int next = 0; int prev = 0; switch (config.backpacksmod.statorskill) { case "Mentality": prev = 15; next = 2; break; case "Dexterity": prev = 1; next = 3; break; case "Might": prev = 2; next = 4; break; case "Captaincy": prev = 3; next = 5; break; case "WoodCutter": prev = 4; next = 6; break; case "Smithy": prev = 5; next = 7; break; case "Miner": prev = 6; next = 8; break; case "Forager": prev = 7; next = 9; break; case "Hunter": prev = 8; next = 10; break; case "Fisher": prev = 9; next = 11; break; case "Crafter": prev = 10; next = 12; break; case "Framer": prev = 11; next = 13; break; case "Medic": prev = 12; next = 14; break; case "Scavenger": prev = 13; next = 15; break; case "Weaponry": prev = 14; next = 1; break; } ControlPanelelements.Add(XPUILabel($"Stat or Skill Control:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.backpacksmod.statorskill}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.27", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods backpackstatorskill {next} false backpacks", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods backpackstatorskill {prev} false backpacks", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); // Backpack Row 1 row++; ControlPanelelements.Add(XPUILabel($"Row 1 Level Requirement:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.backpacksmod.backpackrow1}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack1 {config.backpacksmod.backpackrow1 + 1} false backpacks", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.backpacksmod.backpackrow1 > 1) { ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack1 {config.backpacksmod.backpackrow1 - 1} false backpacks", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Backpack Row 2 row++; ControlPanelelements.Add(XPUILabel($"Row 2 Level Requirement:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.backpacksmod.backpackrow2}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack2 {config.backpacksmod.backpackrow2 + 1} false backpacks", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.backpacksmod.backpackrow2 > 1) { ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack2 {config.backpacksmod.backpackrow2 - 1} false backpacks", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Backpack Row 3 row++; ControlPanelelements.Add(XPUILabel($"Row 3 Level Requirement:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.backpacksmod.backpackrow3}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack3 {config.backpacksmod.backpackrow3 + 1} false backpacks", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.backpacksmod.backpackrow3 > 1) { ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack3 {config.backpacksmod.backpackrow3 - 1} false backpacks", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Backpack Row 4 row++; ControlPanelelements.Add(XPUILabel($"Row 4 Level Requirement:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.backpacksmod.backpackrow4}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack4 {config.backpacksmod.backpackrow4 + 1} false backpacks", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.backpacksmod.backpackrow4 > 1) { ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack4 {config.backpacksmod.backpackrow4 - 1} false backpacks", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Backpack Row 5 row++; ControlPanelelements.Add(XPUILabel($"Row 5 Level Requirement:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.backpacksmod.backpackrow5}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack5 {config.backpacksmod.backpackrow5 + 1} false backpacks", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.backpacksmod.backpackrow5 > 1) { ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack5 {config.backpacksmod.backpackrow5 - 1} false backpacks", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Backpack Row 6 row++; ControlPanelelements.Add(XPUILabel($"Row 6 Level Requirement:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.backpacksmod.backpackrow6}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack6 {config.backpacksmod.backpackrow6 + 1} false backpacks", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.backpacksmod.backpackrow6 > 1) { ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack6 {config.backpacksmod.backpackrow6 - 1} false backpacks", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Backpack Row 7 row++; ControlPanelelements.Add(XPUILabel($"Row 7 Level Requirement:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.backpacksmod.backpackrow7}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack7 {config.backpacksmod.backpackrow7 + 1} false backpacks", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.backpacksmod.backpackrow7 > 1) { ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack7 {config.backpacksmod.backpackrow7 - 1} false backpacks", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Backpack Row 8 row++; ControlPanelelements.Add(XPUILabel($"Row 8 Level Requirement:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.backpacksmod.backpackrow8}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack8 {config.backpacksmod.backpackrow8 + 1} false backpacks", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); if (config.backpacksmod.backpackrow8 > 1) { ControlPanelelements.Add(XPUIButton($"xp.config othermods backpack8 {config.backpacksmod.backpackrow8 - 1} false backpacks", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); } // Remove row++; ControlPanelelements.Add(XPUILabel($"Remove Permissions on Unload:", row, height, TextAnchor.MiddleLeft, fontsize, "0.01", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUILabel($"| {config.backpacksmod.removeonunload}", row, height, TextAnchor.MiddleLeft, fontsize, "0.20", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods backpackremove 0 true backpacks", row, height, fontsize, "0.0 1.0 0.0 0", "T", "0.26", "0.27", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelOtherMods); ControlPanelelements.Add(XPUIButton($"xp.config othermods backpackremove 0 false backpacks", row, height, fontsize, "1.0 0.0 0.0 0", "F", "0.28", "0.29", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelOtherMods); #endregion CuiHelper.AddUi(player, ControlPanelelements); } #endregion private void AdminSoundEffectsPage(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.026f; int row = 4; string lableL = "0.01"; string lableR = "0.20"; string valueL = "0.20"; string valueR = "0.25"; string setting1L = "0.26"; string setting1R = "0.27"; string setting2L = "0.28"; string setting2R = "0.29"; // Page and Title ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"{XPLang("adminmenu_021", player.UserIDString)} - Sound effect path must be entered in config manually", 1, 0.090f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Start ControlPanelelements.Add(XPUILabel($"[Sound Effect Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Level Up row++; ControlPanelelements.Add(XPUILabel($"Enable Levelup Effect:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.levelup}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects levelup 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects levelup 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| Plays sound effect when player reaches next level", row, height, TextAnchor.MiddleLeft, 12, "0.30", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Level Down row++; ControlPanelelements.Add(XPUILabel($"Enable Leveldown Effect:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.leveldown}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects leveldown 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects leveldown 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| Plays sound effect when player looses a level", row, height, TextAnchor.MiddleLeft, 12, "0.30", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Rank Up row++; ControlPanelelements.Add(XPUILabel($"Enable Rankup Effect:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.rankup}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects rankup 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects rankup 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| Plays sound effect when player reaches next rank", row, height, TextAnchor.MiddleLeft, 12, "0.30", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Stat Up row++; ControlPanelelements.Add(XPUILabel($"Enable Statup Effect:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.statup}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects statup 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects statup 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| Plays sound effect when player increases a stat level", row, height, TextAnchor.MiddleLeft, 12, "0.30", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Skill Up row++; ControlPanelelements.Add(XPUILabel($"Enable Skillup Effect:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.skillup}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects skillup 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects skillup 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| Plays sound effect when player increases a skill level", row, height, TextAnchor.MiddleLeft, 12, "0.30", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Stat Reset row++; ControlPanelelements.Add(XPUILabel($"Enable Stat Reset Effect:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.statreset}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects statreset 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects statreset 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| Plays sound effect when player resets stats", row, height, TextAnchor.MiddleLeft, 12, "0.30", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Skill Reset row++; ControlPanelelements.Add(XPUILabel($"Enable Skill Reset Effect:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.skillreset}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects skillreset 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects skillreset 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| Plays sound effect when player resets skills", row, height, TextAnchor.MiddleLeft, 12, "0.30", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Scavenger Loot row++; ControlPanelelements.Add(XPUILabel($"Enable Scavenger Loot Effect:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.scavengerloot}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects scavengerloot 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects scavengerloot 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| Plays sound effect when scavenger extra loot chance activates", row, height, TextAnchor.MiddleLeft, 12, "0.30", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Forager Loot row++; ControlPanelelements.Add(XPUILabel($"Enable Forager Item Drop Effect:", row, height, TextAnchor.MiddleLeft, 12, lableL, lableR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.foragerloot}", row, height, TextAnchor.MiddleLeft, 12, valueL, valueR, "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects foragerloot 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", setting1L, setting1R, TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUIButton($"xp.config soundeffects foragerloot 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", setting2L, setting2R, TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| Plays sound effect when forager random item drop chance activates", row, height, TextAnchor.MiddleLeft, 12, "0.30", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); row++; row++; // Show Effect Paths ControlPanelelements.Add(XPUILabel($"[Sound Effect Paths] - Must edit in the config file manually", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); row++; ControlPanelelements.Add(XPUILabel($"(Full list of prefabs can be found at: https://www.corrosionhour.com/rust-prefab-list/)", row, height, TextAnchor.MiddleLeft, 10, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); row++; row++; // Levelup Effect ControlPanelelements.Add(XPUILabel($"Levelup Effect:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.levelupeffect}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Leveldown Effect row++; ControlPanelelements.Add(XPUILabel($"Leveldown Effect:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.leveldowneffect}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Rankup Effect row++; ControlPanelelements.Add(XPUILabel($"Rankup Effect:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.rankupeffect}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Statup Effect row++; ControlPanelelements.Add(XPUILabel($"Statup Effect:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.statupeffect}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Skillup Effect row++; ControlPanelelements.Add(XPUILabel($"Skillup Effect:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.skillupeffect}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Stat Reset Effect row++; ControlPanelelements.Add(XPUILabel($"Stat Reset Effect:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.statreseteffect}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Skill Reset Effect row++; ControlPanelelements.Add(XPUILabel($"Skill Reset Effect:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.skillreseteffect}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Scavenger Loot Effect row++; ControlPanelelements.Add(XPUILabel($"Scavenger Loot Effect:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.scavengerlooteffect}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // Forager Item Effect row++; ControlPanelelements.Add(XPUILabel($"Forager Item Drop Effect:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); ControlPanelelements.Add(XPUILabel($"| {config.soundEffects.foragerlooteffect}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSoundEffects); // End CuiHelper.AddUi(player, ControlPanelelements); } private void AdminSQLPage(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.030f; int row = 5; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelSQL); ControlPanelelements.Add(XPUILabel($"SQL Settings / Info - You can enable / disable SQL saving here, You must manually enter SQL info in the config file.", 1, 0.090f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSQL); // Main SQL Settings ControlPanelelements.Add(XPUILabel($"[SQL Settings]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSQL); // Enable SQL row++; ControlPanelelements.Add(XPUILabel($"Enable SQL Save:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSQL); ControlPanelelements.Add(XPUILabel($"| {config.sql.enablesql}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.20", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSQL); ControlPanelelements.Add(XPUIButton($"xp.config sql sqlenable 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", "0.21", "0.22", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelSQL); ControlPanelelements.Add(XPUIButton($"xp.config sql sqlenable 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", "0.23", "0.24", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelSQL); // Main SQL Settings row++; row++; ControlPanelelements.Add(XPUILabel($"[SQL Info] (change in config file)", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.50", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSQL); // SQL Info row++; ControlPanelelements.Add(XPUILabel($"SQL Host IP:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSQL); ControlPanelelements.Add(XPUILabel($"| {config.sql.SQLhost}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.50", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSQL); row++; ControlPanelelements.Add(XPUILabel($"SQL Host Port:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSQL); ControlPanelelements.Add(XPUILabel($"| {config.sql.SQLport}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.50", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSQL); row++; ControlPanelelements.Add(XPUILabel($"SQL Host Database:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSQL); ControlPanelelements.Add(XPUILabel($"| {config.sql.SQLdatabase}", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.50", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSQL); row++; ControlPanelelements.Add(XPUILabel($"SQL Host Username:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSQL); ControlPanelelements.Add(XPUILabel($"| (hidden)", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.50", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSQL); row++; ControlPanelelements.Add(XPUILabel($"SQL Host Password:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.15", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSQL); ControlPanelelements.Add(XPUILabel($"| (hidden)", row, height, TextAnchor.MiddleLeft, 12, "0.15", "0.50", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelSQL); CuiHelper.AddUi(player, ControlPanelelements); return; } private void AdminResetPage(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.030f; int row = 7; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelReset); ControlPanelelements.Add(XPUILabel($"Reset Config / Players", 1, 0.090f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); // Reset Config ControlPanelelements.Add(XPUILabel($"[Reset Config]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUIButton($"xp.config reset resetconfig 0 true", row, height, 12, "1 0 0 1", "[ Reset Config ]", "0.30", "0.40", TextAnchor.MiddleCenter, "0 0 0 1"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUILabel($"(Resets config back to default)", row, height, TextAnchor.MiddleLeft, 12, "0.50", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); // Reset All Levels row++; row++; ControlPanelelements.Add(XPUILabel($"[Reset All Player Levels]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUIButton($"xp.config reset resetalllevels 0 true", row, height, 12, "1 0 0 1", "[ Reset levels ]", "0.30", "0.40", TextAnchor.MiddleCenter, "0 0 0 1"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUILabel($"(Resets all players level back to 0)", row, height, TextAnchor.MiddleLeft, 12, "0.50", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); // Reset All Ranks row++; row++; ControlPanelelements.Add(XPUILabel($"[Reset All Player Ranks]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUIButton($"xp.config reset resetallranks 0 true", row, height, 12, "1 0 0 1", "[ Reset Ranks ]", "0.30", "0.40", TextAnchor.MiddleCenter, "0 0 0 1"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUILabel($"(Resets all players rank back to 0)", row, height, TextAnchor.MiddleLeft, 12, "0.50", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); // Reset All Players row++; row++; ControlPanelelements.Add(XPUILabel($"[Reset All Players]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUIButton($"xp.config reset resetall 0 true", row, height, 12, "1 0 0 1", "[ Reset Players ]", "0.30", "0.40", TextAnchor.MiddleCenter, "0 0 0 1"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUILabel($"(Full Wipe of XPerience and all players)", row, height, TextAnchor.MiddleLeft, 12, "0.50", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); // Reset Kill Records if (KillRecords != null) { row++; row++; ControlPanelelements.Add(XPUILabel($"[Reset All Kill Records]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUIButton($"xp.config reset resetallkr 0 true", row, height, 12, "1 0 0 1", "[ Reset Kill Records ]", "0.30", "0.40", TextAnchor.MiddleCenter, "0 0 0 1"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUILabel($"(Deletes all players kill records from Kill Records plugin)", row, height, TextAnchor.MiddleLeft, 12, "0.50", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); } // Reset on Wipe row++; row++; ControlPanelelements.Add(XPUILabel($"[Reset XPerience on Wipe]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUILabel($"| {config.defaultOptions.wipedataonnewsave}", row, height, TextAnchor.MiddleLeft, 12, "0.30", "0.35", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUIButton($"xp.config reset resetnewsave 0 true", row, height, 12, "0.0 1.0 0.0 0", "T", "0.40", "0.42", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUIButton($"xp.config reset resetnewsave 0 false", row, height, 12, "1.0 0.0 0.0 0", "F", "0.42", "0.44", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUILabel($"(Full Wipe of XPerience when new save loaded or wiped)", row, height, TextAnchor.MiddleLeft, 12, "0.50", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); // Fix Data row++; row++; ControlPanelelements.Add(XPUILabel($"[Fix Player Data]", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUIButton($"xp.config reset fix 0 true", row, height, 12, "1 0 0 1", "[ Fix Player Data ]", "0.30", "0.40", TextAnchor.MiddleCenter, "0 0 0 1"), XPerienceAdminPanelReset); ControlPanelelements.Add(XPUILabel($"(Resets & Recalculates all player's data based on current xp)", row, height, TextAnchor.MiddleLeft, 12, "0.50", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelReset); CuiHelper.AddUi(player, ControlPanelelements); return; } private void AdminAddonPage(BasePlayer player) { var ControlPanelelements = new CuiElementContainer(); var height = 0.030f; int row = 4; ControlPanelelements.Add(XPUIPanel("0.16 0.0", "1.0 1.0", "0.0 0.0 0.0 0.7"), XPerienceAdminPanelMain, XPerienceAdminPanelAddon); ControlPanelelements.Add(XPUILabel($"XPerience Addon", 1, 0.090f, TextAnchor.MiddleLeft, 18, "0.01", "1", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelAddon); // Addon Not Installed ControlPanelelements.Add(XPUILabel($"[XPerience Addon Not Installed]", row, height, TextAnchor.MiddleLeft, 18, "0.01", "0.25", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelAddon); row++; ControlPanelelements.Add(XPUILabel($"To get the XPerience Addon visit our website at https://www.rustlevels.com/ or join our discord at https://discord.rustlevels.com", row, height, TextAnchor.MiddleLeft, 15, "0.01", "0.98", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelAddon); ControlPanelelements.Add(new CuiLabel { Text = { Text = $"" + $"XPerience Addon collects all player data from XPerience and Kill Records(optional) and sends it to RustLevels.com. " + $"All servers with this addon mod will be publicly shown on RustLevels.com with their own page and player profiles. " + $"Once purchased you must submit your server's IP or DNS to RustLevels discord at: https://discord.rustlevels.com so that it can be allowed to access RustLevels database and receive your Unique ServerIDKey to place in your Addon config file. " + $"Please allow up to 48 hours for your server to be accepted." + $"\n\nPlayer steam badges can be hidden on RustLevels.com by config option.This will prevent steam badges for your server players being shown on our website however it will not prevent steam information from being shown on other public sites not releated to RustLevels. " + $"All player steam information is supplied by Steamworks API with permissions listed in steams privacy policy section 5.5 which RustLevels has no control over: https://store.steampowered.com/privacy_agreement/ " + $"\n\n" + $"Features:\n" + $"▫ Sends Server data to RustLevels.com\n" + $"▫ Option to set custom server banner URL\n" + $"▫ Option to set website URL\n" + $"▫ Option to hide player steam info\n" + $"\nPlugin Data Sent to RustLevels.com: (▫ = Optional)\n" + $"▫ XPerience\n" + $"▫ Kill Records\n" + $"▫ Pets\n" + $"▫ Backpacks\n" + $"▫ Archery\n" + $"▫ Wizardry\n" + $"\n\n" + $"DiscordMessages Support: (requires DiscordMessages plugin)\n" + $"▫ Discord webhook URL\n" + $"▫ Option to send player rank up to discord\n" + $"▫ Option to send player level up to discord\n" + $"▫ Option to send player stat level up to discord\n" + $"▫ Option to send player skill level up to discord" + $"", FontSize = 13, Align = TextAnchor.UpperLeft, Color = "1.0 1.0 1.0 1.0" }, RectTransform = { AnchorMin = "0.01 0.0", AnchorMax = "0.98 0.80" } }, XPerienceAdminPanelAddon); CuiHelper.AddUi(player, ControlPanelelements); return; } private void AdminElectricianSettings(BasePlayer player) { if (player == null) return; if (!player.IsAdmin && !permission.UserHasPermission(player.UserIDString, Admin)) return; var height = 0.040f; int buttonsize = 13; int row = 2; var ElectricianSettings = new CuiElementContainer(); ElectricianSettings.Add(new CuiPanel { Image = { Color = "0 0 0 1" }, RectTransform = { AnchorMin = "0.25 0.25", AnchorMax = "0.75 0.75" }, CursorEnabled = true }, "Overlay", XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUILabel($"Global Default Setting:", row, height, TextAnchor.MiddleCenter, 13, "0.01", "0.99", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelElectricianSettings); // Solar Panel row++; row++; row++; ElectricianSettings.Add(XPUILabel($"Solar Panel Default MaxOutput:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.30", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUILabel($"| {config.electrician.solarpaneldefault}", row, height, TextAnchor.MiddleLeft, 12, "0.35", "0.45", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUIButton($"xp.electrician solarpaneldefault {config.electrician.solarpaneldefault + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.46", "0.48", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUIButton($"xp.electrician solarpaneldefault {config.electrician.solarpaneldefault - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.49", "0.51", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelElectricianSettings); // Small Battery row++; row++; ElectricianSettings.Add(XPUILabel($"Small Battery Default MaxOutput:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.50", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUILabel($"| {config.electrician.smallbatterydefault}", row, height, TextAnchor.MiddleLeft, 12, "0.35", "0.45", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUIButton($"xp.electrician smallbatterydefault {config.electrician.smallbatterydefault + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.46", "0.48", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUIButton($"xp.electrician smallbatterydefault {config.electrician.smallbatterydefault - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.49", "0.51", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelElectricianSettings); // Medium Battery row++; row++; ElectricianSettings.Add(XPUILabel($"Medium Battery Default MaxOutput:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.50", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUILabel($"| {config.electrician.mediumbatterydefault}", row, height, TextAnchor.MiddleLeft, 12, "0.35", "0.45", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUIButton($"xp.electrician mediumbatterydefault {config.electrician.mediumbatterydefault + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.46", "0.48", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUIButton($"xp.electrician mediumbatterydefault {config.electrician.mediumbatterydefault - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.49", "0.51", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelElectricianSettings); // Large Battery row++; row++; ElectricianSettings.Add(XPUILabel($"Large Battery Default MaxOutput:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.50", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUILabel($"| {config.electrician.largebatterydefault}", row, height, TextAnchor.MiddleLeft, 12, "0.35", "0.45", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUIButton($"xp.electrician largebatterydefault {config.electrician.largebatterydefault + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.46", "0.48", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUIButton($"xp.electrician largebatterydefault {config.electrician.largebatterydefault - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.49", "0.51", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelElectricianSettings); // Small Generator row++; row++; ElectricianSettings.Add(XPUILabel($"Small Generator Default MaxOutput:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.50", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUILabel($"| {config.electrician.smallgeneratordefault}", row, height, TextAnchor.MiddleLeft, 12, "0.35", "0.45", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUIButton($"xp.electrician smallgeneratordefault {config.electrician.smallgeneratordefault + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.46", "0.48", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUIButton($"xp.electrician smallgeneratordefault {config.electrician.smallgeneratordefault - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.49", "0.51", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelElectricianSettings); // Electric Windmill row++; row++; ElectricianSettings.Add(XPUILabel($"Electric Windmill Default MaxOutput:", row, height, TextAnchor.MiddleLeft, 12, "0.01", "0.50", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUILabel($"| {config.electrician.electricwindmilldefault}", row, height, TextAnchor.MiddleLeft, 12, "0.35", "0.45", "1.0 1.0 1.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUIButton($"xp.electrician electricwindmilldefault {config.electrician.electricwindmilldefault + 1} false", row, height, buttonsize, "0.0 1.0 0.0 0", "⇧", "0.46", "0.48", TextAnchor.MiddleCenter, "0.0 1.0 0.0 1.0"), XPerienceAdminPanelElectricianSettings); ElectricianSettings.Add(XPUIButton($"xp.electrician electricwindmilldefault {config.electrician.electricwindmilldefault - 1} false", row, height, buttonsize, "1.0 0.0 0.0 0", "⇩", "0.49", "0.51", TextAnchor.MiddleCenter, "1.0 0.0 0.0 1.0"), XPerienceAdminPanelElectricianSettings); // Close row++; row++; ElectricianSettings.Add(XPUIButton("xp.admin closeelectricianbox", row, height, 12, "1 0 0 1", "〘Close Default Settings〙", "0.25", "0.75", TextAnchor.MiddleCenter, "1 1 1 1"), XPerienceAdminPanelElectricianSettings); // UI End CuiHelper.AddUi(player, ElectricianSettings); return; } #endregion #region Lang private string XPLang(string key, string id = null, params object[] args) => string.Format(lang.GetMessage(key, this, id), args); protected override void LoadDefaultMessages() { lang.RegisterMessages(new Dictionary { ["adminpanel"] = "Admin", ["adminmenu_001"] = "Main", ["adminmenu_002"] = "Level / XP", ["adminmenu_003"] = "Stats", ["adminmenu_004"] = "Skills", ["adminmenu_005"] = "Other Settings", ["adminmenu_006"] = "SQL", ["adminmenu_007"] = "SAVE SETTINGS", ["adminmenu_008"] = "Save & Reload Mod", ["adminmenu_009"] = "CLOSE", ["adminmenu_010"] = "Reset Default Settings", ["adminmenu_011"] = "Fix Player Data", ["adminmenu_012"] = "Other Mod Settings", ["adminmenu_013"] = "Reset Options", ["adminmenu_014"] = "My Stats", ["adminmenu_015"] = "Player's Stats", ["adminmenu_016"] = "Player Info", ["adminmenu_017"] = "XPerience Addon", ["adminmenu_018"] = "Daily Limits", ["adminmenu_019"] = "Calculations", ["adminmenu_020"] = "Ranks", ["adminmenu_021"] = "Sound Effects", ["adminitemchange"] = "{0} condition is now {1} and max condition is now {2}", ["adminitemchangerequirement"] = "{0} current condition is {1} and max condition is {2}\nTo change this use /{3} (condition value) (maxcondition value)", ["adminfixplayers"] = "All player data has been reset except experience.\nLevels, points and requirements recalculated.", ["adminresetconfig"] = "Config has been reset to default values.", ["saveconfig"] = "New Config has been Saved", ["admininfoliveui"] = "Default Live UI Location", ["adminxp_001"] = "Level & XP Settings", ["adminxp_002"] = "[Level / Point Settings]", ["adminxp_003"] = "Level Start:", ["adminxp_004"] = "Rank Settings:", ["playerfixdata"] = "Your data has been fixed and your level recalculated. You will need to reapply your stat & skill points", ["playersettings"] = "My Settings", ["playerconfirmationprompt"] = "Show Confirmation Prompt", ["playerfixdatabutton"] = "Fix My Data", ["playerdisableranks"] = "Disable Rank", ["playerdashpaneltype"] = "Dash Panel Type", ["playerdisablefuelgauge"] = "Disable Fuel Gauge", ["playerdisablespeedometer"] = "Disable Speedometer", ["playerspeedometertype"] = "Speedometer Type", ["playerharveststats"] = "Total Harvest Count", ["playerharvestreset"] = "Player harvest count has been reset", ["selectedplayerharvestreset"] = "Player {0} harvest count has been reset", ["playerlevelreset"] = "Player level has been reset", ["allplayerlevelreset"] = "All Player levels have been reset", ["selectedplayerlevelreset"] = "Player {0} level has been reset", ["playerrankreset"] = "Player rank has been reset", ["allplayerrankreset"] = "All Player ranks have been reset", ["selectedplayerrankreset"] = "Player {0} rank has been reset", ["playerresetdisabled"] = "Player reset disabled, contact server admin", ["playersearchdisabled"] = "Player searching is currently disabled", ["imgwaiting"] = "Waiting On ImageLibrary to finish the load order", ["resettimerdata"] = "{0} mins", ["xphelp"] = "XPerience Plugin by M@CHIN3 \n Commands: \n" + "/xpstats - brings up user control panel \n" + "/xpstatschat - shows your level, xp, stats, and skills in chat \n" + "/xptop - brings up top players UI \n" + "/xpaddstats (stat) - level up selected stat \n" + "/xpaddskill (skill) - level up selected skill \n" + "/xpresetstats - resets all stats and refunds points \n" + "/xpresetskills - resets all skills and refunds points \n" + "/xpliveui (0-4) - Live UI Location / 0 = off", ["xphelpadmin"] = "XPerience Plugin by M@CHIN3 \n Admin Commands: \n" + "/{0} - Opens admin control panel for mod setup" + "/{1} - resets entire mod and deletes all player data \n" + "/{2} (playername) - resets selected player data \n" + "/{3} (playername) (amount) - gives x amount of experience to selected player \n" + "/{4} (playername) (amount) - takes x amount of experience from selected player \n" + "/{5} (conditionvalue) (maxconditionvalue) - changes the item condition and max condition in your hand", ["playerprofilechatnew"] = "My Stats: \n" + "---------------- \n" + "Level: {0} \n" + "Current XP: {1} \n" + "Next Level: {2} \n" + "Stat Points: {3} \n" + "Skill Points: {4} \n" + "---------------- \n" + "Mentality: {5} \n" + "Dexterity: {6} \n" + "Might: {7} \n" + "Captaincy: {8} \n" + "Weaponry: {9} \n" + "---------------- \n" + "WoodCutter: {10} \n" + "Smithy: {11} \n" + "Miner: {12} \n" + "Forager: {13} \n" + "Hunter: {14} \n" + "Fisher: {15} \n" + "Crafter: {16} \n" + "Framer: {17} \n" + "Medic: {18} \n" + "Scavenger: {19} \n" + "Electrician: {20} \n" + "Tamer: {21} \n", ["suicide"] = "You have lost {0} XP for commiting suicide", ["death"] = "Your XP has been reduced by {0} for death", ["levelup"] = "You are now Level {0}. You have recieved {1} stat point and {2} skill points", ["leveldown"] = "You have lost a level! You are now Level {0}", ["statdown"] = "You have lost {0} stats points", ["skilldown"] = "You have lost {0} skill points", ["statdownextra"] = "You did not have enough unspent stat points to take, your ({0}) stat has been lowered and you have lost {1} stats points, {2} stat points returned to your unspent amount", ["skilldownextra"] = "You did not have enough unspent skill points to take, your ({0}) skill has been lowered and you have lost {1} skill points, {2} skill points returned to your unspent amount", ["bonus"] = "You get a bonus {0} XP for {1} {2}", ["notenoughpoints"] = "You do not have enough points", ["notenoughstatpoints"] = "You do not have enough points for level {0} {1}, requires {2} statpoints", ["notenoughskillpoints"] = "You do not have enough points for level {0} {1}, requires {2} skillpoints", ["pointsadded"] = "you now have {0} points applied in {1}", ["pointsremoved"] = "you have remove {0} points from {1}", ["statup"] = "You used {0} statpoints to reach Level {1} in {2}", ["skillup"] = "You used {0} skillpoints to reach Level {1} in {2}", ["nostatpoints"] = "You have lost all stat points", ["noskillpoints"] = "You have lost all skill points", ["resetstats"] = "You have reset your stats and have {0} stat points returned", ["resetstat"] = "You have reset your {0} stat and have {1} stat points returned", ["resetskills"] = "You have reset your skills and have {0} skill points returned", ["resetskill"] = "You have reset your {0} skill and have {1} skill points returned", ["attackerdodge"] = "Your victim dodged your attack", ["attackerblock"] = "Your victim blocked {0} damage from your attack", ["boatspeed"] = "Boat Speed", ["boatspeedon"] = "Boat Speed Boost Activated", ["boatspeedoff"] = "Boat Speed Boost Deactivated", ["boatspeedmessage"] = "Press RELOAD to activate/deactivate speed boost", ["horsespeed"] = "Horse Speed", ["horsespeedon"] = "Horse Speed Boost Activated", ["horsespeedoff"] = "Horse Speed Boost Deactivated", ["horsespeedmessage"] = "Press USE to activate/deactivate speed boost", ["vehiclespeed"] = "Vehicle Speed", ["vehiclespeedon"] = "Vehicle Speed Boost Activated", ["vehiclespeedoff"] = "Vehicle Speed Boost Deactivated", ["vehiclespeedmessage"] = "Press RELOAD to activate/deactivate speed boost", ["minispeedon"] = "MiniCopter Speed Boost Activated", ["minispeedoff"] = "MiniCopter Speed Boost Deactivated", ["minispeedmessage"] = "Press RELOAD to activate/deactivate speed boost", ["vehiclefuelreduce"] = "Fuel Reduction Chance", ["victimdodge"] = "You dodged last attack", ["victimblock"] = "You blocked {0} damage from last attack", ["crithit"] = "You preformed a critical hit for {0} extra damage", ["weaponcon"] = "New weapon condition is now {0}", ["medictools"] = "Medical Tools", ["medicteas"] = "Healing Teas", ["medictooluse"] = "You recived an extra {0} health from {1}", ["medicrecoverplayer"] = "You have recovered with an extra {0} health.", ["medicreviveplayer"] = "You have been revived with an extra {0} health.", ["medicrevivereviver"] = "You have revived player with an extra {0} health.", ["captaincyskillboost"] = "Team Skill Boost", ["captaincyxpboost"] = "Team XP Boost", ["captaincydistance"] = "Effective Distance", ["captaincyteamrequired"] = "Must be part of a team!", ["weaponrychance"] = "Condition Reduction Chance", ["weaponrytools"] = "Hand Tool Condition", ["weaponrypowertools"] = "Power Tool Condition", ["weaponryweaponsmelee"] = "Melee Weapon Condition", ["weaponryweaponsprojectile"] = "Projectile Weapon Condition", ["weaponryweaponsammo"] = "Max Ammo", ["techtreelocked"] = "Tech Tree Is Locked By Server.", ["techtreereq"] = "You must have a Mentality level of {0} to unlock tech tree items.", ["techtreestatus"] = "Tech Tree Status:", ["playerinfoalive"] = "Player Info Since Last Spawn:", ["timealive"] = "Alive", ["timeflying"] = "Flying Time", ["timedriving"] = "Driving Time", ["timeboating"] = "Boating Time", ["timesleeping"] = "Sleeping Time", ["timeswimming"] = "Swimming Time", ["timeinbase"] = "Time In Base", ["timedmgrec"] = "Last Dmg Recieved", ["timedmgrecfrom"] = "Last Dmg From", ["timedmgdelt"] = "Last Dmg Delt", ["timedeltto"] = "Last Dmg To", ["timeinmonument"] = "Time In Monuments", ["timeinwild"] = "Time In Wilderness", ["status"] = "Status", ["online"] = "Online", ["offline"] = "Offline", ["metersran"] = "Meters Ran", ["meterswalk"] = "Meters Walked", ["level"] = "Level", ["experience"] = "Experience", ["xp"] = "XP", ["mentality"] = "Mentality", ["dexterity"] = "Dexterity", ["might"] = "Might", ["captaincy"] = "Captaincy", ["weaponry"] = "Weaponry", ["woodcutter"] = "WoodCutter", ["smithy"] = "Smithy", ["miner"] = "Miner", ["forager"] = "Forager", ["hunter"] = "Hunter", ["fisher"] = "Fisher", ["crafter"] = "Crafter", ["framer"] = "Framer", ["medic"] = "Medic", ["scavenger"] = "Scavenger", ["electrician"] = "Electrician", ["tamer"] = "Tamer", ["stats"] = "Stats", ["skills"] = "Skills", ["researchcost"] = "Research Cost", ["researchspeed"] = "Research Speed", ["critchance"] = "Critical Chance", ["damagenpc"] = "Damage (NPC)", ["blockchance"] = "Block Chance", ["dodgechance"] = "Dodge Chance", ["fishamount"] = "Fish Amount", ["fishitems"] = "Item Amount", ["fishoxygen"] = "Oxygen Reduction", ["fishoxygentank"] = "Oxygen Tank Reduction", ["armor"] = "Armor", ["tea"] = "Tea Boost", ["teatypenone"] = "None", ["teatypemaxhealthtea"] = "Basic", ["teatypemaxhealthtea.advanced"] = "Advanced", ["teatypemaxhealthtea.pure"] = "Pure", ["melee"] = "Melee Damage", ["calories"] = "Max Calories", ["hydration"] = "Max Hydration", ["bleed"] = "Bleeding Time", ["radiation"] = "Radiation", ["radiationpoison"] = "Radiation Poison", ["heat"] = "Heat Tolerance", ["cold"] = "Cold Tolerance", ["craftspeed"] = "Crafting Speed", ["woodgather"] = "Wood Gathering", ["woodbonus"] = "Bonus Gathering", ["woodapple"] = "Apple Chance", ["productionrate"] = "Production Chance", ["productionspeed"] = "Production Speed", ["productionamount"] = "Amount", ["fuelconsumption"] = "Fuel Consumption", ["fuelconsumptionhats"] = "Fuel Consumption (hats)", ["metalchance"] = "Metal Fragment Chance", ["metalamount"] = "Metal Fragment Amount", ["hmetalchance"] = "High Quality Chance", ["hmetalamount"] = "High Quality Amount", ["oregather"] = "Ore Gathering", ["orebonus"] = "Bonus Gathering", ["gather"] = "Gathering", ["seedbonus"] = "Seed Bonus", ["randomitem"] = "Random Item", ["foodgather"] = "Food Gathering", ["bonusgather"] = "Bonus Gathering", ["damagewildlife"] = "Damage (wildlife)", ["nightdamage"] = "Night Damage (wildlife)", ["costreduction"] = "Cost", ["fullrepair"] = "Full Repair Chance", ["highcond"] = "Higher Condition Chance", ["upgradecost"] = "Upgrade Cost", ["repairtime"] = "Repair Time", ["repaircost"] = "Repair Cost", ["nextlevel"] = "Next Level", ["medicrevive"] = "Revival Health", ["medicrecover"] = "Recover Health", ["mediccrafting"] = "Mixing Table Speed", ["scavchance"] = "Extra Loot Chance", ["scavmultiplier"] = "Extra Loot Multiplier", ["customscavchance"] = "Custom Loot Chance", ["customscavmultiplier"] = "Custom Loot Multiplier", ["unusedstatpoints"] = "Stat Points", ["unusedskillpoints"] = "Skill Points", ["totalspent"] = "Points Used", ["liveuilocationoff"] = "Live XP UI Stats are off", ["liveuilocation"] = "Live XP UI location is {0}", ["liveuilocationhelp"] = "/xpliveui (0-4) - Live UI Location / 0 = off \n Current UI location is {0}", ["resetstatsbutton"] = "Reset Stats", ["minsolarpanelinput"] = "Min Solar Panel Input", ["solarpanelinput"] = "Solar Panel Input", ["solarpaneloutput"] = "Solar Panel Max Output", ["smallbatteryoutput"] = "Small Battery Max Output", ["mediumbatteryoutput"] = "Medium Battery Max Output", ["largebatteryoutput"] = "Large Battery Max Output", ["smallgeneratoroutput"] = "Small Generator Max Output", ["windmilloutput"] = "Windmill Output", ["windmillmaxoutput"] = "Windmill Max Output", ["resetskillsbutton"] = "Reset Skills", ["nopermordisabled"] = "Stat/Skill disabled or you do not have permission to use.", ["chicken"] = "Chicken", ["boar"] = "Boar", ["stag"] = "Stag", ["wolf"] = "Wolf", ["bear"] = "Bear", ["polarbear"] = "PolarBear", ["tamerinc"] = "Increase Tamer to tame animals", ["tamerpets"] = "Tameable Pets", ["topplayers"] = "Top Players", ["resetxperience"] = "All XPerience player data deleted", ["resettimerstats"] = "You have {0} mins left before you can reset your stats", ["resettimerskills"] = "You have {0} mins left before you can reset your skills", ["canresetstats"] = "{0} mins", ["canresetskills"] = "{0} mins", ["victimarmordmg"] = "Armor Absorbed {0} Damage", ["armordmgabsorb"] = "Armor Damage", ["liveuiselection"] = "LiveUI Location", ["mystats"] = "My Stats", ["help"] = "HELP", ["helpprev"] = "<< Prev Page", ["helpnext"] = "Next Page >>", ["helpcommands"] = "Chat Commands", ["helpcommandslist"] = "Note that many of these commands can be used within your control panel without using chat. \n\n" + "/{0} - shows chat commands in chat \n\n" + "/{1} - brings up your control panel \n\n" + "/{1} (playername) = brings up another players full profile \n\n" + "/{2} - shows your level, xp, stats, and skills in chat \n\n" + "/{3} - brings up top players panel \n\n" + "/{4} (stat) - level up selected stat \n\n" + "/{5} (skill) - level up selected skill \n\n" + "/{6} - resets all stats and refunds points \n\n" + "/{7} - resets all skills and refunds points \n\n" + "/{8} (0-5) - Live UI Location / 0 = off \n\n", ["moddetails"] = "About XPerience Created by:", ["bindkey"] = "You can bind any key to open your XPerience control panel. \n" + "Press F1 to open your console \n" + "Decide what key you want to bind the command to \n" + "Type bind 0 chat.say /{0} \n" + "This will bind the 0 key to open the control panel. \n" + "Next execute the writecfg command in your console to save the config so it won't reset when you relaunch the game", ["aboutxperience"] = "\n\n XPerience is an extremely detailed RPG based mod that allows players to earn experience and levels by interacting with all aspects of the game. You can earn experience from just about " + "anything from cutting down trees, mining ore, hunting, killing, fishing, building, and more.. As you earn experience you will progress in levels that grant stat points and skill points you can spend in different traits " + "that will give you increased abilities. There are currently 4 major Stats and 11 secondary Skills each with their own special attributes, more may come in the future. Stats will grant you overall character strengths while Skills grant you increased abilities when " + "interacting with the world. For every level you increase these traits it will increase the strength of the abilities that each one gives you. The higher the level of each trait the more points it requires to reach the next level. " + "Server owners can configure and adjust every aspect of the XPerience mod including level requirements, level multiplier, xp gained from each source, points awarded per level, point cost per level, bonuses, stat and skill strengths per level, max level of stats " + "and skills, reset timers, and more.", ["serversettings"] = "Every server that uses XPerience can be setup differently to fit their preference. Below are some of the settings for this server. Many things can effect these values like other mods that may be installed. \n\n" + "[MAIN SETTINGS] Levels, Multipliers, Points, Timers, etc..\n" + "Level Start: {0} | Required XP to reach level 1 \n" + "XP Requirment: {1} | XP Requirement increase for next level ex. ({0} + {1} to reach level 2) \n" + "Level XP Boost: {2}% | XP increase per level \n" + "Stat Points Earned Per Level: {3} \n" + "Skill Points Earned Per Level: {4} \n" + "Reset Timers: Enabled:{5} Stats {6} / Skills {7} | Time in mins before you can reset your stats or skills \n" + "VIP Reset Timers: Stats {8} / Skills {9} | Time in mins before VIP players can reset stats and skills \n" + "Night Bonus XP: Enabled:{10} | {11}% | Bonus XP received between {12}:00 and {13}:00 hours game time if enabled \n" + "Night Skills Enabled: {14} | Skills that have bonuses at night between {12}:00 and {13}:00 hours game time \n\n", ["xpsettings"] = "[XP Settings]: Amount of XP earned for kills, gathering, building, crafting, etc.. \n", ["xpsettingskills"] = "[Kills & Revive] \n\n" + "Chickens: {0} \n" + "Fish: {1} \n" + "Boar: {2} \n" + "Stag: {3} \n" + "Wolf: {4} \n" + "Bear: {5} \n" + "Shark: {6} \n" + "Horse: {7} \n" + "Scientist: {8} \n" + "Dweller: {9} \n" + "Player: {10} \n" + "Bradley: {11} \n" + "Helicopter: {12}\n\n" + "Reviving: {13}", ["xpsettingsloot"] = "[Gathering / Looting] \n\n" + "Loot Container: {0} \n" + "Underwater Loot Container: {1} \n" + "Locked Crate: {2} \n" + "Hackable Crate: {3} \n" + "Animal Harvest: {4} \n" + "Corpse Harvest: {5} \n" + "Tree: {6} \n" + "Ore: {7} \n" + "Gathering: {8} \n" + "Plant: {9}", ["xpsettingscraft"] = "[Crafting / Building] \n\n" + "Crafting: {0} \n" + "Wood Structure: {1} \n" + "Stone Structure: {2} \n" + "Metal Structure: {3} \n" + "Armored Structure: {4} \n", ["xpmissionsettings"] = "[Missions] \n\n" + "Mission Succeeded: {0} \n" + "Failed Reduction Enabled: {1} \n" + "Failed Reduction Amount: {2} \n", ["xpreductionsettings"] = "[XP Reduction] \n\n" + "Death: {0}% Enabled: {1}\n" + "Suicide: {2}% Enabled: {3}\n", ["nextpagestats"] = "To view details about Stats and Skills click Next Page at the top.", ["aboutstats"] = "The 4 major Stats are Mentality, Dexterity, Might & Captaincy.", ["aboutmentality"] = "Grants you the ability to lower research costs such as the amount of scrap required to unlock new items, Reduces Research Speed that decreases the amount of time it takes to research items in the research station, " + "gives you increased chance to attack with a critical hit and cause more damage to an enemy or animal, and give you a damage increase to NPCs", ["aboutmentalitysettings"] = "[Current Mentality Settings] \nMax Level: {0} \nStarting Cost: {1} \nCost Multiplier: {2}x Level \nResearch Cost Reduction: {3}% \nResearch Speed Reduction: {4}% \n" + "Critical Chance: {5}%", ["aboutdexterity"] = "Grants you increased chance to Block attacks and lower the amount of damage you recieve, increased the chance to Dodge an attack completely and take no damage, and decrease the damage you recieve when your Armor bar is " + "full (Armor requires Might). It also give you a speed boost for horses, vehicles, and boats with a chance of consuming less fuel.", ["aboutdexteritysettings"] = "[Current Dexterity Settings]\nMax Level: {0} \nStarting Cost: {1} \nCost Multiplier: {2}x Level \nBlock Chance: {3}% | Block Amount: {4} \nDodge Chance: {5}% \nReduced Armor Damage: {6}%", ["aboutmight"] = "This is one of the most beneficial stats in the system! It grants you the ability to reduce bleeding time, radiation taken, greater tolerance to heat and cold, higher max calories and hydration, increased max health (Armor) " + "as well as increases the damage you do with melee weapons.", ["aboutmightsettings"] = "[Current Might Settings] \nMax Level: {0} \nStarting Cost: {1} \nCost Multiplier: {2}x Level \nArmor: {3}% | Increased Max Health \nMelee Damage Increase: {4}% \n" + "Metabolism Increase: {5}% | Thirst/Hunger \nBleed Reduction: {6}% \nRadiation Reduction: {7}% \nIncreased Heat Tolerance: {8}% \nIncreased Cold Tolerance: {9}%", ["aboutcaptaincy"] = "Gives other team members overall skill boosts and XP boost within a certain range. Stacks on a % increase of the team members skills to increase the skills abilities for each team member seperatly based on the skill level of each member. Only effects skills and not stats. Requires at least 2 members in a team and has no effect on the current player.", ["aboutcaptaincysettings"] = "[Current Captaincy Settings]\nMax Level: {0} \nStarting Cost: {1} \nCost Multiplier: {2}x Level \nEffective Distance: {3}FT \nSkill Boost: {4}%\n XP Boost Enabled: {5}\n XP Boost: {6}%", ["aboutweaponry"] = "Gives you a chance to have less condition damage when using tools, power tools, melee weapons, projectile weapons, so they last longer. It also give you a bonus ammo amount so projectile weapons hold more ammo per clip.", ["aboutweaponrysettings"] = "[Current Weaponry Settings]\nMax Level: {0} \nStarting Cost: {1} \nCost Multiplier: {2}x Condition Reduction Chance: {3}% \nHand Tools: {4}%\nPower Tools: {5}%\nMelee Weapons: {6}%\nProjectile Weapons: {7}%\nMin Damage Allowed: {8}%\nMax Ammo Increase: {9}%", ["aboutskills"] = "The 11 secondary skills are Woodcutter, Smithy, Miner, Forager, Hunter, Crafter, Framer, Fisher, Medic, Scavenger & Tamer\n(taming requires pets mod and may not be available on certain servers).", ["aboutwoodcutter"] = "Increases the amount of wood you receive from cutting down trees, increases the bonus amount you get when a tree has been cut down, and gives you increased chances to have apples fall while cutting a tree.", ["aboutwoodcuttersettings"] = "[Current WoodCutter Settingss] \nMax Level: {0} \nStarting Cost: {1} \nCost Multiplier: {2}x Level \nGather Rate: +{3}% \nBonus: +{4}% \nApple Chance: {5}%", ["aboutsmithy"] = "Increases the chance of extra production from smelting or cooking in a furnace or grill and reduces the amount of fuel used in a furnace or grill so they burn longer with less fuel.", ["aboutsmithysettings"] = "[Current Smithy Settings]\nMax Level: {0} \nStarting Cost: {1} \nCost Multiplier: {2}x Level \nIncreased Production: {3}% \n Fuel Consumption: -{4}%", ["aboutminer"] ="Increases the amount of ore gathered from stone, metal, sulfur, etc.. and the amount of bonus material recieved when an ore has been fully collected. This skill also reduces the amount of fuel used when wearing a hat that consumes fuel like the mining hat, candle hat, etc..", ["aboutminersettings"] = "[Current Miner Settings]\nMax Level: {0}\nStarting Cost: {1}\nCost Multiplier: {2}\nGather Rate: +{3}%\nBonus: +{4}%\nFuel Consumption: -{5}%", ["aboutforager"] = "Increases the amount of resources you receive when collecting by hand from the ground such as wood, stone, metal, sulfer, berries, mushrooms, etc.. anything collected on the ground by hand. You also get an increased amount of seeds from berries, hemp, and other resources that provide seeds. This skill also gives you an increased chance to find random items when gathering by hand so make sure you keep an eye out around you for random item.", ["aboutforagersettings"] = "[Current Forager Settings]\nMax Level: {0}\nStarting Cost: {1}\nCost Multiplier: {2}\nGather Rate: +{3}%\nSeed Chance: +{4}% Amount: {5}\nRandom Item: {6}%", ["abouthunter"] = "Grants you the ability to get more food from animals when harvesting, increased bonus amount when fully harvested, increased damage to wildlife and even greater damage to wildlife when hunting at night.", ["abouthuntersettings"] = "[Current Hunter Settings]\nMax Level: {0}\nStarting Cost: {1}\nCost Multiplier: {2}\nGather Rate: +{3}%\nBonus: +{4}%\nWildlife Dmg Increase: +{5}%\nNight Dmg Increase: +{6}%", ["aboutcrafter"] = "Grants you increased crafting speed while reducing the amount of material cost when crafting. Gives you increased chance to fully repair items and increased chance to create items with up to 10% higher condition.", ["aboutcraftersettings"] = "[Current Crafter Settings]\nMax Level: {0}\nStarting Cost: {1}\nCost Multiplier: {2}\nCraft Speed: -{3}%\nCraft Cost: -{4}%\nRepair Speed: {5}%\nCondition Chance: {6}%\nCondition Increase: +10%", ["aboutframer"] = "Decreases the cost of materials needed to upgrade or repair buildings as well as reduces the repair time when a building has been damaged.", ["aboutframersettings"] = "[Current Framer Settings]\nMax Level: {0}\nStarting Cost: {1}\nCost Multiplier: {2}\n Upgrade Cost: {3}%\nRepair Cost: {4}%\nRepair Time: {5}%", ["aboutfisher"] = "Gives you the ability to catch more fish at one time or increases the items you collect when fishing if you don't catch a fish.", ["aboutfishersettings"] = "[Current Fisher Settings]\nMax Level: {0}\nStarting Cost: {1} \nCost Multiplier: {2} \nFish Increase: {3} \nItem Increase: {4}", ["aboutmedic"] = "Gives you the ability to revive yourself and other players with more health once revived as well as reduces the time it takes to craft teas or other items in the mixing table.", ["aboutscavenger"] = "Increases chance to find more loot inside containers with chance to find bonus items when looting containers. The higher your level the more items you'll find. Keep an eye out around these containers for your extra loot!", ["aboutmedicsettings"] = "[Current Medic Settings]\nMax Level: {0}\nStarting Cost: {1} \nCost Multiplier: {2} \nRevival Health: {3} \nRecover Health: {4} \nCrafting Time: {5}%", ["abouttamer"] = "If this skill is available then it will grant you the ability to tame animals as pets. Each level allows you to tame a bigger animal that can help you survive in the world. These pets can also carry items and even attack your enemies. Pets are currently controlled by a seperate mod with it's own settings and adjustments. More details about Pets can be found using the '/pet help' chat command", ["abouttamersettings"] = "[Current Tamer Settings]\nEnabled: {0} \nMax Level: {1} \nStarting Cost: {2} \nCost Multiplier: {3} \n\n[Tameable Pets]\nChicken: {4} | Level Req: {5} \nBoar: {6} | Level Req: {7} \nStag: {8} | Level Req:{9} \nWolf: {10} | Level Req: {11} \nBear: {12} | Level Req: {13}", ["nextpageskills"] = "Click Next Page to view more skill information", ["techtreenode"] = "You need {0} scrap to research {1}", ["xpgiveneedtype"] = "Need to enter a player type: /xpgive (type name or id) (playername or playerid) (amount)", ["xpgiveneedname"] = "Need to enter a player name or id: /xpgive (type name or id) (playername or playerid) (amount)", ["pointsgiveneedtype"] = "Need to enter a point/player type: /xpgivepoints (type stat or skill) (type name or id) (playername or playerid) (amount)", ["pointsgiveneedname"] = "Need to enter a player name or id: /xpgivepoints (type stat or skill) (type name or id) (playername or playerid) (amount)", ["xpgivenotfound"] = "Player not found", ["xpgiveneedamount"] = "Need to enter an amount /xpgive (type name or id) (playername or playerid) (amount)", ["pointsgiveneedamount"] = "Need to enter an amount /xpgivepoints (type stat or skill) (type name or id) (playername or playerid) (amount)", ["xpgiveplayer"] = "You have given {0} {1} experience, they now have a total of {2} experience.", ["pointsgiveplayer"] = "You have given {0} {1} {2} points, they now have a total of {3} {2} points.", ["xpgiveall"] = "You have given all players {0} experience", ["xpresetneedtype"] = "Need to enter a player type: /xpreset (name or id) (playername or id)", ["xpresetneedname"] = "Need to enter a player name: /xpreset (name or id) (playername or id)", ["xpresetnotfound"] = "Player not found", ["xpresetplayer"] = "You have reset your character.", ["xpresetselectedplayer"] = "You have reset {0}", ["xptakeneedtype"] = "Need to enter a player type: /xptake (name or id) (playername or id) (amount)", ["xptakeneedname"] = "Need to enter a player name: /xptake (name or id) (playername or id) (amount)", ["xptakenotfound"] = "Player not found", ["xptakeneedamount"] = "Need to enter an amount: /xptake (name or id) (playername or id) (amount)", ["xptakeplayer"] = "You have taken {0} experince from {1}, they now have a total of {2} experience.", ["adminpanelinfonew"] = "ⓍⓅerience Admin Control Panel\n\n Here you can adjust all the settings for this mod without having to open and edit the config file. On the menu to your left are several pages where you can adjust " + "everything from levels, experience, stats, skills, and more.. Once you have made any adjustments to these pages make sure you click Save & Reload on the menu so that these adjustments are writen to the config " + "and loaded. If you do not click save and reload any adjustment you made will be lost! Keep in mind this is an extremely detailed mod and even the slightest adjustment can make a huge difference on how this mod functions! It is " + "suggested that you make minor adjustments to see how the settings will effect your server and player's gaming experience. If you adjust the level start, xp requirement increase, stat points per level or skill points per level settings after players have been playing on your server make sure you click Fix Player Data " + "on the Reset Options page AFTER you save and reload the mod so that the system can recalculate all players levels and requirements. Players will not loose any XP but they will have their profile reset and will have to reapply any points they have.\n\n" + "If you have any issues, questions, or suggestions you can join the mod developer's discord at \ndiscord.rustlevels.com\nhttps://discord.gg/gfZn8tvQGW\n\n You can also get updates, access to prerelease versions (beta), and more on our discord." + "\n\nⓍⓅerience was created by MACHIN3", ["playerfixdatahelp"] = "You can use the Fix My Data button below to have your xperience data recalculated. This will reset all your stats except your experience. Your level, required xp, points, and info will be reset and recalculated based on the current server settings and your current experience. You will receive " + "however many points for stats and skills that your level should have and you will need to reapply them towards your stats and skills.\n\n Reasons you may need to do this:\n1. Server settings may have been changed since your last login.\n2.Map wipe didn't properly link your data.\n3. New features were added.\n4. Server was restored to an earlier date.", ["uinotify_xpgain"] = "+{0} XP", ["uinotify_xploss"] = "-{0} XP", ["econbalance"] = "Balance:", ["econdeposit"] = "You received a deposit of {0} into your account for leveling up", ["econwidthdrawlevel"] = "You lost {0} from your account for level loss", ["econwidthdrawresetstat"] = "You spent {0} for resetting stats, your balance is now {1}", ["econwidthdrawresetskill"] = "You spent {0} for resetting skills, your balance is now {1}", ["econwidthdrawresetstatfailed"] = "You Do Not Have {0} for resetting stats, your balance is {1}", ["econwidthdrawresetskillfailed"] = "You Do Not Have {0} for resetting skills, your balance is {1}", ["econwidthdrawlevelup"] = "You spent {0} for leveling up {1}, your balance is now {2}", ["econwidthdrawlevelupfailed"] = "You Do Not Have {0} for leveling up {1}, your balance is {2}", ["srewardwidthdrawresetstat"] = "You spent {0} points for resetting stats, your balance is now {1}", ["srewardwidthdrawresetskill"] = "You spent {0} points for resetting skills, your balance is now {1}", ["srewardwidthdrawresetstatfailed"] = "You Do Not Have {0} points for resetting stats, your balance is {1}", ["srewardnwidthdrawresetskillfailed"] = "You Do Not Have {0} points for resetting skills, your balance is {1}", ["srewardwidthdrawlevelup"] = "You spent {0} points for leveling up {1}, your balance is now {2}", ["srewardswidthdrawlevelupfailed"] = "You Do Not Have {0} points for leveling up {1}, your balance is {2}", ["srewardsup"] = "You recieved {0} points in server rewards for leveling up", ["srewardsdown"] = "You lost {0} points in server rewards for leveling down", ["fixdatadisabled"] = "Fix Data Option Disabled By Admin", ["hardcorenoreset"] = "Hardcore mode enabled, Stat/Skill Reset is Disabed", ["crafternotenough"] = "Not enough resources to repair item", ["killrecords"] = "Kill Records", ["mykillrecords"] = "My Kill Records", ["mydeathrecords"] = "My Death Records", ["playerdeathrecords"] = "Player's Death Records", ["playerkillrecords"] = "Player's Kill Records", ["maxleveled"] = "You have reached the max level for {0}", ["playerrankup"] = "You have reached the Rank of {0}, your level, experience, stats, and skills have been reset. You start with {1} stat points and {2} skill points", ["rank"] = "Rank", ["ranksig"] = "Rank Tag", ["ranklevel"] = "Rank Level", ["rankxp"] = "Rank XP", ["wizardrygrantnovice"] = "You have been reached Wizardry Novice level", ["wizardrygrantadept"] = "You have been reached Wizardry Adept level", ["wizardrygrantmaster"] = "You have been reached Wizardry Master level", ["wizardryrevokenovice"] = "You have been lost Wizardry Novice level", ["wizardryrevokeadept"] = "You have been lost Wizardry Adept level", ["wizardryrevokemaster"] = "You have been lost Wizardry Master level", ["wizardrynovice"] = "Novice", ["wizardryadept"] = "Adept", ["wizardrymaster"] = "Master", ["archerygrantnovice"] = "You have been reached Archery Novice level", ["archerygrantadept"] = "You have been reached Archery Adept level", ["archerygrantmaster"] = "You have been reached Archery Master level", ["archeryrevokenovice"] = "You have been lost Archery Novice level", ["archeryrevokeadept"] = "You have been lost Archery Adept level", ["archeryrevokemaster"] = "You have been lost Archery Master level", ["archerynovice"] = "Novice", ["archeryadept"] = "Adept", ["archerymaster"] = "Master", ["uiscale"] = "UI Scale {0}", ["backpackgrant"] = "You have a backpack with {0} row(s).", ["backpackrevoke"] = "You have lost permission to use your backpack.", ["quarryboost"] = "Quarry Production", ["quarryduration"] = "Quarry Dursation", ["quarrycooldown"] = "Quarry Cooldown", ["weaponryaddonammochance"] = "Free Ammo Chance", ["addonscavengervendorchance"] = "Extra Vending Chance", ["addonscavengervendoramount"] = "Extra Vending Amount", ["addonrecyclerchance"] = "Free Recycle Chance", ["addonrecyclerspeed"] = "Recycle Speed", ["grubworm"] = "Grub/Worm", ["myraids"] = "My Raids Completed", ["otherraids"] = "Player's Raids Completed", ["dailylimitreset"] = "Daily limit timer has been reset. Next Daily reset will be in {0} hours.", ["dailyxplimitreached"] = "You have earned the maximum allowed XP today ({0}). You can start earning XP again in {1} {2}.", ["dailyxplimit"] = "Daily XP limit", ["dailyresetlimit"] = "Daily Reset limit", ["dailyresetlimitreached"] = "You have reached the maximum allowed reset limit today ({0}). You can reset again in {1} {2}.", }, this); } #endregion #region API private void GiveXP(BasePlayer player, double amount) { if (player == null || amount == 0) return; GainExp(player, amount); } private void TakeXP(BasePlayer player, double amount) { if (player == null || amount == 0) return; LoseExp(player, amount); } private string GetXPCache(BasePlayer player, string info) { if (player == null || !player.userID.IsSteamId() || info == null) return "Data Missing"; XPRecord xprecord = GetXPRecord(player); Ranks rank = GetXPRank(xprecord.rank); switch (info) { case "steamid": info = player.UserIDString; break; case "displayname": info = player.displayName; break; case "level": info = xprecord.level.ToString(); break; case "xp": info = xprecord.experience.ToString(); break; case "lastreqxp": info = (xprecord.requiredxp - (xprecord.level * config.xpLevel.levelmultiplier)).ToString(); break; case "reqxp": info = xprecord.requiredxp.ToString(); break; case "statp": info = xprecord.statpoint.ToString(); break; case "skillp": info = xprecord.skillpoint.ToString(); break; case "mentality": info = xprecord.Mentality.ToString(); break; case "mentalityp": info = xprecord.MentalityP.ToString(); break; case "dexterity": info = xprecord.Dexterity.ToString(); break; case "dexterityp": info = xprecord.DexterityP.ToString(); break; case "might": info = xprecord.Might.ToString(); break; case "mightp": info = xprecord.MightP.ToString(); break; case "captaincy": info = xprecord.Captaincy.ToString(); break; case "captaincyp": info = xprecord.CaptaincyP.ToString(); break; case "weaponry": info = xprecord.Weaponry.ToString(); break; case "weaponryp": info = xprecord.WeaponryP.ToString(); break; case "woodcutter": info = xprecord.WoodCutter.ToString(); break; case "woodcutterp": info = xprecord.WoodCutterP.ToString(); break; case "smithy": info = xprecord.Smithy.ToString(); break; case "smithyp": info = xprecord.SmithyP.ToString(); break; case "miner": info = xprecord.Miner.ToString(); break; case "minerp": info = xprecord.MinerP.ToString(); break; case "forager": info = xprecord.Forager.ToString(); break; case "foragerp": info = xprecord.ForagerP.ToString(); break; case "fisher": info = xprecord.Fisher.ToString(); break; case "fisherp": info = xprecord.FisherP.ToString(); break; case "hunter": info = xprecord.Hunter.ToString(); break; case "hunterp": info = xprecord.HunterP.ToString(); break; case "scavenger": info = xprecord.Scavenger.ToString(); break; case "scavengerp": info = xprecord.ScavengerP.ToString(); break; case "electrician": info = xprecord.Electrician.ToString(); break; case "electricianp": info = xprecord.ElectricianP.ToString(); break; case "tamer": info = xprecord.Tamer.ToString(); break; case "tamerp": info = xprecord.TamerP.ToString(); break; case "medic": info = xprecord.Medic.ToString(); break; case "medicp": info = xprecord.MedicP.ToString(); break; case "framer": info = xprecord.Framer.ToString(); break; case "framerp": info = xprecord.FramerP.ToString(); break; case "crafter": info = xprecord.Crafter.ToString(); break; case "crafterp": info = xprecord.CrafterP.ToString(); break; case "status": info = xprecord.Status.ToString(); break; case "wood": info = xprecord.Wood.ToString(); break; case "stone": info = xprecord.Stone.ToString(); break; case "metal": info = xprecord.Metal.ToString(); break; case "sulfur": info = xprecord.Sulfur.ToString(); break; case "cactus": info = xprecord.Cactus.ToString(); break; case "berries": info = xprecord.Berries.ToString(); break; case "potato": info = xprecord.Potato.ToString(); break; case "pumpkin": info = xprecord.Pumpkin.ToString(); break; case "corn": info = xprecord.Corn.ToString(); break; case "mushroom": info = xprecord.Mushroom.ToString(); break; case "hemp": info = xprecord.Hemp.ToString(); break; case "seed": info = xprecord.Seed.ToString(); break; case "ranksenabled": info = config.xpLevelRanks.enableresetranks.ToString(); break; case "truexp": info = xprecord.trueexperience.ToString(); break; case "truelevel": info = xprecord.truelevel.ToString(); break; case "rank": info = xprecord.rank.ToString(); break; case "rankname": info = rank.name.ToString(); break; case "ranksig": info = rank.sig.ToString(); break; case "rankimg": info = rank.image.ToString(); break; } return info; } private string GetServerCache(string info) { if (info == null) return null; switch (info) { case "ranksenabled": info = config.xpLevelRanks.enableresetranks.ToString(); break; case "ranklist": info = JsonConvert.SerializeObject(config.xpLevelRanks.ranks); break; case "images": info = JsonConvert.SerializeObject(config.imageicons); break; case "archery": info = config.archerymod.enablearchery.ToString(); break; case "archerystatorskill": info = config.archerymod.statorskill.ToString(); break; case "archerynovice": info = config.archerymod.novicelevel.ToString(); break; case "archeryadept": info = config.archerymod.adeptlevel.ToString(); break; case "archerymaster": info = config.archerymod.masterlevel.ToString(); break; case "wizardry": info = config.wizardrymod.enablewizardry.ToString(); break; case "wizardrystatorskill": info = config.wizardrymod.statorskill.ToString(); break; case "wizardryadept": info = config.wizardrymod.adeptlevel.ToString(); break; case "wizardrynovice": info = config.wizardrymod.novicelevel.ToString(); break; case "wizardrymaster": info = config.wizardrymod.masterlevel.ToString(); break; case "backpacks": info = config.backpacksmod.enablebackpacks.ToString(); break; case "backpackstatorskill": info = config.backpacksmod.statorskill.ToString(); break; case "backpack1": info = config.backpacksmod.backpackrow1.ToString(); break; case "backpack2": info = config.backpacksmod.backpackrow2.ToString(); break; case "backpack3": info = config.backpacksmod.backpackrow3.ToString(); break; case "backpack4": info = config.backpacksmod.backpackrow4.ToString(); break; case "backpack5": info = config.backpacksmod.backpackrow5.ToString(); break; case "backpack6": info = config.backpacksmod.backpackrow6.ToString(); break; case "backpack7": info = config.backpacksmod.backpackrow7.ToString(); break; case "backpack8": info = config.backpacksmod.backpackrow8.ToString(); break; case "config": info = JsonConvert.SerializeObject(config); break; case "configforagerlist": info = JsonConvert.SerializeObject(config.forager.randomChanceList); break; case "configforagerdropchance": info = config.forager.randomchance.ToString(); break; case "configscavengerlist": info = JsonConvert.SerializeObject(config.scavenger.scavChanceList); break; case "configscavengerdropchance": info = config.scavenger.scavchance.ToString(); break; case "petstrue": info = "false"; if (Pets != null) { info = "true"; } break; case "panimaltrue": info = "false"; if (PersonalAnimal != null) { info = "true"; } break; case "pets": info = config.tamer.enabletame.ToString(); break; case "tamechicken": info = config.tamer.tamechicken.ToString(); break; case "tamechickenlevel": info = config.tamer.chickenlevel.ToString(); break; case "tameboar": info = config.tamer.tameboar.ToString(); break; case "tameboarlevel": info = config.tamer.boarlevel.ToString(); break; case "tamestag": info = config.tamer.tamestag.ToString(); break; case "tamestaglevel": info = config.tamer.staglevel.ToString(); break; case "tamewolf": info = config.tamer.tamewolf.ToString(); break; case "tamewolflevel": info = config.tamer.wolflevel.ToString(); break; case "tamebear": info = config.tamer.tamebear.ToString(); break; case "tamebearlevel": info = config.tamer.bearlevel.ToString(); break; case "tamepolarbear": info = config.tamer.tamepolarbear.ToString(); break; case "tamepolarbearlevel": info = config.tamer.polarbearlevel.ToString(); break; case "dailylimithours": info = config.dailytimer.dailyresettimerhours.ToString(); break; case "dailyxplimits": info = config.dailyxpLimit.enabledailyxplimit.ToString(); break; case "dailyxplimit": info = config.dailyxpLimit.dailyxplimit.ToString(); break; case "dailyxplimitvip": info = config.dailyxpLimit.dailyxplimitvip.ToString(); break; case "dailyxplimitmultiplier": switch(config.dailyxpLimit.limitmultipliertype) { case 1: info = $"+{config.dailyxpLimit.limitpercentage.ToString()}% per level"; break; case 2: info = $"+{config.dailyxpLimit.limitmultiplier.ToString()}x per level"; break; } break; case "dailyresetlimits": info = config.dailyresetLimit.enabledailyresetlimit.ToString(); break; case "dailyresetlimitstats": info = config.dailyresetLimit.dailystatlimit.ToString(); break; case "dailyresetlimitstatsvip": info = config.dailyresetLimit.dailystatlimitvip.ToString(); break; case "dailyresetlimitskills": info = config.dailyresetLimit.dailyskilllimit.ToString(); break; case "dailyresetlimitskillsvip": info = config.dailyresetLimit.dailyskilllimitvip.ToString(); break; } return info; } private string GetVersion() { return version.ToString(); } private object GetFullCache() { return _xperienceCache; } private bool ExcludePlayer(BasePlayer player) { if (player == null) return true; XPRecord xprecord = GetXPRecord(player); return xprecord.exclude; } private bool WelcomePanel(BasePlayer player) { if (player == null) return true; XPRecord xprecord = GetXPRecord(player); return xprecord.showwelcomepanel; } #endregion } #region Extension Methods namespace XPerienceEx { public static class PlayerEx { public static void RunEffect(this BasePlayer player, string prefab) { Effect effect = new Effect(); effect.Init(Effect.Type.Generic, player.ServerPosition, Vector3.zero); effect.pooledString = prefab; EffectNetwork.Send(effect, player.Connection); } } } #endregion }