diff --git a/EscapeFromTarkovCheat.sln b/EscapeFromTarkovCheat.sln new file mode 100644 index 0000000..0115065 --- /dev/null +++ b/EscapeFromTarkovCheat.sln @@ -0,0 +1,41 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36414.22 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EscapeFromTarkovCheat", "EscapeFromTarkovCheat\EscapeFromTarkovCheat.csproj", "{C1C426A1-EFC3-4C83-972C-ECA557571328}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "stupid.solutions", "stoopid.raw\stupid.solutions.csproj", "{110FDB00-FE8A-FE52-3071-717628A366E4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C1C426A1-EFC3-4C83-972C-ECA557571328}.Debug|Any CPU.ActiveCfg = Debug|x64 + {C1C426A1-EFC3-4C83-972C-ECA557571328}.Debug|Any CPU.Build.0 = Debug|x64 + {C1C426A1-EFC3-4C83-972C-ECA557571328}.Debug|x64.ActiveCfg = Debug|x64 + {C1C426A1-EFC3-4C83-972C-ECA557571328}.Debug|x64.Build.0 = Debug|x64 + {C1C426A1-EFC3-4C83-972C-ECA557571328}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C1C426A1-EFC3-4C83-972C-ECA557571328}.Release|Any CPU.Build.0 = Release|Any CPU + {C1C426A1-EFC3-4C83-972C-ECA557571328}.Release|x64.ActiveCfg = Release|x64 + {C1C426A1-EFC3-4C83-972C-ECA557571328}.Release|x64.Build.0 = Release|x64 + {110FDB00-FE8A-FE52-3071-717628A366E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {110FDB00-FE8A-FE52-3071-717628A366E4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {110FDB00-FE8A-FE52-3071-717628A366E4}.Debug|x64.ActiveCfg = Debug|Any CPU + {110FDB00-FE8A-FE52-3071-717628A366E4}.Debug|x64.Build.0 = Debug|Any CPU + {110FDB00-FE8A-FE52-3071-717628A366E4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {110FDB00-FE8A-FE52-3071-717628A366E4}.Release|Any CPU.Build.0 = Release|Any CPU + {110FDB00-FE8A-FE52-3071-717628A366E4}.Release|x64.ActiveCfg = Release|Any CPU + {110FDB00-FE8A-FE52-3071-717628A366E4}.Release|x64.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {CAD679E5-CE6D-4BA5-87D6-7B9A31569F44} + EndGlobalSection +EndGlobal diff --git a/EscapeFromTarkovCheat/Data/GameExfiltrationPoint.cs b/EscapeFromTarkovCheat/Data/GameExfiltrationPoint.cs new file mode 100644 index 0000000..61eb621 --- /dev/null +++ b/EscapeFromTarkovCheat/Data/GameExfiltrationPoint.cs @@ -0,0 +1,155 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using EFT.Interactive; +using EscapeFromTarkovCheat.Utils; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Data +{ + class GameExfiltrationPoint + { + public ExfiltrationPoint ExfiltrationPoint { get; } + + public Vector3 ScreenPosition => screenPosition; + + public bool IsOnScreen { get; private set; } + + public float Distance { get; private set; } + public string Name { get; set; } + public bool Eligible { get; private set; } + + public string FormattedDistance => $"{Math.Round(Distance)}m"; + + private Vector3 screenPosition; + + public GameExfiltrationPoint(ExfiltrationPoint exfiltrationPoint, bool eligible) + { + if (exfiltrationPoint == null) + throw new ArgumentNullException(nameof(exfiltrationPoint)); + + ExfiltrationPoint = exfiltrationPoint; + screenPosition = default; + Distance = 0f; + Name = exfiltrationPoint.Settings.Name.Localized(); + Eligible = eligible; + } + + public void RecalculateDynamics() + { + if (!GameUtils.IsExfiltrationPointValid(ExfiltrationPoint)) + return; + + screenPosition = GameUtils.WorldPointToScreenPoint(ExfiltrationPoint.transform.position); + IsOnScreen = GameUtils.IsScreenPointVisible(screenPosition); + Distance = Vector3.Distance(Main.MainCamera.transform.position, ExfiltrationPoint.transform.position); + } + + private string ExtractionNameToSimpleName(string extractionName) + { + // Factory + if (extractionName.Contains("exit (3)")) + return "Cellars"; + if (extractionName.Contains("exit (1)")) + return "Gate 3"; + if (extractionName.Contains("exit (2)")) + return "Gate 0"; + if (extractionName.Contains("exit_scav_gate3")) + return "Gate 3"; + if (extractionName.Contains("exit_scav_camer")) + return "Blinking Light"; + if (extractionName.Contains("exit_scav_office")) + return "Office"; + + // Woods + if (extractionName.Contains("eastg")) + return "East Gate"; + if (extractionName.Contains("scavh")) + return "House"; + if (extractionName.Contains("deads")) + return "Dead Mans Place"; + if (extractionName.Contains("var1_1_constant")) + return "Outskirts"; + if (extractionName.Contains("scav_outskirts")) + return "Outskirts"; + if (extractionName.Contains("water")) + return "Outskirts Water"; + if (extractionName.Contains("boat")) + return "The Boat"; + if (extractionName.Contains("mountain")) + return "Mountain Stash"; + if (extractionName.Contains("oldstation")) + return "Old Station"; + if (extractionName.Contains("UNroad")) + return "UN Road Block"; + if (extractionName.Contains("var2_1_const")) + return "UN Road Block"; + if (extractionName.Contains("gatetofactory")) + return "Gate to Factory"; + if (extractionName.Contains("RUAF")) + return "RUAF Gate"; + + // Shoreline + if (extractionName.Contains("roadtoc")) + return "Road to Customs"; + if (extractionName.Contains("lighthouse")) + return "Lighthouse"; + if (extractionName.Contains("tunnel")) + return "Tunnel"; + if (extractionName.Contains("wreckedr")) + return "Wrecked Road"; + if (extractionName.Contains("deadend")) + return "Dead End"; + if (extractionName.Contains("housefence")) + return "Ruined House Fence"; + if (extractionName.Contains("gyment")) + return "Gym Entrance"; + if (extractionName.Contains("southfence")) + return "South Fence Passage"; + if (extractionName.Contains("adm_base")) + return "Admin Basement"; + + // Customs + if (extractionName.Contains("administrationg")) + return "Administration Gate"; + if (extractionName.Contains("factoryfar")) + return "Factory Far Corner"; + if (extractionName.Contains("oldazs")) + return "Old Gate"; + if (extractionName.Contains("milkp_sh")) + return "Shack"; + if (extractionName.Contains("beyondfuel")) + return "Beyond Fuel Tank"; + if (extractionName.Contains("railroadtom")) + return "Railroad to Mil Base"; + if (extractionName.Contains("_pay_car")) + return "V-Exit"; + if (extractionName.Contains("oldroadgate")) + return "Old Road Gate"; + if (extractionName.Contains("sniperroad")) + return "Sniper Road Block"; + if (extractionName.Contains("warehouse17")) + return "Warehouse 17"; + if (extractionName.Contains("factoryshacks")) + return "Factory Shacks"; + if (extractionName.Contains("railroadtotarkov")) + return "Railroad to Tarkov"; + if (extractionName.Contains("trailerpark")) + return "Trailer Park"; + if (extractionName.Contains("crossroads")) + return "Crossroads"; + if (extractionName.Contains("railroadtoport")) + return "Railroad to Port"; + + // Interchange + if (extractionName.Contains("NW_Exfil")) + return "North West Extract"; + if (extractionName.Contains("SE_Exfil")) + return "Emmercom"; + return extractionName; + } + + } +} diff --git a/EscapeFromTarkovCheat/Data/GameLootContainer.cs b/EscapeFromTarkovCheat/Data/GameLootContainer.cs new file mode 100644 index 0000000..977e7dc --- /dev/null +++ b/EscapeFromTarkovCheat/Data/GameLootContainer.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using EFT.Interactive; +using EscapeFromTarkovCheat.Utils; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Data +{ + class GameLootContainer + { + public LootableContainer LootableContainer { get;} + public Vector3 ScreenPosition => screenPosition; + + public bool IsOnScreen { get; private set; } + + public float Distance { get; private set; } + + public string FormattedDistance => $"{Math.Round(Distance)}m"; + + private Vector3 screenPosition; + + public GameLootContainer(LootableContainer lootableContainer) + { + if (lootableContainer == null) + throw new ArgumentNullException(nameof(lootableContainer)); + + LootableContainer = lootableContainer; + screenPosition = default; + Distance = 0f; + } + + public void RecalculateDynamics() + { + if (!GameUtils.IsLootableContainerValid(LootableContainer)) + return; + + screenPosition = GameUtils.WorldPointToScreenPoint(LootableContainer.transform.position); + IsOnScreen = GameUtils.IsScreenPointVisible(screenPosition); + Distance = Vector3.Distance(Main.MainCamera.transform.position, LootableContainer.transform.position); + } + } +} diff --git a/EscapeFromTarkovCheat/Data/GameLootItem.cs b/EscapeFromTarkovCheat/Data/GameLootItem.cs new file mode 100644 index 0000000..0896858 --- /dev/null +++ b/EscapeFromTarkovCheat/Data/GameLootItem.cs @@ -0,0 +1,43 @@ +using System; +using EFT.Interactive; +using EscapeFromTarkovCheat.Utils; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Data +{ + + public class GameLootItem + { + public LootItem LootItem { get; } + + public Vector3 ScreenPosition => screenPosition; + + public bool IsOnScreen { get; private set; } + + public float Distance { get; private set; } + + public string FormattedDistance => $"{Math.Round(Distance)}m"; + + private Vector3 screenPosition; + + public GameLootItem(LootItem lootItem) + { + if (lootItem == null) + throw new ArgumentNullException(nameof(lootItem)); + + LootItem = lootItem; + screenPosition = default; + Distance = 0f; + } + + public void RecalculateDynamics() + { + if (!GameUtils.IsLootItemValid(LootItem)) + return; + + screenPosition = GameUtils.WorldPointToScreenPoint(LootItem.transform.position); + IsOnScreen = GameUtils.IsScreenPointVisible(screenPosition); + Distance = Vector3.Distance(Main.MainCamera.transform.position, LootItem.transform.position); + } + } +} \ No newline at end of file diff --git a/EscapeFromTarkovCheat/Data/GamePlayer.cs b/EscapeFromTarkovCheat/Data/GamePlayer.cs new file mode 100644 index 0000000..f28f784 --- /dev/null +++ b/EscapeFromTarkovCheat/Data/GamePlayer.cs @@ -0,0 +1,75 @@ +using System; +using System.Linq; +using EFT; +using EscapeFromTarkovCheat.Utils; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Data +{ + + public class GamePlayer + { + + public Player Player { get; } + + public Vector3 ScreenPosition => screenPosition; + + public Vector3 HeadScreenPosition => headScreenPosition; + + public bool IsOnScreen { get; private set; } + + public bool IsVisible { get; private set; } + + public float Distance { get; private set; } + + public bool IsAI { get; private set; } + + public string FormattedDistance => $"{(int)Math.Round(Distance)}m"; + + private Vector3 screenPosition; + private Vector3 headScreenPosition; + + public GamePlayer(Player player) + { + if (player == null) + throw new ArgumentNullException(nameof(player)); + + this.Player = player; + screenPosition = default; + headScreenPosition = default; + IsOnScreen = false; + Distance = 0f; + IsAI = true; + } + public Vector3 GetBonePosition(BoneType boneType) + { + if (Player.PlayerBody?.SkeletonRootJoint?.Bones == null) + return Vector3.zero; + + Transform boneTransform = Player.PlayerBody.SkeletonRootJoint.Bones.ElementAtOrDefault((int)boneType).Value; + + if (boneTransform == null) + return Vector3.zero; + + return GameUtils.WorldPointToScreenPoint(boneTransform.position); + } + + public void RecalculateDynamics() + { + if (!GameUtils.IsPlayerValid(Player)) + return; + + screenPosition = GameUtils.WorldPointToScreenPoint(Player.Transform.position); + + if (Player.PlayerBones != null) + headScreenPosition = GameUtils.WorldPointToScreenPoint(Player.PlayerBones.Head.position); + + IsOnScreen = GameUtils.IsScreenPointVisible(screenPosition); + Distance = Vector3.Distance(Main.MainCamera.transform.position, Player.Transform.position); + + if ((Player.Profile != null) && (Player.Profile.Info != null)) + IsAI = (Player.Profile.Info.RegistrationDate <= 0); + + } + } +} \ No newline at end of file diff --git a/EscapeFromTarkovCheat/Data/Locale.cs b/EscapeFromTarkovCheat/Data/Locale.cs new file mode 100644 index 0000000..7e42ac4 --- /dev/null +++ b/EscapeFromTarkovCheat/Data/Locale.cs @@ -0,0 +1,8 @@ +namespace EscapeFromTarkovCheat.Data +{ + public enum Locale + { + ENGLISH, + CHINESE + } +} diff --git a/EscapeFromTarkovCheat/Data/LocalisationData.cs b/EscapeFromTarkovCheat/Data/LocalisationData.cs new file mode 100644 index 0000000..7e9b421 --- /dev/null +++ b/EscapeFromTarkovCheat/Data/LocalisationData.cs @@ -0,0 +1,266 @@ +using EscapeFromTarkovCheat.Utils; +using System.Collections.Generic; + +namespace EscapeFromTarkovCheat.Data +{ + internal class LocalisationData + { + public Locale locale; + public Dictionary data = new Dictionary(); + + private void zh_CN() { + data.Add(StringKey.MAIN_TITLE, "Stoopid Cheat V1"); + data.Add(StringKey.MENU_PLAYER_VISUAL_TITLE, "玩家视觉菜单"); + data.Add(StringKey.MENU_MISC_VISUAL_TITLE, "杂项视觉菜单"); + data.Add(StringKey.MENU_AIMBOT_TITLE, "自瞄视觉菜单"); + data.Add(StringKey.MENU_MISCELLANEOUS_TITLE, "杂项菜单"); + data.Add(StringKey.MENU_SKILLS_TITLE, "技能编辑器"); + data.Add(StringKey.MENU_ITEMS_TITLE, "物品菜单"); + data.Add(StringKey.MENU_MAIN_DESC_TOGGLE, "按 Insert 键开关菜单"); + data.Add(StringKey.MENU_MAIN_HINT_UNLOCK, "按 数字键盘 4 解锁所有门"); + data.Add(StringKey.MENU_MAIN_HINT_HEAL, "按 数字键盘 1 治疗"); + data.Add(StringKey.MENU_MAIN_BUTTON_PLAYER_VISUAL, GetByKey(StringKey.MENU_PLAYER_VISUAL_TITLE)); + data.Add(StringKey.MENU_MAIN_BUTTON_MISC_VISUAL, GetByKey(StringKey.MENU_MISC_VISUAL_TITLE)); + data.Add(StringKey.MENU_MAIN_BUTTON_AIMBOT, GetByKey(StringKey.MENU_AIMBOT_TITLE)); + data.Add(StringKey.MENU_MAIN_BUTTON_MISCELLANEOUS, GetByKey(StringKey.MENU_MISCELLANEOUS_TITLE)); + data.Add(StringKey.MENU_MAIN_BUTTON_SKILLS, GetByKey(StringKey.MENU_SKILLS_TITLE)); + data.Add(StringKey.MENU_MAIN_BUTTON_ITEMS, GetByKey(StringKey.MENU_ITEMS_TITLE)); + data.Add(StringKey.MENU_PLAYER_VISUAL_DRAWPLAYERS, "绘制玩家"); + data.Add(StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_BOX, "绘制玩家方框"); + data.Add(StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_NAME, "绘制玩家名"); + data.Add(StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_LINE, "绘制玩家射线"); + data.Add(StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_HEALTH, "绘制玩家血量"); + data.Add(StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_SKELETON, "绘制玩家骨骼"); + data.Add(StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_RANGE, "玩家距离范围"); + data.Add(StringKey.MENU_MISC_VISUAL_DRAWLOOTITEMS, "绘制杂散物资"); + data.Add(StringKey.MENU_MISC_VISUAL_LOOTITEMRANGE, "杂散物资距离范围"); + data.Add(StringKey.MENU_MISC_VISUAL_DRAWCONTAINERS, "绘制容器"); + data.Add(StringKey.MENU_MISC_VISUAL_CONTAINERRANGE, "容器距离范围"); + data.Add(StringKey.MENU_MISC_VISUAL_DRAWEP, "绘制撤离点"); + data.Add(StringKey.MENU_AIMBOT_TOGGLE, "自瞄"); + data.Add(StringKey.MENU_AIMBOT_SMOOTH, "自瞄平滑"); + data.Add(StringKey.MENU_AIMBOT_DRAWFOV, "绘制自瞄范围"); + data.Add(StringKey.MENU_AIMBOT_FOVRANGE, "自瞄视野范围"); + data.Add(StringKey.MENU_AIMBOT_AIMINGRANGE, "瞄准上限距离"); + data.Add(StringKey.MENU_AIMBOT_VISIBLEONLY, "仅瞄准可见目标"); + data.Add(StringKey.MENU_AIMBOT_SILENT, "静默瞄准"); + data.Add(StringKey.MENU_AIMBOT_NORECOIL, "无后座"); + data.Add(StringKey.MENU_MISCELLANEOUS_GODMODE, "锁血"); + data.Add(StringKey.MENU_MISCELLANEOUS_STAMINA, "无限耐"); + data.Add(StringKey.MENU_MISCELLANEOUS_SPEEDHACK, "角色加速"); + data.Add(StringKey.MENU_MISCELLANEOUS_SPEEDHACK_ADDITION, "速度加成量"); + data.Add(StringKey.MENU_MISCELLANEOUS_BUTTON_HEAL, $"回满血 [{Settings.InstaHeal}]"); + data.Add(StringKey.MENU_MISCELLANEOUS_BUTTON_UNLOCK, $"解锁 20米 内所有门 [{Settings.UnlockDoors}]"); + data.Add(StringKey.MENU_MISCELLANEOUS_BUTTON_KILL, $"全场活光光 [{Settings.KillSwitch}]"); + data.Add(StringKey.MENU_MISCELLANEOUS_BUTTON_TPENEMIES, $"吸星大法 [{Settings.TpEnemies}]"); + data.Add(StringKey.MENU_MISCELLANEOUS_BUTTON_TRADERSTANDING, $"全部商人好感增加 0.1 [{Settings.IncreaseTraderStandingKey}]"); + data.Add(StringKey.MENU_MISCELLANEOUS_BUTTON_ADDXP, "添加经验"); + data.Add(StringKey.MENU_MISCELLANEOUS_XPINRAID, "本局经验:"); + data.Add(StringKey.MENU_MISCELLANEOUS_XPADDITION, "经验添加量:"); + data.Add(StringKey.MENU_SKILLS_BUTTON_MAXALL, "技能全满"); + data.Add(StringKey.MENU_SKILLS_HINT_INRAID, "请在战局中使用!"); + data.Add(StringKey.MENU_SKILLS_STRENGTH, "力量"); + data.Add(StringKey.MENU_SKILLS_STRESSRESIST, "抗压"); + data.Add(StringKey.MENU_SKILLS_MAGDRILLS, "弹匣训练"); + data.Add(StringKey.MENU_SKILLS_MELEE, "近战"); + data.Add(StringKey.MENU_SKILLS_HIDEOUT, "藏身处管理"); + data.Add(StringKey.MENU_SKILLS_CRAFTING, "工艺"); + data.Add(StringKey.MENU_SKILLS_HEAVYVESTS, "重型护甲"); + data.Add(StringKey.MENU_SKILLS_LIGHTVESTS, "轻型护甲"); + data.Add(StringKey.MENU_SKILLS_LMG, "轻机枪"); + data.Add(StringKey.MENU_SKILLS_ASSAULT, "突击步枪"); + data.Add(StringKey.MENU_SKILLS_PISTOL, "手枪"); + data.Add(StringKey.MENU_SKILLS_PERCEPTION, "感知"); + data.Add(StringKey.MENU_SKILLS_SNIPER, "狙击步枪"); + data.Add(StringKey.MENU_SKILLS_SNIPING, "狙击"); + data.Add(StringKey.MENU_SKILLS_ENDURANCE, "耐力"); + data.Add(StringKey.MENU_SKILLS_THROWING, "投掷物"); + data.Add(StringKey.MENU_SKILLS_CHARISMA, "魅力"); + data.Add(StringKey.MENU_SKILLS_HEALTH, "健康"); + data.Add(StringKey.MENU_SKILLS_VITALITY, "活力"); + data.Add(StringKey.MENU_SKILLS_METABOLISM, "代谢"); + data.Add(StringKey.MENU_SKILLS_IMMUNITY, "免疫"); + data.Add(StringKey.MENU_SKILLS_SURGERY, "手术"); + data.Add(StringKey.MENU_SKILLS_INTELLECT, "智力"); + data.Add(StringKey.MENU_SKILLS_ATTENTION, "专注"); + data.Add(StringKey.MENU_SKILLS_REVOLVER, "左轮手枪"); + data.Add(StringKey.MENU_SKILLS_SHOTGUN, "霰弹枪"); + data.Add(StringKey.MENU_SKILLS_HMG, "重机枪"); + data.Add(StringKey.MENU_SKILLS_DMR, "精确射手步枪"); + data.Add(StringKey.MENU_SKILLS_AIMDRILLS, "瞄准训练"); + data.Add(StringKey.MENU_SKILLS_SEARCH, "搜索"); + data.Add(StringKey.MENU_SKILLS_WEAPONTREATMENT, "武器维护"); + data.Add(StringKey.MENU_SKILLS_TROUBLESHOOTING, "故障排除"); + data.Add(StringKey.MENU_SKILLS_COVERTMOVEMENT, "隐蔽行动"); + data.Add(StringKey.MENU_SKILLS_SMG, "冲锋枪"); + data.Add(StringKey.MENU_ITEMS_BUTTON_TPLOOTS, $"吸物资 [{Settings.TpLoots}]"); + data.Add(StringKey.MENU_ITEMS_BUTTON_AIRDROP, $"摇空投 [{Settings.CallAirdrop}]"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_TITLE, "物品栏编辑器"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_SEARCH, "搜索物品 ID"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_GET, "从背包中寻找"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_STRINGS, "搜索结果"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_CHANGES, "要提交的更改(按物品ID、宽和高的顺序)"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_BUTTON_COMMIT, "提交更改"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_BUTTON_SETFIR, "全部带勾"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_DUPE_TITLE, "物品复制器"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_DUPE_BUTTON_SETSTACK, "更改堆叠为 x"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_DUPE_BUTTON_RESETSTACK, "重置堆叠为 1"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_DUPE_BUTTON_SETSTACK_FASTRUBLE, "快速设置堆叠40万(卢布)"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_DUPE_BUTTON_SETSTACK_FASTEUROUSD, "快速设置堆叠5万(欧美元)"); + + // 撤离点 + data.Add(StringKey.DATA_EP_ACTIVE, "激活"); + data.Add(StringKey.DATA_EP_TIMER, "倒计时"); + data.Add(StringKey.DATA_EP_CLOSED, "已关闭"); + data.Add(StringKey.DATA_EP_PENDING, "等待中"); + data.Add(StringKey.DATA_EP_OPEN, "开放"); + data.Add(StringKey.DATA_EP_REQUIREMENT, "需要前置"); + + // 人机类型 + data.Add(StringKey.DATA_PLAYERTYPE_BOT, "普通人机"); + data.Add(StringKey.DATA_PLAYERTYPE_GUARD, "保镖"); + data.Add(StringKey.DATA_PLAYERTYPE_BEAR, "玩家 俄军"); + data.Add(StringKey.DATA_PLAYERTYPE_USEC, "玩家 美军"); + data.Add(StringKey.DATA_PLAYERTYPE_PMC, "玩家"); + data.Add(StringKey.DATA_PLAYERTYPE_BOSS, "BOSS"); + } + private void en_US() + { + data.Add(StringKey.MAIN_TITLE, "Stoopid Cheat V1"); + data.Add(StringKey.MENU_PLAYER_VISUAL_TITLE, "Player Visual"); + data.Add(StringKey.MENU_MISC_VISUAL_TITLE, "Misc Visual"); + data.Add(StringKey.MENU_AIMBOT_TITLE, "Aimbot"); + data.Add(StringKey.MENU_MISCELLANEOUS_TITLE, "Miscellaneous"); + data.Add(StringKey.MENU_SKILLS_TITLE, "Skill Editor"); + data.Add(StringKey.MENU_ITEMS_TITLE, "Items"); + data.Add(StringKey.MENU_MAIN_DESC_TOGGLE, "Insert For Menu"); + data.Add(StringKey.MENU_MAIN_HINT_UNLOCK, "Num 4 to Open Doors"); + data.Add(StringKey.MENU_MAIN_HINT_HEAL, "Num 1 to Heal"); + data.Add(StringKey.MENU_MAIN_BUTTON_PLAYER_VISUAL, GetByKey(StringKey.MENU_PLAYER_VISUAL_TITLE)); + data.Add(StringKey.MENU_MAIN_BUTTON_MISC_VISUAL, GetByKey(StringKey.MENU_MISC_VISUAL_TITLE)); + data.Add(StringKey.MENU_MAIN_BUTTON_AIMBOT, GetByKey(StringKey.MENU_AIMBOT_TITLE)); + data.Add(StringKey.MENU_MAIN_BUTTON_MISCELLANEOUS, GetByKey(StringKey.MENU_MISCELLANEOUS_TITLE)); + data.Add(StringKey.MENU_MAIN_BUTTON_SKILLS, GetByKey(StringKey.MENU_SKILLS_TITLE)); + data.Add(StringKey.MENU_MAIN_BUTTON_ITEMS, GetByKey(StringKey.MENU_ITEMS_TITLE)); + data.Add(StringKey.MENU_PLAYER_VISUAL_DRAWPLAYERS, "Draw Players"); + data.Add(StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_BOX, "Draw Player Box"); + data.Add(StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_NAME, "Draw Player Name"); + data.Add(StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_LINE, "Draw Player Line"); + data.Add(StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_HEALTH, "Draw Player Health"); + data.Add(StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_SKELETON, "Draw Player Skeleton"); + data.Add(StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_RANGE, "Player Distance"); + data.Add(StringKey.MENU_MISC_VISUAL_DRAWLOOTITEMS, "Draw Loot Items"); + data.Add(StringKey.MENU_MISC_VISUAL_LOOTITEMRANGE, "Loot Item Distance"); + data.Add(StringKey.MENU_MISC_VISUAL_DRAWCONTAINERS, "Draw Containers"); + data.Add(StringKey.MENU_MISC_VISUAL_CONTAINERRANGE, "Container Distance"); + data.Add(StringKey.MENU_MISC_VISUAL_DRAWEP, "Draw Extraction"); + data.Add(StringKey.MENU_AIMBOT_TOGGLE, "Aimbot"); + data.Add(StringKey.MENU_AIMBOT_SMOOTH, "Aimbot Smooth"); + data.Add(StringKey.MENU_AIMBOT_DRAWFOV, "Draw FOV"); + data.Add(StringKey.MENU_AIMBOT_FOVRANGE, "Aimbot FOV"); + data.Add(StringKey.MENU_AIMBOT_AIMINGRANGE, "Aim Targets In: "); + data.Add(StringKey.MENU_AIMBOT_VISIBLEONLY, "Aim Visible Targets Only"); + data.Add(StringKey.MENU_AIMBOT_SILENT, "Silent Aim"); + data.Add(StringKey.MENU_AIMBOT_NORECOIL, "No Recoil"); + data.Add(StringKey.MENU_MISCELLANEOUS_GODMODE, "God Mode"); + data.Add(StringKey.MENU_MISCELLANEOUS_STAMINA, "Infinite Stamina"); + data.Add(StringKey.MENU_MISCELLANEOUS_SPEEDHACK, "Speed Hack"); + data.Add(StringKey.MENU_MISCELLANEOUS_SPEEDHACK_ADDITION, "Speed Boost"); + data.Add(StringKey.MENU_MISCELLANEOUS_BUTTON_HEAL, $"Heal Yourself [{Settings.InstaHeal}]"); + data.Add(StringKey.MENU_MISCELLANEOUS_BUTTON_UNLOCK, $"Unlock All Doors In 20m [{Settings.UnlockDoors}]"); + data.Add(StringKey.MENU_MISCELLANEOUS_BUTTON_KILL, $"Kill Every Living Thing [{Settings.KillSwitch}]"); + data.Add(StringKey.MENU_MISCELLANEOUS_BUTTON_TPENEMIES, $"Teleport All Enemies To You [{Settings.TpEnemies}]"); + data.Add(StringKey.MENU_MISCELLANEOUS_BUTTON_TRADERSTANDING, $"Increase Standings For All Traders By 0.1 [{Settings.IncreaseTraderStandingKey}]"); + data.Add(StringKey.MENU_MISCELLANEOUS_BUTTON_ADDXP, "Add Exp To Player"); + data.Add(StringKey.MENU_MISCELLANEOUS_XPINRAID, "Current Exp In Raid: "); + data.Add(StringKey.MENU_MISCELLANEOUS_XPADDITION, "Exp Addition: "); + data.Add(StringKey.MENU_SKILLS_BUTTON_MAXALL, "Max All Skills"); + data.Add(StringKey.MENU_SKILLS_HINT_INRAID, "Use it only in raids!"); + data.Add(StringKey.MENU_SKILLS_STRENGTH, "Strength"); + data.Add(StringKey.MENU_SKILLS_STRESSRESIST, "Stress Resistance"); + data.Add(StringKey.MENU_SKILLS_MAGDRILLS, "Mag Drills"); + data.Add(StringKey.MENU_SKILLS_MELEE, "Melee"); + data.Add(StringKey.MENU_SKILLS_HIDEOUT, "Hideout Management"); + data.Add(StringKey.MENU_SKILLS_CRAFTING, "Crafting"); + data.Add(StringKey.MENU_SKILLS_HEAVYVESTS, "Heavy Vests"); + data.Add(StringKey.MENU_SKILLS_LIGHTVESTS, "Light Vests"); + data.Add(StringKey.MENU_SKILLS_LMG, "Light Machine Guns"); + data.Add(StringKey.MENU_SKILLS_ASSAULT, "Assult Rifles"); + data.Add(StringKey.MENU_SKILLS_PISTOL, "Pistols"); + data.Add(StringKey.MENU_SKILLS_PERCEPTION, "Perception"); + data.Add(StringKey.MENU_SKILLS_SNIPER, "Bolt-action Rifles"); + data.Add(StringKey.MENU_SKILLS_SNIPING, "Sniping"); + data.Add(StringKey.MENU_SKILLS_ENDURANCE, "Endurance"); + data.Add(StringKey.MENU_SKILLS_THROWING, "Throwables"); + data.Add(StringKey.MENU_SKILLS_CHARISMA, "Charisma"); + data.Add(StringKey.MENU_SKILLS_HEALTH, "Health"); + data.Add(StringKey.MENU_SKILLS_VITALITY, "Vitality"); + data.Add(StringKey.MENU_SKILLS_METABOLISM, "Metabolism"); + data.Add(StringKey.MENU_SKILLS_IMMUNITY, "Immunity"); + data.Add(StringKey.MENU_SKILLS_SURGERY, "Surgery"); + data.Add(StringKey.MENU_SKILLS_INTELLECT, "Intellect"); + data.Add(StringKey.MENU_SKILLS_ATTENTION, "Attention"); + data.Add(StringKey.MENU_SKILLS_REVOLVER, "Revolvers"); + data.Add(StringKey.MENU_SKILLS_SHOTGUN, "Shotguns"); + data.Add(StringKey.MENU_SKILLS_HMG, "Heavy Machine Guns"); + data.Add(StringKey.MENU_SKILLS_DMR, "DMRs"); + data.Add(StringKey.MENU_SKILLS_AIMDRILLS, "Aim Drills"); + data.Add(StringKey.MENU_SKILLS_SEARCH, "Search"); + data.Add(StringKey.MENU_SKILLS_WEAPONTREATMENT, "Weapon Maintenance"); + data.Add(StringKey.MENU_SKILLS_TROUBLESHOOTING, "Troubleshooting"); + data.Add(StringKey.MENU_SKILLS_COVERTMOVEMENT, "Covert Movement"); + data.Add(StringKey.MENU_SKILLS_SMG, "Submachine Guns"); + data.Add(StringKey.MENU_ITEMS_BUTTON_TPLOOTS, $"Teleport All Loots To You [{Settings.TpLoots}]"); + data.Add(StringKey.MENU_ITEMS_BUTTON_AIRDROP, $"Call Air Drop [{Settings.CallAirdrop}]"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_TITLE, "Inventory Editor"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_SEARCH, "Search ID"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_GET, "Get Items From Backpack"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_STRINGS, "Item Strings"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_CHANGES, "Changes To Be Made (In Order Of ID, Width And Height)"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_BUTTON_COMMIT, "Commit Changes"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_BUTTON_SETFIR, "Set Whole Inventory Found In Raid"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_DUPE_TITLE, "Item Dupe"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_DUPE_BUTTON_SETSTACK, "Dupe Stack x"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_DUPE_BUTTON_RESETSTACK, "Reset Stack To 1"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_DUPE_BUTTON_SETSTACK_FASTRUBLE, "Fast Stack 400k(RUB)"); + data.Add(StringKey.MENU_ITEMS_INVEDITOR_DUPE_BUTTON_SETSTACK_FASTEUROUSD, "Fast Stack 50k(EUR,USD)"); + + // Exfiltration Points + data.Add(StringKey.DATA_EP_ACTIVE, "Active"); + data.Add(StringKey.DATA_EP_TIMER, "Timer"); + data.Add(StringKey.DATA_EP_CLOSED, "Closed"); + data.Add(StringKey.DATA_EP_PENDING, "Pending"); + data.Add(StringKey.DATA_EP_OPEN, "Open"); + data.Add(StringKey.DATA_EP_REQUIREMENT, "Requirement"); + + // Bot Types + data.Add(StringKey.DATA_PLAYERTYPE_BOT, "BOT"); + data.Add(StringKey.DATA_PLAYERTYPE_GUARD, "GUARD"); + data.Add(StringKey.DATA_PLAYERTYPE_BEAR, "PMC BEAR"); + data.Add(StringKey.DATA_PLAYERTYPE_USEC, "PMC USEC"); + data.Add(StringKey.DATA_PLAYERTYPE_PMC, "PMC"); + data.Add(StringKey.DATA_PLAYERTYPE_BOSS, "BOSS"); + } + + public LocalisationData(Locale locale) { + this.locale = locale; + switch (locale) { + case Locale.CHINESE: + zh_CN(); + break; + case Locale.ENGLISH: + en_US(); + break; + default: + en_US(); + break; + } + } + + public string GetByKey(StringKey key) { + string o; + if (data.TryGetValue(key, out o)) return o; + return $"{key}"; + } + } +} diff --git a/EscapeFromTarkovCheat/Data/StringKey.cs b/EscapeFromTarkovCheat/Data/StringKey.cs new file mode 100644 index 0000000..ea58c8f --- /dev/null +++ b/EscapeFromTarkovCheat/Data/StringKey.cs @@ -0,0 +1,125 @@ +using EFT; +using EscapeFromTarkovCheat; +using EscapeFromTarkovCheat.Feauters.ESP; +using System; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Data +{ + public enum StringKey + { + MAIN_TITLE, + MENU_PLAYER_VISUAL_TITLE, + MENU_MISC_VISUAL_TITLE, + MENU_AIMBOT_TITLE, + MENU_MISCELLANEOUS_TITLE, + MENU_SKILLS_TITLE, + MENU_ITEMS_TITLE, + MENU_MAIN_DESC_TOGGLE, + MENU_MAIN_HINT_UNLOCK, + MENU_MAIN_HINT_HEAL, + MENU_MAIN_BUTTON_PLAYER_VISUAL, + MENU_MAIN_BUTTON_MISC_VISUAL, + MENU_MAIN_BUTTON_AIMBOT, + MENU_MAIN_BUTTON_MISCELLANEOUS, + MENU_MAIN_BUTTON_SKILLS, + MENU_MAIN_BUTTON_ITEMS, + MENU_PLAYER_VISUAL_DRAWPLAYERS, + MENU_PLAYER_VISUAL_DRAWPLAYER_BOX, + MENU_PLAYER_VISUAL_DRAWPLAYER_NAME, + MENU_PLAYER_VISUAL_DRAWPLAYER_LINE, + MENU_PLAYER_VISUAL_DRAWPLAYER_HEALTH, + MENU_PLAYER_VISUAL_DRAWPLAYER_SKELETON, + MENU_PLAYER_VISUAL_DRAWPLAYER_RANGE, + MENU_MISC_VISUAL_DRAWLOOTITEMS, + MENU_MISC_VISUAL_LOOTITEMRANGE, + MENU_MISC_VISUAL_DRAWCONTAINERS, + MENU_MISC_VISUAL_CONTAINERRANGE, + MENU_MISC_VISUAL_DRAWEP, + MENU_AIMBOT_TOGGLE, + MENU_AIMBOT_SMOOTH, + MENU_AIMBOT_DRAWFOV, + MENU_AIMBOT_FOVRANGE, + MENU_AIMBOT_AIMINGRANGE, + MENU_AIMBOT_VISIBLEONLY, + MENU_AIMBOT_SILENT, + MENU_AIMBOT_NORECOIL, + MENU_MISCELLANEOUS_GODMODE, + MENU_MISCELLANEOUS_STAMINA, + MENU_MISCELLANEOUS_SPEEDHACK, + MENU_MISCELLANEOUS_SPEEDHACK_ADDITION, + MENU_MISCELLANEOUS_BUTTON_HEAL, + MENU_MISCELLANEOUS_BUTTON_UNLOCK, + MENU_MISCELLANEOUS_BUTTON_KILL, + MENU_MISCELLANEOUS_BUTTON_TRADERSTANDING, + MENU_MISCELLANEOUS_BUTTON_TPENEMIES, + MENU_MISCELLANEOUS_BUTTON_ADDXP, + MENU_MISCELLANEOUS_XPINRAID, + MENU_MISCELLANEOUS_XPADDITION, + MENU_ITEMS_BUTTON_TPLOOTS, + MENU_ITEMS_BUTTON_AIRDROP, + MENU_ITEMS_INVEDITOR_TITLE, + MENU_ITEMS_INVEDITOR_SEARCH, + MENU_ITEMS_INVEDITOR_GET, + MENU_ITEMS_INVEDITOR_STRINGS, + MENU_ITEMS_INVEDITOR_CHANGES, + MENU_ITEMS_INVEDITOR_BUTTON_COMMIT, + MENU_ITEMS_INVEDITOR_BUTTON_SETFIR, + MENU_ITEMS_INVEDITOR_DUPE_TITLE, + MENU_ITEMS_INVEDITOR_DUPE_BUTTON_SETSTACK, + MENU_ITEMS_INVEDITOR_DUPE_BUTTON_RESETSTACK, + MENU_ITEMS_INVEDITOR_DUPE_BUTTON_SETSTACK_FASTRUBLE, + MENU_ITEMS_INVEDITOR_DUPE_BUTTON_SETSTACK_FASTEUROUSD, + + // Skills Menu + MENU_SKILLS_BUTTON_MAXALL, + MENU_SKILLS_HINT_INRAID, + MENU_SKILLS_STRENGTH, + MENU_SKILLS_STRESSRESIST, + MENU_SKILLS_MAGDRILLS, + MENU_SKILLS_MELEE, + MENU_SKILLS_HIDEOUT, + MENU_SKILLS_CRAFTING, + MENU_SKILLS_HEAVYVESTS, + MENU_SKILLS_LIGHTVESTS, + MENU_SKILLS_LMG, + MENU_SKILLS_ASSAULT, + MENU_SKILLS_PISTOL, + MENU_SKILLS_PERCEPTION, + MENU_SKILLS_SNIPER, + MENU_SKILLS_SNIPING, + MENU_SKILLS_ENDURANCE, + MENU_SKILLS_THROWING, + MENU_SKILLS_CHARISMA, + MENU_SKILLS_HEALTH, + MENU_SKILLS_VITALITY, + MENU_SKILLS_METABOLISM, + MENU_SKILLS_IMMUNITY, + MENU_SKILLS_SURGERY, + MENU_SKILLS_INTELLECT, + MENU_SKILLS_ATTENTION, + MENU_SKILLS_REVOLVER, + MENU_SKILLS_SHOTGUN, + MENU_SKILLS_HMG, + MENU_SKILLS_DMR, + MENU_SKILLS_AIMDRILLS, + MENU_SKILLS_SEARCH, + MENU_SKILLS_WEAPONTREATMENT, + MENU_SKILLS_TROUBLESHOOTING, + MENU_SKILLS_COVERTMOVEMENT, + MENU_SKILLS_SMG, + + DATA_EP_ACTIVE, + DATA_EP_TIMER, + DATA_EP_CLOSED, + DATA_EP_PENDING, + DATA_EP_OPEN, + DATA_EP_REQUIREMENT, + DATA_PLAYERTYPE_BOT, + DATA_PLAYERTYPE_GUARD, + DATA_PLAYERTYPE_BEAR, + DATA_PLAYERTYPE_USEC, + DATA_PLAYERTYPE_PMC, + DATA_PLAYERTYPE_BOSS + } +} \ No newline at end of file diff --git a/EscapeFromTarkovCheat/EscapeFromTarkovCheat.csproj b/EscapeFromTarkovCheat/EscapeFromTarkovCheat.csproj new file mode 100644 index 0000000..c9075a7 --- /dev/null +++ b/EscapeFromTarkovCheat/EscapeFromTarkovCheat.csproj @@ -0,0 +1,138 @@ + + + + + Debug + AnyCPU + {C1C426A1-EFC3-4C83-972C-ECA557571328} + Library + Properties + EscapeFromTarkovCheat + EscapeFromTarkovCheat + v4.8 + 512 + true + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + 8.0 + prompt + MinimumRecommendedRules.ruleset + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + 8.0 + prompt + MinimumRecommendedRules.ruleset + + + + ..\Managed\Assembly-CSharp.dll + + + ..\Managed\Assembly-CSharp-firstpass.dll + + + ..\Managed\Cinemachine.dll + + + False + ..\Managed\Comfort.dll + + + ..\Managed\Comfort.Unity.dll + + + + + + + + + + + ..\Managed\UnityEngine.dll + + + ..\Managed\UnityEngine.CoreModule.dll + + + ..\Managed\UnityEngine.DirectorModule.dll + + + ..\Managed\UnityEngine.IMGUIModule.dll + + + ..\Managed\UnityEngine.InputLegacyModule.dll + + + ..\Managed\UnityEngine.InputModule.dll + + + False + ..\Managed\UnityEngine.PhysicsModule.dll + + + ..\Managed\UnityEngine.UI.dll + + + ..\Managed\UnityEngine.UIModule.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EscapeFromTarkovCheat/Features/Aimbot.cs b/EscapeFromTarkovCheat/Features/Aimbot.cs new file mode 100644 index 0000000..f979a56 --- /dev/null +++ b/EscapeFromTarkovCheat/Features/Aimbot.cs @@ -0,0 +1,121 @@ +using System; +using EFT; +using EFT.InventoryLogic; +using EscapeFromTarkovCheat.Data; +using EscapeFromTarkovCheat.Utils; +using UnityEngine; +using static Systems.Effects.Effects; + +namespace EscapeFromTarkovCheat.Feauters +{ + class Aimbot : MonoBehaviour + { + public void Update() + { + if (Settings.NoRecoil) + NoRecoil(); + if (Main.GameWorld != null && Settings.Aimbot && Input.GetKey(Settings.AimbotKey)) + this.Aim(); + } + + private void Aim() + { + Vector3 target = Vector3.zero; + float distanceOfTarget = 9999f; + foreach (GamePlayer gamePlayer in Main.GamePlayers) + { + if (gamePlayer == null) + // 未开局 : Not loaded + continue; + if (Main.LocalPlayer.HandsController == null) + // 卡手 : Invalid hand + continue; + Weapon weapon = Main.LocalPlayer.HandsController.Item as Weapon; + if (weapon == null) + // 无武器 : No weapon + continue; + AmmoTemplate currentAmmoTemplate = weapon.CurrentAmmoTemplate; + if (currentAmmoTemplate == null) + // 无弹药 : Out of ammo + continue; + Vector3 destination = GameUtils.GetBonePosByEID(gamePlayer.Player, BoneType.HumanHead); + float distance = Vector3.Distance(Main.MainCamera.transform.position, gamePlayer.Player.Transform.position); + if (distance > Settings.AimbotRange) + // 大于瞄准范围 : Too far + continue; + if (destination == Vector3.zero) + // 无法找到头部 : Head not found + continue; + if (Aimbot.CalculateInFov(destination) > Settings.AimbotFOV) + // 不在瞄准圈内 : Not in fov + continue; + if (Settings.VisibleOnly && !GameUtils.IsPlayerVisible(gamePlayer.Player)) + // 开启仅瞄准可见时不可见 : Not visible while Visible Only is toggled on + continue; + + if (distanceOfTarget > distance) // 寻找最近 : Aim at the nearest + { + distanceOfTarget = distance; + float timeToHit = distance / currentAmmoTemplate.InitialSpeed; // 子弹飞行时间 : Time to hit the target + destination.x += gamePlayer.Player.Velocity.x * timeToHit; // 速度时间预判,下同 : Add some drifts to the target for hitting moving targets + destination.y += gamePlayer.Player.Velocity.y * timeToHit; + target = destination; // 建立瞄准点 : Construct the final aiming point + } + } + if (target != Vector3.zero) + { + Aimbot.AimAtPos(target); + } + } + private void NoRecoil() + { + if (Main.LocalPlayer == null) + return; + if (Main.LocalPlayer.ProceduralWeaponAnimation == null) + return; + var effect = Main.LocalPlayer.ProceduralWeaponAnimation.Shootingg?.CurrentRecoilEffect; + if (effect == null) + return; + effect.CameraRotationRecoilEffect.Intensity = 0f; + effect.HandPositionRecoilEffect.Intensity = 0f; + effect.HandRotationRecoilEffect.Intensity = 0f; + } + + public void OnGUI() + { + if (Settings.AimbotDrawFOV) + { + Render.DrawCircle(new Vector2((float)Screen.width / 2f, (float)Screen.height / 2f), Screen.width * Settings.AimbotFOV / 75, 64, Color.red, true, 1); + } + } + + public static float CalculateInFov(Vector3 position1) + { + Vector3 position2 = Main.MainCamera.transform.position; + Vector3 forward = Main.MainCamera.transform.forward; + Vector3 normalized = (position1 - position2).normalized; + return Mathf.Acos(Mathf.Clamp(Vector3.Dot(forward, normalized), -1f, 1f)) * 57.29578f; + } + + public static void AimAtPos(Vector3 position) + { + if (Settings.SilentAim) + { + Main.LocalPlayer.ProceduralWeaponAnimation.ShotNeedsFovAdjustments = false; + Vector3 normalizedPosition = (position - Main.LocalPlayer.Fireport.position).normalized; + Vector3 shotDirection = Main.LocalPlayer.Fireport.InverseTransformVector(normalizedPosition); + Main.LocalPlayer.ProceduralWeaponAnimation._shotDirection = shotDirection; + } + else + { + Vector3 b = Main.LocalPlayer.Fireport.position - Main.LocalPlayer.Fireport.up * 1f; + Vector3 eulerAngles = Quaternion.LookRotation((position - b).normalized).eulerAngles; + if (eulerAngles.x > 180f) + { + eulerAngles.x -= 360f; + } + Main.LocalPlayer.MovementContext.Rotation = new Vector2(eulerAngles.y, eulerAngles.x); + } + } + } +} diff --git a/EscapeFromTarkovCheat/Features/ESP/ExfiltrationPointsESP.cs b/EscapeFromTarkovCheat/Features/ESP/ExfiltrationPointsESP.cs new file mode 100644 index 0000000..71426df --- /dev/null +++ b/EscapeFromTarkovCheat/Features/ESP/ExfiltrationPointsESP.cs @@ -0,0 +1,100 @@ +using System.Collections.Generic; +using Comfort.Common; +using EFT; +using EFT.Interactive; +using EscapeFromTarkovCheat.Data; +using EscapeFromTarkovCheat.Utils; +using JsonType; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Feauters.ESP +{ + public class ExfiltrationPointsESP : MonoBehaviour + { + private List _gameExfiltrationPoints= new List(); + private static readonly float CacheExfiltrationPointInterval = 5f; + private float _nextLootItemCacheTime; + + private static readonly Color ExfiltrationPointColour = Color.green; + private static readonly Color ClosedExfiltrationPointColour = Color.yellow; + + public void Update() + { + if (!Settings.DrawExfiltrationPoints) + return; + + if (Time.time >= _nextLootItemCacheTime) + { + if ((Main.GameWorld != null) && (Main.GameWorld.ExfiltrationController.ExfiltrationPoints != null)) + { + _gameExfiltrationPoints.Clear(); + foreach (var exfiltrationPoint in Main.GameWorld.ExfiltrationController.EligiblePoints(Main.LocalPlayer.Profile)) + { + if (!GameUtils.IsExfiltrationPointValid(exfiltrationPoint)) + continue; + + _gameExfiltrationPoints.Add(new GameExfiltrationPoint(exfiltrationPoint, true)); + } + + foreach (var exfiltrationPoint in Main.GameWorld.ExfiltrationController.ExfiltrationPoints) + { + bool trig = false; + if (!GameUtils.IsExfiltrationPointValid(exfiltrationPoint)) + continue; + foreach (var ep in _gameExfiltrationPoints) + { + if (ep.Name == exfiltrationPoint.Settings.Name.Localized()) + trig = !trig; + continue; + } + if (trig) + continue; + _gameExfiltrationPoints.Add(new GameExfiltrationPoint(exfiltrationPoint, false)); + } + + _nextLootItemCacheTime = (Time.time + CacheExfiltrationPointInterval); + } + } + + foreach (GameExfiltrationPoint gameExfiltrationPoint in _gameExfiltrationPoints) + gameExfiltrationPoint.RecalculateDynamics(); + + } + private static string GetName(ExfiltrationPoint point, bool isEligible) + { + var localizedName = point.Settings.Name.Localized(); + return !isEligible ? localizedName : $"{localizedName} ({GetStatus(point.Status)})"; + } + + public static string GetStatus(EExfiltrationStatus status) + { + return status switch + { + EExfiltrationStatus.AwaitsManualActivation => LocalisationManager.GetString(Settings.Language, StringKey.DATA_EP_ACTIVE), + EExfiltrationStatus.Countdown => LocalisationManager.GetString(Settings.Language, StringKey.DATA_EP_TIMER), + EExfiltrationStatus.NotPresent => LocalisationManager.GetString(Settings.Language, StringKey.DATA_EP_CLOSED), + EExfiltrationStatus.Pending => LocalisationManager.GetString(Settings.Language, StringKey.DATA_EP_PENDING), + EExfiltrationStatus.RegularMode => LocalisationManager.GetString(Settings.Language, StringKey.DATA_EP_OPEN), + EExfiltrationStatus.UncompleteRequirements => LocalisationManager.GetString(Settings.Language, StringKey.DATA_EP_REQUIREMENT), + _ => string.Empty + }; + } + + private void OnGUI() + { + if (Settings.DrawExfiltrationPoints) + { + foreach (var exfiltrationPoint in _gameExfiltrationPoints) + { + if (!GameUtils.IsExfiltrationPointValid(exfiltrationPoint.ExfiltrationPoint) || !exfiltrationPoint.IsOnScreen) + continue; + + string exfiltrationPointText = $"{GetName(exfiltrationPoint.ExfiltrationPoint, exfiltrationPoint.Eligible)} [{exfiltrationPoint.FormattedDistance}]"; + + Render.DrawString(new Vector2(exfiltrationPoint.ScreenPosition.x - 50f, exfiltrationPoint.ScreenPosition.y), exfiltrationPointText, exfiltrationPoint.Eligible ? ExfiltrationPointColour : ClosedExfiltrationPointColour); + } + } + } + + } +} diff --git a/EscapeFromTarkovCheat/Features/ESP/ItemESP.cs b/EscapeFromTarkovCheat/Features/ESP/ItemESP.cs new file mode 100644 index 0000000..d8f0026 --- /dev/null +++ b/EscapeFromTarkovCheat/Features/ESP/ItemESP.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using Comfort.Common; +using EFT; +using EFT.Interactive; +using EscapeFromTarkovCheat.Data; +using EscapeFromTarkovCheat.Utils; +using JsonType; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Feauters.ESP +{ + public class ItemESP : MonoBehaviour + { + private static readonly float CacheLootItemsInterval = 4f; + private float _nextLootItemCacheTime; + + //private static readonly Color SpecialColor = new Color(1f, 0.2f, 0.09f); + private static readonly Color QuestColor = Color.yellow; + private static readonly Color CommonColor = Color.white; + private static readonly Color RareColor = new Color(0.38f, 0.43f, 1f); + private static readonly Color SuperRareColor = new Color(1f, 0.29f, 0.36f); + + private List _gameLootItems = new List(); + private Stopwatch _stopwatch = new Stopwatch(); + public void Update() + { + if (!Settings.DrawLootItems) + return; + + if (Time.time >= _nextLootItemCacheTime) + { + if ((Main.GameWorld != null) && (Main.GameWorld.LootItems != null)) + { + _gameLootItems.Clear(); + + for (int i = 0; i < Main.GameWorld.LootItems.Count; i++) + { + LootItem lootItem = Main.GameWorld.LootItems.GetByIndex(i); + + if (!GameUtils.IsLootItemValid(lootItem) || (Vector3.Distance(Main.MainCamera.transform.position, lootItem.transform.position) > Settings.DrawLootItemsDistance)) + continue; + + _gameLootItems.Add(new GameLootItem(lootItem)); + } + + _nextLootItemCacheTime = (Time.time + CacheLootItemsInterval); + } + } + + foreach (GameLootItem gameLootItem in _gameLootItems) + gameLootItem.RecalculateDynamics(); + + } + + private void OnGUI() + { + if (Settings.DrawLootItems) + { + foreach (var gameLootItem in _gameLootItems) + { + if (!GameUtils.IsLootItemValid(gameLootItem.LootItem) || !gameLootItem.IsOnScreen || gameLootItem.Distance > Settings.DrawLootItemsDistance) + continue; + + string lootItemName = $"{gameLootItem.LootItem.Item.ShortName.Localized()} [{gameLootItem.FormattedDistance}]"; + + if (gameLootItem.LootItem.Item.Template.Rarity == ELootRarity.Common) + Render.DrawString(new Vector2(gameLootItem.ScreenPosition.x - 50f, gameLootItem.ScreenPosition.y), lootItemName, CommonColor); + if (gameLootItem.LootItem.Item.Template.Rarity == ELootRarity.Rare) + Render.DrawString(new Vector2(gameLootItem.ScreenPosition.x - 50f, gameLootItem.ScreenPosition.y), lootItemName, RareColor); + if (gameLootItem.LootItem.Item.Template.Rarity == ELootRarity.Superrare) + Render.DrawString(new Vector2(gameLootItem.ScreenPosition.x - 50f, gameLootItem.ScreenPosition.y), lootItemName, SuperRareColor); + if (gameLootItem.LootItem.Item.Template.QuestItem) + Render.DrawString(new Vector2(gameLootItem.ScreenPosition.x - 50f, gameLootItem.ScreenPosition.y), lootItemName, QuestColor); + } + } + } + } +} diff --git a/EscapeFromTarkovCheat/Features/ESP/LootableContainerESP.cs b/EscapeFromTarkovCheat/Features/ESP/LootableContainerESP.cs new file mode 100644 index 0000000..c606a5a --- /dev/null +++ b/EscapeFromTarkovCheat/Features/ESP/LootableContainerESP.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using Comfort.Common; +using EFT; +using EFT.Interactive; +using EscapeFromTarkovCheat.Data; +using EscapeFromTarkovCheat.Utils; +using JsonType; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Feauters.ESP +{ + public class LootableContainerESP : MonoBehaviour + { + private static readonly float CacheLootItemsInterval = 100; + private float _nextLootContainerCacheTime; + private List _gameLootContainers; + private static readonly Color LootableContainerColor = new Color(1f, 0.2f, 0.09f); + + public void Start() + { + _gameLootContainers = new List(); + } + + public void Update() + { + if (!Settings.DrawLootableContainers) + return; + + if (Time.time >= _nextLootContainerCacheTime) + { + if ((Main.GameWorld != null) && (Main.GameWorld.LootItems != null)) + { + _gameLootContainers.Clear(); + + foreach (LootableContainer lootableContainer in FindObjectsOfType()) + { + if (!GameUtils.IsLootableContainerValid(lootableContainer) || (Vector3.Distance(Main.MainCamera.transform.position, lootableContainer.transform.position) > Settings.DrawLootableContainersDistance)) + continue; + + _gameLootContainers.Add(new GameLootContainer(lootableContainer)); + } + _nextLootContainerCacheTime = (Time.time + CacheLootItemsInterval); + } + } + + foreach (GameLootContainer gameLootContainer in _gameLootContainers) + gameLootContainer.RecalculateDynamics(); + } + + public void OnGUI() + { + if (!Settings.DrawLootableContainers) + return; + + foreach (var gameLootContainer in _gameLootContainers) + { + if (!GameUtils.IsLootableContainerValid(gameLootContainer.LootableContainer) || !gameLootContainer.IsOnScreen || gameLootContainer.Distance > Settings.DrawLootableContainersDistance) + continue; + + //EFT.InventoryLogic.Item rootItem = gameLootContainer.LootableContainer.ItemOwner.RootItem; + //rootItem.Template.Name.Localized(); + + string lootItemName = $"{gameLootContainer.LootableContainer.name} [{gameLootContainer.FormattedDistance}]"; + Render.DrawString(new Vector2(gameLootContainer.ScreenPosition.x - 50f, gameLootContainer.ScreenPosition.y), lootItemName, LootableContainerColor); + } + } + } +} \ No newline at end of file diff --git a/EscapeFromTarkovCheat/Features/ESP/PlayerESP.cs b/EscapeFromTarkovCheat/Features/ESP/PlayerESP.cs new file mode 100644 index 0000000..508617a --- /dev/null +++ b/EscapeFromTarkovCheat/Features/ESP/PlayerESP.cs @@ -0,0 +1,191 @@ +using EFT; +using EscapeFromTarkovCheat.Data; +using EscapeFromTarkovCheat.Utils; +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Feauters.ESP +{ + public class PlayerESP : MonoBehaviour + { + private static readonly Color _playerColor = Color.cyan; + private static readonly Color _botColor = Color.yellow; + private static readonly Color _healthColor = Color.green; + private static readonly Color _bossColor = Color.red; + private static readonly Color _cultistLeader = Color.red; + private static readonly Color _cultistGuard = Color.red; + private static readonly Color _guardColor = Color.red; + private static readonly Color _skeletonColor = Color.cyan; + + private static readonly HashSet BossNames = new HashSet + { + "Killa", + "Reshala", + "Sanitar", + "Glukhar", + "Shturman", + "Tagilla", + "Knight", + "BirdEye", + "Zryachiy", + "Big Pipe", + "Kaban" + }; + + // Token: 0x0200001D RID: 29 + public enum PlayerType + { + SCAV, + PLAYERSCAV, + PLAYER, + TEAMMATE, + FOLLOWER, + BOSS + } + public static bool IsBossByName(string playerName) + { + return PlayerESP.BossNames.Contains(playerName); + } + public static string PlayerName(Player player, ref PlayerESP.PlayerType playerType) + { + if (player.Profile.Info.RegistrationDate > 0) + { + if (player.Profile.Info.Side == EPlayerSide.Savage) + { + playerType = PlayerESP.PlayerType.PLAYERSCAV; + return "player"; + } + playerType = PlayerESP.PlayerType.PLAYER; + return player.Profile.Info.Side.ToString() + " [" + player.Profile.Info.Level.ToString() + "]"; + } + + if (player.Profile.Info.Settings.Role.ToString().IndexOf("boss") != -1) + { + playerType = PlayerESP.PlayerType.BOSS; + return "BOSS"; + } + + if (player.Profile.Info.Settings.Role.ToString().IndexOf("follower") != -1) + { + playerType = PlayerESP.PlayerType.FOLLOWER; + return "Follower"; + } + + if (player.Profile.Info.Settings.Role.ToString().ToLower().IndexOf("pmcbot") != -1) + { + playerType = PlayerESP.PlayerType.SCAV; + return "Raider"; + } + + playerType = PlayerESP.PlayerType.SCAV; + return ""; + } + + private void DrawPlayerName(GamePlayer gamePlayer, ref Color color) + { + string text = ""; + WildSpawnType role = gamePlayer.Player.Profile.Info.Settings.Role; + + if (gamePlayer.IsAI) + { + text = $"{LocalisationManager.GetString(Settings.Language, StringKey.DATA_PLAYERTYPE_BOT)} [{gamePlayer.FormattedDistance}]"; + color = PlayerESP._botColor; + } + else + { + text = $"{gamePlayer.Player.Profile.Info.Nickname} [{gamePlayer.FormattedDistance}]"; + color = PlayerESP._playerColor; + } + + if (gamePlayer.Player.Profile.Info.Settings.IsFollower()) + { + text = $"{LocalisationManager.GetString(Settings.Language, StringKey.DATA_PLAYERTYPE_GUARD)}-{gamePlayer.Player.Profile.Info.Nickname} [{gamePlayer.FormattedDistance}]"; + color = PlayerESP._guardColor; + } + + if (gamePlayer.Player.Profile.Info.Settings.IsBoss()) + { + switch (role) + { + case WildSpawnType.sectantPriest: + text = $"{gamePlayer.Player.Profile.Info.Nickname} [{gamePlayer.FormattedDistance}]"; + color = PlayerESP._cultistLeader; + break; + case WildSpawnType.sectantWarrior: + text = $"{gamePlayer.Player.Profile.Info.Nickname} [{gamePlayer.FormattedDistance}]"; + color = PlayerESP._cultistGuard; + break; + case WildSpawnType.pmcBEAR: + text = $"{LocalisationManager.GetString(Settings.Language, StringKey.DATA_PLAYERTYPE_BEAR)} [{gamePlayer.FormattedDistance}]"; + color = PlayerESP._playerColor; + break; + case WildSpawnType.pmcUSEC: + text = $"{LocalisationManager.GetString(Settings.Language, StringKey.DATA_PLAYERTYPE_USEC)} [{gamePlayer.FormattedDistance}]"; + color = PlayerESP._playerColor; + break; + case WildSpawnType.pmcBot: + text = $"{LocalisationManager.GetString(Settings.Language, StringKey.DATA_PLAYERTYPE_PMC)} [{gamePlayer.FormattedDistance}]"; + color = PlayerESP._playerColor; + break; + default: + text = $"{LocalisationManager.GetString(Settings.Language, StringKey.DATA_PLAYERTYPE_BOSS)}-{gamePlayer.Player.Profile.Info.Nickname} [{gamePlayer.FormattedDistance}]"; + color = PlayerESP._bossColor; + break; + } + } + + Vector2 vector = GUI.skin.GetStyle(text).CalcSize(new GUIContent(text)); + Render.DrawString(new Vector2(gamePlayer.ScreenPosition.x - vector.x / 2f, gamePlayer.HeadScreenPosition.y - 20f), text, color, true); + } + private void DrawPlayerHealth(GamePlayer gamePlayer, float boxPositionY, float boxHeight, float boxWidth) + { + if (!gamePlayer.Player.HealthController.IsAlive) + return; + + float current = gamePlayer.Player.HealthController.GetBodyPartHealth(EBodyPart.Common, false).Current; + float maximum = gamePlayer.Player.HealthController.GetBodyPartHealth(EBodyPart.Common, false).Maximum; + float healthBarHeight = GameUtils.Map(current, 0f, maximum, 0f, boxHeight); + Render.DrawLine(new Vector2(gamePlayer.ScreenPosition.x - boxWidth / 2f - 3f, boxPositionY + boxHeight - healthBarHeight), + new Vector2(gamePlayer.ScreenPosition.x - boxWidth / 2f - 3f, boxPositionY + boxHeight), 3f, PlayerESP._healthColor); + } + public void OnGUI() + { + if (!Settings.DrawPlayers) + return; + if (Main.notReady()) + return; + foreach (GamePlayer gamePlayer in Main.GamePlayers) + { + if (!gamePlayer.IsOnScreen) + continue; + if (gamePlayer.Distance > Settings.DrawPlayersDistance) + continue; + if (gamePlayer.Player == Main.LocalPlayer) + continue; + + Color color = gamePlayer.IsAI ? PlayerESP._botColor : PlayerESP._playerColor; + float boxPositionY = (gamePlayer.HeadScreenPosition.y - 10f); + float boxHeight = (Math.Abs(gamePlayer.HeadScreenPosition.y - gamePlayer.ScreenPosition.y) + 10f); + float boxWidth = (boxHeight * 0.65f); + + if (Settings.DrawPlayerBox) + Render.DrawBox(gamePlayer.ScreenPosition.x - boxWidth / 2f, boxPositionY, boxWidth, boxHeight, color); + + if (Settings.DrawPlayerSkeletons) + PlayerSkeletons.DrawSkeleton(new GamePlayer(gamePlayer.Player), _skeletonColor); + + if (Settings.DrawPlayerHealth) + DrawPlayerHealth(gamePlayer, boxPositionY, boxHeight, boxWidth); + + if (Settings.DrawPlayerName) + DrawPlayerName(gamePlayer, ref color); + + if (Settings.DrawPlayerLine) + Render.DrawLine(new Vector2((float)(Screen.width / 2), (float)Screen.height), + new Vector2(gamePlayer.ScreenPosition.x, gamePlayer.ScreenPosition.y), + 1.5f, Color.red); + } + } + } +} \ No newline at end of file diff --git a/EscapeFromTarkovCheat/Features/ESP/PlayerSkeletons.cs b/EscapeFromTarkovCheat/Features/ESP/PlayerSkeletons.cs new file mode 100644 index 0000000..8f9f2ad --- /dev/null +++ b/EscapeFromTarkovCheat/Features/ESP/PlayerSkeletons.cs @@ -0,0 +1,82 @@ +using UnityEngine; +using EscapeFromTarkovCheat.Data; +using EscapeFromTarkovCheat.Utils; + +namespace EscapeFromTarkovCheat.Feauters.ESP +{ + public static class PlayerSkeletons + { + public static void DrawSkeleton(GamePlayer gamePlayer, Color skeletonColor) + { + if (GameUtils.IsPlayerValid(gamePlayer.Player)) + { + // 可视检查 : Visible + // Color skeletonColor = GameUtils.IsPlayerVisible(gamePlayer.Player) ? Color.green : Color.red; + + // 头胸腹 : head, neck, chest, stomach + Vector3 headPos = gamePlayer.GetBonePosition(BoneType.HumanHead); + Vector3 neckPos = gamePlayer.GetBonePosition(BoneType.HumanNeck); + Vector3 spinePos = gamePlayer.GetBonePosition(BoneType.HumanSpine3); + Vector3 pelvisPos = gamePlayer.GetBonePosition(BoneType.HumanPelvis); + + // 左右手臂 : left arm, right arm + Vector3 leftShoulderPos = gamePlayer.GetBonePosition(BoneType.HumanLCollarbone); + Vector3 leftUpperArmPos = gamePlayer.GetBonePosition(BoneType.HumanLUpperarm); + Vector3 leftElbowPos = gamePlayer.GetBonePosition(BoneType.HumanLForearm1); + Vector3 leftForearmPos = gamePlayer.GetBonePosition(BoneType.HumanLForearm2); + Vector3 leftHandPos = gamePlayer.GetBonePosition(BoneType.HumanLPalm); + + Vector3 rightShoulderPos = gamePlayer.GetBonePosition(BoneType.HumanRCollarbone); + Vector3 rightUpperArmPos = gamePlayer.GetBonePosition(BoneType.HumanRUpperarm); + Vector3 rightElbowPos = gamePlayer.GetBonePosition(BoneType.HumanRForearm1); + Vector3 rightForearmPos = gamePlayer.GetBonePosition(BoneType.HumanRForearm2); + Vector3 rightHandPos = gamePlayer.GetBonePosition(BoneType.HumanRPalm); + + // 左右腿足 : left leg, right leg + Vector3 leftHipPos = gamePlayer.GetBonePosition(BoneType.HumanLThigh1); + Vector3 leftThigh2Pos = gamePlayer.GetBonePosition(BoneType.HumanLThigh2); + Vector3 leftKneePos = gamePlayer.GetBonePosition(BoneType.HumanLCalf); + Vector3 leftCalfPos = gamePlayer.GetBonePosition(BoneType.HumanLCalf); + Vector3 leftFootPos = gamePlayer.GetBonePosition(BoneType.HumanLFoot); + + Vector3 rightHipPos = gamePlayer.GetBonePosition(BoneType.HumanRThigh1); + Vector3 rightThigh2Pos = gamePlayer.GetBonePosition(BoneType.HumanRThigh2); + Vector3 rightKneePos = gamePlayer.GetBonePosition(BoneType.HumanRCalf); + Vector3 rightCalfPos = gamePlayer.GetBonePosition(BoneType.HumanRCalf); + Vector3 rightFootPos = gamePlayer.GetBonePosition(BoneType.HumanRFoot); + + // 绘制 : rendering + // 头脖胸 : head, neck, chest + Render.DrawBoneLine(headPos, neckPos, 1.5f, skeletonColor); + Render.DrawBoneLine(neckPos, spinePos, 1.5f, skeletonColor); + Render.DrawBoneLine(spinePos, pelvisPos, 1.5f, skeletonColor); + + // 左右手臂 : left arm, right arm + Render.DrawBoneLine(neckPos, leftShoulderPos, 1.5f, skeletonColor); + Render.DrawBoneLine(leftShoulderPos, leftUpperArmPos, 1.5f, skeletonColor); + Render.DrawBoneLine(leftUpperArmPos, leftElbowPos, 1.5f, skeletonColor); + Render.DrawBoneLine(leftElbowPos, leftForearmPos, 1.5f, skeletonColor); + Render.DrawBoneLine(leftForearmPos, leftHandPos, 1.5f, skeletonColor); + + Render.DrawBoneLine(neckPos, rightShoulderPos, 1.5f, skeletonColor); + Render.DrawBoneLine(rightShoulderPos, rightUpperArmPos, 1.5f, skeletonColor); + Render.DrawBoneLine(rightUpperArmPos, rightElbowPos, 1.5f, skeletonColor); + Render.DrawBoneLine(rightElbowPos, rightForearmPos, 1.5f, skeletonColor); + Render.DrawBoneLine(rightForearmPos, rightHandPos, 1.5f, skeletonColor); + + // 左右腿足 : left leg, right leg + Render.DrawBoneLine(pelvisPos, leftHipPos, 1.5f, skeletonColor); + Render.DrawBoneLine(leftHipPos, leftThigh2Pos, 1.5f, skeletonColor); + Render.DrawBoneLine(leftThigh2Pos, leftKneePos, 1.5f, skeletonColor); + Render.DrawBoneLine(leftKneePos, leftCalfPos, 1.5f, skeletonColor); + Render.DrawBoneLine(leftCalfPos, leftFootPos, 1.5f, skeletonColor); + + Render.DrawBoneLine(pelvisPos, rightHipPos, 1.5f, skeletonColor); + Render.DrawBoneLine(rightHipPos, rightThigh2Pos, 1.5f, skeletonColor); + Render.DrawBoneLine(rightThigh2Pos, rightKneePos, 1.5f, skeletonColor); + Render.DrawBoneLine(rightKneePos, rightCalfPos, 1.5f, skeletonColor); + Render.DrawBoneLine(rightCalfPos, rightFootPos, 1.5f, skeletonColor); + } + } + } +} diff --git a/EscapeFromTarkovCheat/Features/ExperienceManager.cs b/EscapeFromTarkovCheat/Features/ExperienceManager.cs new file mode 100644 index 0000000..d9ce292 --- /dev/null +++ b/EscapeFromTarkovCheat/Features/ExperienceManager.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using EFT; +using EFT.Counters; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Features +{ + public static class ExperienceManager + { + public static long current = 0; + public static void SetExperience(Player player, float experience) + { + if (player != null && player.Profile != null) + { + current = Get(player); + player.Profile.EftStats.SessionCounters.SetLong((long)experience, CounterTag.Exp); + current = (long)experience; + Debug.Log(string.Format("Experience set to {0}", experience)); + } + } + public static void AddExperience(Player player, float experience) + { + if (player != null && player.Profile != null) + { + current = Get(player); + SetExperience(player, current + experience); + } + } + public static int Get(Player player) + { + if (player != null && player.Profile != null) + { + return player.Profile.EftStats.SessionCounters.GetInt(CounterTag.Exp); + } + + return 0; + } + } +} \ No newline at end of file diff --git a/EscapeFromTarkovCheat/Features/ItemFeatures.cs b/EscapeFromTarkovCheat/Features/ItemFeatures.cs new file mode 100644 index 0000000..b9c8d09 --- /dev/null +++ b/EscapeFromTarkovCheat/Features/ItemFeatures.cs @@ -0,0 +1,226 @@ +using EFT; +using EFT.InventoryLogic; +using EscapeFromTarkovCheat.Utils; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace EscapeFromTarkovCheat +{ + // Token: 0x02000006 RID: 6 + public static class ItemFeatures + { + public static List collectedItems = new List(); + public static string _searchQuery = ""; + public static string _itemStringText = ""; + public static string _id = ""; + private static int id = 0; + public static string _width = ""; + private static int width = 0; + public static string _height = ""; + private static int height = 0; + private static float _logTime = Time.time; + + public static string ItemStringText + { + get + { + return _itemStringText; + } + } + + public static string Id + { + get + { + return _id; + } + } + + public static string Width + { + get + { + return _width; + } + } + + public static string Height + { + get + { + return _height; + } + } + + public static string GetSearchQuery() => _searchQuery; + + public static void GetItemsInInventory() + { + GameUtils.AddConsoleLog("GetItemsInInventory called"); + collectedItems.Clear(); + List itemStrings = new List(); + EquipmentSlot[] slots = { EquipmentSlot.Backpack }; + if (Main.notReady()) + { + GameUtils.AddConsoleLog("You are not in raid."); + return; + } + + if (Main.LocalPlayer.Profile == null) + { + GameUtils.AddConsoleLog("The current raid is in the state of loading."); + return; + } + + if (Main.LocalPlayer.Profile.Inventory == null) + { + GameUtils.AddConsoleLog("Your Inventory class currently has no instance."); + return; + } + + IEnumerable items = Main.LocalPlayer.Profile.Inventory.GetItemsInSlots(slots); + + if (items == null || items.Count() == 0) + { + GameUtils.AddConsoleLog("Your inventory is either empty or not loaded."); + return; + } + + GameUtils.AddConsoleLog($"Found {items.Count()} items in backpack"); + foreach (Item item in items) + { + if (!GameUtils.IsInventoryItemValid(item)) + continue; + if (!item.Name.Localized().ToLower().Contains(_searchQuery.ToLower())) + continue; + + itemStrings.Add(item.Name.Localized()); + collectedItems.Add(item); + GameUtils.AddConsoleLog($"Added item: {item.Name.Localized()}"); + } + _itemStringText = string.Join("\n", itemStrings); + } + + public static void Commit() + { + GameUtils.AddConsoleLog("SetItemsInInventory called"); + if (collectedItems.Count <= 0) + { + GameUtils.AddConsoleLog("No items in collectedItems"); + return; + } + foreach (Item item in collectedItems) + { + if (!item.Name.ToLower().Contains(_searchQuery.ToLower())) + continue; + + item.Template._id = _id; + GameUtils.AddConsoleLog($"Set {item.Name} _id to {_id}"); + if (int.TryParse(_width, out width)) // 字符串转整数 : Casting string to int + { + item.Template.Width = width; + GameUtils.AddConsoleLog($"Set {item.Name.Localized()} Width to {width}"); + } + + if (int.TryParse(_height, out height)) + { + item.Template.Height = height; + GameUtils.AddConsoleLog($"Set {item.Name.Localized()} Height to {height}"); + } + } + } + + public static void ResetItemsInInventory() + { + GameUtils.AddConsoleLog("ResetItemsInInventory called"); + DupeItemsInInventory(1); + } + + public static void DupeItemsInInventory(int count) + { + GameUtils.AddConsoleLog($"DupeItemsInInventory with argument {count} called"); + if (collectedItems.Count <= 0) + { + GameUtils.AddConsoleLog("No items in collectedItems"); + return; + } + + foreach (Item item in collectedItems) + { + item.StackObjectsCount = count; + GameUtils.AddConsoleLog($"Duped {item.Name.Localized()} stack to {count}"); + } + } + + public static void DupeDollarsEuros() + { + DupeItemsInInventory(50000); + } + + public static void DupeRubles() + { + DupeItemsInInventory(400000); + } + + public static void SetInventoryFoundInRaid() + { + GameUtils.AddConsoleLog("FoundInRaidInventory called"); + if (Main.notReady()) + { + GameUtils.AddConsoleLog("You are not in raid."); + return; + } + + if (Main.LocalPlayer.Profile == null) + { + GameUtils.AddConsoleLog("The current raid is in the state of loading."); + return; + } + + if (Main.LocalPlayer.Profile.Inventory == null) + { + GameUtils.AddConsoleLog("Your Inventory class currently has no instance."); + return; + } + IEnumerable items = Main.LocalPlayer.Profile.Inventory.GetPlayerItems(EPlayerItems.All); + if (items == null || items.Count() == 0) + { + GameUtils.AddConsoleLog("Your inventory is either empty or not loaded."); + return; + } + + GameUtils.AddConsoleLog($"Found {items.Count()} items in inventory"); + + foreach (Item item in items) + { + if (!GameUtils.IsInventoryItemValid(item)) + continue; + item.SpawnedInSession = true; + GameUtils.AddConsoleLog($"Set {item.Name.Localized()} to SpawnedInSession"); + } + } + + public static void SetSearchQuery(string searchQuery) + { + _searchQuery = searchQuery; + if (Time.time > _logTime && Settings.debug) + { + GameUtils.AddConsoleLog($"Search query set to: {searchQuery}"); + _logTime = Time.time + 1f; + } + } + + public static void UpdateValues(string id, string width, string height) + { + _id = id; + _width = width; + _height = height; + if (Time.time > _logTime && Settings.debug) + { + GameUtils.AddConsoleLog($"New values set: {id}, {width}, {height}"); + _logTime = Time.time + 1f; + } + } + } +} diff --git a/EscapeFromTarkovCheat/Features/Skills.cs b/EscapeFromTarkovCheat/Features/Skills.cs new file mode 100644 index 0000000..622a1c2 --- /dev/null +++ b/EscapeFromTarkovCheat/Features/Skills.cs @@ -0,0 +1,239 @@ +using EFT.Interactive; +using UnityEngine.UI; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Features +{ + public enum Skill { + STRENGTH, + STRESSRESISTANCE, + MAGDRILLS, + MELEE, + HIDEOUTMANAGEMENT, + CRAFTING, + HEAVYVESTS, + LIGHTVESTS, + LMG, + ASSAULT, + PISTOL, + PERCEPTION, + SNIPER, + SNIPING, + ENDURANCE, + THROWING, + CHARISMA, + HEALTH, + VITALITY, + METABOLISM, + IMMUNITY, + SURGERY, + INTELLECT, + ATTENTION, + REVOLVER, + SHOTGUN, + HMG, + DMR, + AIMDRILLS, + SEARCH, + WEAPONTREATMENT, + TROUBLESHOOTING, + COVERTMOVEMENT, + SMG + } + public class Skills + { + public void MaxAll() + { + if (Main.notReady()) + return; + Main.LocalPlayer.Skills.Strength.SetLevel(51); + Main.LocalPlayer.Skills.StressResistance.SetLevel(51); + Main.LocalPlayer.Skills.MagDrills.SetLevel(51); + Main.LocalPlayer.Skills.Melee.SetLevel(51); + Main.LocalPlayer.Skills.HideoutManagement.SetLevel(51); + Main.LocalPlayer.Skills.Crafting.SetLevel(51); + Main.LocalPlayer.Skills.HeavyVests.SetLevel(51); + Main.LocalPlayer.Skills.LightVests.SetLevel(51); + Main.LocalPlayer.Skills.LMG.SetLevel(51); + Main.LocalPlayer.Skills.Assault.SetLevel(51); + Main.LocalPlayer.Skills.Pistol.SetLevel(51); + Main.LocalPlayer.Skills.Perception.SetLevel(51); + Main.LocalPlayer.Skills.Sniper.SetLevel(51); + Main.LocalPlayer.Skills.Sniping.SetLevel(51); + Main.LocalPlayer.Skills.Endurance.SetLevel(51); + Main.LocalPlayer.Skills.Throwing.SetLevel(51); + Main.LocalPlayer.Skills.Charisma.SetLevel(51); + Main.LocalPlayer.Skills.Health.SetLevel(51); + Main.LocalPlayer.Skills.Vitality.SetLevel(51); + Main.LocalPlayer.Skills.Metabolism.SetLevel(51); + Main.LocalPlayer.Skills.Immunity.SetLevel(51); + Main.LocalPlayer.Skills.Intellect.SetLevel(51); + Main.LocalPlayer.Skills.Attention.SetLevel(51); + Main.LocalPlayer.Skills.Revolver.SetLevel(51); + Main.LocalPlayer.Skills.Shotgun.SetLevel(51); + Main.LocalPlayer.Skills.HMG.SetLevel(51); + Main.LocalPlayer.Skills.DMR.SetLevel(51); + Main.LocalPlayer.Skills.AimDrills.SetLevel(51); + Main.LocalPlayer.Skills.Search.SetLevel(51); + Main.LocalPlayer.Skills.WeaponTreatment.SetLevel(51); + Main.LocalPlayer.Skills.TroubleShooting.SetLevel(51); + Main.LocalPlayer.Skills.CovertMovement.SetLevel(51); + Main.LocalPlayer.Skills.SMG.SetLevel(51); + Main.LocalPlayer.Skills.Surgery.SetLevel(51); + } + + public int Get(Skill skill) { + if (Main.GameWorld == null) return 0; + switch (skill) + { + case Skill.STRENGTH: + return Main.LocalPlayer.Skills.Strength.Level; + case Skill.STRESSRESISTANCE: + return Main.LocalPlayer.Skills.StressResistance.Level; + case Skill.MAGDRILLS: + return Main.LocalPlayer.Skills.MagDrills.Level; + case Skill.MELEE: + return Main.LocalPlayer.Skills.Melee.Level; + case Skill.HIDEOUTMANAGEMENT: + return Main.LocalPlayer.Skills.HideoutManagement.Level; + case Skill.CRAFTING: + return Main.LocalPlayer.Skills.Crafting.Level; + case Skill.HEAVYVESTS: + return Main.LocalPlayer.Skills.HeavyVests.Level; + case Skill.LIGHTVESTS: + return Main.LocalPlayer.Skills.LightVests.Level; + case Skill.LMG: + return Main.LocalPlayer.Skills.LMG.Level; + case Skill.ASSAULT: + return Main.LocalPlayer.Skills.Assault.Level; + case Skill.PISTOL: + return Main.LocalPlayer.Skills.Pistol.Level; + case Skill.PERCEPTION: + return Main.LocalPlayer.Skills.Perception.Level; + case Skill.SNIPER: + return Main.LocalPlayer.Skills.Sniper.Level; + case Skill.SNIPING: + return Main.LocalPlayer.Skills.Sniping.Level; + case Skill.ENDURANCE: + return Main.LocalPlayer.Skills.Endurance.Level; + case Skill.THROWING: + return Main.LocalPlayer.Skills.Throwing.Level; + case Skill.CHARISMA: + return Main.LocalPlayer.Skills.Charisma.Level; + case Skill.HEALTH: + return Main.LocalPlayer.Skills.Health.Level; + case Skill.VITALITY: + return Main.LocalPlayer.Skills.Vitality.Level; + case Skill.METABOLISM: + return Main.LocalPlayer.Skills.Metabolism.Level; + case Skill.IMMUNITY: + return Main.LocalPlayer.Skills.Immunity.Level; + case Skill.COVERTMOVEMENT: + return Main.LocalPlayer.Skills.CovertMovement.Level; + case Skill.INTELLECT: + return Main.LocalPlayer.Skills.Intellect.Level; + case Skill.ATTENTION: + return Main.LocalPlayer.Skills.Attention.Level; + case Skill.REVOLVER: + return Main.LocalPlayer.Skills.Revolver.Level; + case Skill.SHOTGUN: + return Main.LocalPlayer.Skills.Shotgun.Level; + case Skill.HMG: + return Main.LocalPlayer.Skills.HMG.Level; + case Skill.DMR: + return Main.LocalPlayer.Skills.DMR.Level; + case Skill.AIMDRILLS: + return Main.LocalPlayer.Skills.AimDrills.Level; + case Skill.SEARCH: + return Main.LocalPlayer.Skills.Search.Level; + case Skill.WEAPONTREATMENT: + return Main.LocalPlayer.Skills.WeaponTreatment.Level; + case Skill.TROUBLESHOOTING: + return Main.LocalPlayer.Skills.TroubleShooting.Level; + case Skill.SURGERY: + return Main.LocalPlayer.Skills.Surgery.Level; + case Skill.SMG: + return Main.LocalPlayer.Skills.SMG.Level; + default: + return 0; + } + } + + public void Commit(Skill skill, int level) { + if (Main.notReady()) return; + switch (skill) + { + case Skill.STRENGTH: + if (Main.LocalPlayer.Skills.Strength.Level != level) Main.LocalPlayer.Skills.Strength.SetLevel(level); break; + case Skill.STRESSRESISTANCE: + if (Main.LocalPlayer.Skills.StressResistance.Level != level) Main.LocalPlayer.Skills.StressResistance.SetLevel(level); break; + case Skill.MAGDRILLS: + if (Main.LocalPlayer.Skills.MagDrills.Level != level) Main.LocalPlayer.Skills.MagDrills.SetLevel(level); break; + case Skill.MELEE: + if (Main.LocalPlayer.Skills.Melee.Level != level) Main.LocalPlayer.Skills.Melee.SetLevel(level); break; + case Skill.HIDEOUTMANAGEMENT: + if (Main.LocalPlayer.Skills.HideoutManagement.Level != level) Main.LocalPlayer.Skills.HideoutManagement.SetLevel(level); break; + case Skill.CRAFTING: + if (Main.LocalPlayer.Skills.Crafting.Level != level) Main.LocalPlayer.Skills.Crafting.SetLevel(level); break; + case Skill.HEAVYVESTS: + if (Main.LocalPlayer.Skills.HeavyVests.Level != level) Main.LocalPlayer.Skills.HeavyVests.SetLevel(level); break; + case Skill.LIGHTVESTS: + if (Main.LocalPlayer.Skills.LightVests.Level != level) Main.LocalPlayer.Skills.LightVests.SetLevel(level); break; + case Skill.LMG: + if (Main.LocalPlayer.Skills.LMG.Level != level) Main.LocalPlayer.Skills.LMG.SetLevel(level); break; + case Skill.ASSAULT: + if (Main.LocalPlayer.Skills.Assault.Level != level) Main.LocalPlayer.Skills.Assault.SetLevel(level); break; + case Skill.PISTOL: + if (Main.LocalPlayer.Skills.Pistol.Level != level) Main.LocalPlayer.Skills.Pistol.SetLevel(level); break; + case Skill.PERCEPTION: + if (Main.LocalPlayer.Skills.Perception.Level != level) Main.LocalPlayer.Skills.Perception.SetLevel(level); break; + case Skill.SNIPER: + if (Main.LocalPlayer.Skills.Sniper.Level != level) Main.LocalPlayer.Skills.Sniper.SetLevel(level); break; + case Skill.SNIPING: + if (Main.LocalPlayer.Skills.Sniping.Level != level) Main.LocalPlayer.Skills.Sniping.SetLevel(level); break; + case Skill.ENDURANCE: + if (Main.LocalPlayer.Skills.Endurance.Level != level) Main.LocalPlayer.Skills.Endurance.SetLevel(level); break; + case Skill.THROWING: + if (Main.LocalPlayer.Skills.Throwing.Level != level) Main.LocalPlayer.Skills.Throwing.SetLevel(level); break; + case Skill.CHARISMA: + if (Main.LocalPlayer.Skills.Charisma.Level != level) Main.LocalPlayer.Skills.Charisma.SetLevel(level); break; + case Skill.HEALTH: + if (Main.LocalPlayer.Skills.Health.Level != level) Main.LocalPlayer.Skills.Health.SetLevel(level); break; + case Skill.VITALITY: + if (Main.LocalPlayer.Skills.Vitality.Level != level) Main.LocalPlayer.Skills.Vitality.SetLevel(level); break; + case Skill.METABOLISM: + if (Main.LocalPlayer.Skills.Metabolism.Level != level) Main.LocalPlayer.Skills.Metabolism.SetLevel(level); break; + case Skill.IMMUNITY: + if (Main.LocalPlayer.Skills.Immunity.Level != level) Main.LocalPlayer.Skills.Immunity.SetLevel(level); break; + case Skill.COVERTMOVEMENT: + if (Main.LocalPlayer.Skills.CovertMovement.Level != level) Main.LocalPlayer.Skills.CovertMovement.SetLevel(level); break; + case Skill.INTELLECT: + if (Main.LocalPlayer.Skills.Intellect.Level != level) Main.LocalPlayer.Skills.Intellect.SetLevel(level); break; + case Skill.ATTENTION: + if (Main.LocalPlayer.Skills.Attention.Level != level) Main.LocalPlayer.Skills.Attention.SetLevel(level); break; + case Skill.REVOLVER: + if (Main.LocalPlayer.Skills.Revolver.Level != level) Main.LocalPlayer.Skills.Revolver.SetLevel(level); break; + case Skill.SHOTGUN: + if (Main.LocalPlayer.Skills.Shotgun.Level != level) Main.LocalPlayer.Skills.Shotgun.SetLevel(level); break; + case Skill.HMG: + if (Main.LocalPlayer.Skills.HMG.Level != level) Main.LocalPlayer.Skills.HMG.SetLevel(level); break; + case Skill.DMR: + if (Main.LocalPlayer.Skills.DMR.Level != level) Main.LocalPlayer.Skills.DMR.SetLevel(level); break; + case Skill.AIMDRILLS: + if (Main.LocalPlayer.Skills.AimDrills.Level != level) Main.LocalPlayer.Skills.AimDrills.SetLevel(level); break; + case Skill.SEARCH: + if (Main.LocalPlayer.Skills.Search.Level != level) Main.LocalPlayer.Skills.Search.SetLevel(level); break; + case Skill.WEAPONTREATMENT: + if (Main.LocalPlayer.Skills.WeaponTreatment.Level != level) Main.LocalPlayer.Skills.WeaponTreatment.SetLevel(level); break; + case Skill.TROUBLESHOOTING: + if (Main.LocalPlayer.Skills.TroubleShooting.Level != level) Main.LocalPlayer.Skills.TroubleShooting.SetLevel(level); break; + case Skill.SURGERY: + if (Main.LocalPlayer.Skills.Surgery.Level != level) Main.LocalPlayer.Skills.Surgery.SetLevel(level); break; + case Skill.SMG: + if (Main.LocalPlayer.Skills.SMG.Level != level) Main.LocalPlayer.Skills.SMG.SetLevel(level); break; + default: + break; + } + } + } +} diff --git a/EscapeFromTarkovCheat/Features/SpeedHack.cs b/EscapeFromTarkovCheat/Features/SpeedHack.cs new file mode 100644 index 0000000..9a183bc --- /dev/null +++ b/EscapeFromTarkovCheat/Features/SpeedHack.cs @@ -0,0 +1,29 @@ +using System; +using EscapeFromTarkovCheat.Utils; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Features.Misc +{ + public class SpeedHack : MonoBehaviour + { + public void Update() + { + if (Main.GameWorld != null && Settings.SpeedHack) + { + this.Enable(); + } + } + + private void Enable() + { + if (Main.LocalPlayer == null && Main.MainCamera == null) + { + return; + } + if (Input.GetKey(KeyCode.LeftShift)) + { + Main.LocalPlayer.Transform.position += Settings.SpeedAddition * Time.deltaTime * Main.MainCamera.transform.forward; + } + } + } +} diff --git a/EscapeFromTarkovCheat/Loader.cs b/EscapeFromTarkovCheat/Loader.cs new file mode 100644 index 0000000..3533744 --- /dev/null +++ b/EscapeFromTarkovCheat/Loader.cs @@ -0,0 +1,25 @@ + +using EFT.InventoryLogic; +using EscapeFromTarkovCheat.Feauters.ESP; +using UnityEngine; + +namespace EscapeFromTarkovCheat +{ + public class Loader + { + public static GameObject HookObject; + + public static void Load() + { + HookObject = new GameObject(); + HookObject.AddComponent
(); + Object.DontDestroyOnLoad(HookObject); + } + + public static void Unload() + { + Object.Destroy(HookObject); + } + } + +} diff --git a/EscapeFromTarkovCheat/LocalisationManager.cs b/EscapeFromTarkovCheat/LocalisationManager.cs new file mode 100644 index 0000000..6796da8 --- /dev/null +++ b/EscapeFromTarkovCheat/LocalisationManager.cs @@ -0,0 +1,23 @@ +using EscapeFromTarkovCheat.Data; +using System.Collections.Generic; + +namespace EscapeFromTarkovCheat +{ + public static class LocalisationManager + { + static List data = new List(); + + public static void Initialize() { + data.Add(new LocalisationData(Locale.ENGLISH)); + data.Add(new LocalisationData(Locale.CHINESE)); + } + + public static string GetString(Locale locale, StringKey key) { + foreach (LocalisationData data in data) { + if (data.locale == locale) + return data.GetByKey(key); + } + return $"INVALID_LANGUAGE_{locale}"; + } + } +} \ No newline at end of file diff --git a/EscapeFromTarkovCheat/Main.cs b/EscapeFromTarkovCheat/Main.cs new file mode 100644 index 0000000..e3beed8 --- /dev/null +++ b/EscapeFromTarkovCheat/Main.cs @@ -0,0 +1,416 @@ +using System; +using System.Collections.Generic; +using Comfort.Common; +using EFT; +using EFT.Interactive; +using EFT.InputSystem; +using EscapeFromTarkovCheat.Data; +using EscapeFromTarkovCheat.Feauters; +using EscapeFromTarkovCheat.Feauters.ESP; +using EscapeFromTarkovCheat.Utils; +using UnityEngine; +using System.Security.Cryptography; +using EscapeFromTarkovCheat.Features.Misc; +using System.Diagnostics; +using EscapeFromTarkovCheat.Features; +using System.Linq; +using System.ComponentModel.Design; +namespace EscapeFromTarkovCheat +{ + public class Main : MonoBehaviour + { + public static List GamePlayers = new List(); + public static Player LocalPlayer; + public static GameWorld GameWorld; + public static Camera MainCamera; + + public static Skills skills = new Skills(); + + private float _nextPlayerCacheTime; + private static readonly float _cachePlayersInterval = 4f; + + // Stamina BEGIN + private float _aimDrainRate; + private float _aimRangeFinderDrainRate; + private float _sprintDrainRate; + private float _jumpConsumption; + private float _proneConsumption; + + private Vector3 _aimConsumptionByPose; + private Vector3 _overweightConsumptionByPose; + private Vector2 _crouchConsumption; + private Vector2 _standupConsumption; + private Vector2 _walkConsumption; + + private float _oxygenRestoration; + private float _exhaustedMeleeSpeed; + + private float _baseRestorationRate; + + private bool _staminaExhaustionCausesJiggle; + private bool _staminaExhaustionRocksCamera; + private bool _staminaExhaustionStartsBreathSound; + + private bool _isConfigured = false; + // Stamina END + + public void Awake() + { + GameObject hookObject = new GameObject(); + // MAIN + hookObject.AddComponent(); + // ESP + hookObject.AddComponent(); + hookObject.AddComponent(); + hookObject.AddComponent(); + hookObject.AddComponent(); + // AIMBOT + hookObject.AddComponent(); + // MISC + hookObject.AddComponent(); + DontDestroyOnLoad(hookObject); + LocalisationManager.Initialize(); + } + + public static bool notReady() { + return Singleton.Instance == null || // Not in raid + Singleton.Instance.RegisteredPlayers == null || // Not yet loaded + Camera.main == null; // Counting down + } + + public static void KillEverything() + { + var gameWorld = Singleton.Instance; + if (gameWorld == null) return; + + foreach (var player in gameWorld.AllAlivePlayersList.Where(players => !players.IsYourPlayer)) + { + player.ActiveHealthController.Kill(EDamageType.Bullet); + } + } + + public static void TeleportLoot() + { + var targetPosition = GameUtils.GetTargetPosition(); + var lootItems = FindObjectsOfType() + .Where(GameUtils.IsGroundLoot) + .Where(GameUtils.IsInteractableLoot) + .Select(lootItem => new GameLootItem(lootItem)) + .ToList(); + + int itemCount = lootItems.Count; + float radius = 2.0f; + float additionalSpacing = 1f; + + for (int i = 0; i < itemCount; i++) + { + var angle = i * Mathf.PI * 2 / itemCount; + var x = Mathf.Cos(angle) * (radius + (i * additionalSpacing / itemCount)); + var z = Mathf.Sin(angle) * (radius + (i * additionalSpacing / itemCount)); + + lootItems[i].LootItem.transform.position = new Vector3(targetPosition.x + x, targetPosition.y, targetPosition.z + z); + } + } + + public static void TeleportAllEnemies() + { + if (notReady()) + return; + + var targetPosition = GameUtils.GetTargetPosition(); + foreach (var player in GameWorld.AllAlivePlayersList.Where(x => !x.IsYourPlayer)) + { + player.Teleport(targetPosition); + } + } + + private void RefreshData() + { + if (Time.time < _nextPlayerCacheTime) + return; + if (notReady()) + return; + GameWorld = Singleton.Instance; + MainCamera = Camera.main; + _nextPlayerCacheTime = (Time.time + _cachePlayersInterval); + } + private void RefreshPlayers() + { + if (notReady()) + return; + + GamePlayers.Clear(); + foreach (Player player in GameWorld.RegisteredPlayers) + { + if (player.IsYourPlayer) + { + LocalPlayer = player; + continue; + } + + if (!GameUtils.IsPlayerAlive(player) || (Vector3.Distance(MainCamera.transform.position, player.Transform.position) > Settings.DrawPlayersDistance)) + continue; + + GamePlayers.Add(new GamePlayer(player)); + } + + foreach (GamePlayer gamePlayer in GamePlayers) + gamePlayer.RecalculateDynamics(); + } + + public static void UnlockAllDoors() { + if (notReady()) + return; + + foreach (var door in FindObjectsOfType()) + { + if (door.DoorState == EDoorState.Open) + continue; + if (Vector3.Distance(door.transform.position, LocalPlayer.Position) > 20f) + continue; + + door.DoorState = EDoorState.Shut; + } + } + + public static void Heal() { + if (notReady()) + return; + + if (LocalPlayer.PlayerHealthController == null) + return; + + if (LocalPlayer.PlayerHealthController.IsBodyPartBroken(EBodyPart.Head)) + LocalPlayer.PlayerHealthController.RestoreBodyPart(EBodyPart.Head, 1); + if (LocalPlayer.PlayerHealthController.IsBodyPartBroken(EBodyPart.LeftArm)) + LocalPlayer.PlayerHealthController.RestoreBodyPart(EBodyPart.LeftArm, 1); + if (LocalPlayer.PlayerHealthController.IsBodyPartBroken(EBodyPart.RightArm)) + LocalPlayer.PlayerHealthController.RestoreBodyPart(EBodyPart.RightArm, 1); + if (LocalPlayer.PlayerHealthController.IsBodyPartBroken(EBodyPart.LeftLeg)) + LocalPlayer.PlayerHealthController.RestoreBodyPart(EBodyPart.LeftLeg, 1); + if (LocalPlayer.PlayerHealthController.IsBodyPartBroken(EBodyPart.RightLeg)) + LocalPlayer.PlayerHealthController.RestoreBodyPart(EBodyPart.RightLeg, 1); + if (LocalPlayer.PlayerHealthController.IsBodyPartBroken(EBodyPart.Chest)) + LocalPlayer.PlayerHealthController.RestoreBodyPart(EBodyPart.Chest, 1); + if (LocalPlayer.PlayerHealthController.IsBodyPartBroken(EBodyPart.Stomach)) + LocalPlayer.PlayerHealthController.RestoreBodyPart(EBodyPart.Stomach, 1); + LocalPlayer.PlayerHealthController.RestoreFullHealth(); + LocalPlayer.PlayerHealthController.ChangeHealth(EBodyPart.Head, LocalPlayer.PlayerHealthController.GetBodyPartHealth(EBodyPart.Head).Maximum, default); + LocalPlayer.PlayerHealthController.ChangeHealth(EBodyPart.Stomach, LocalPlayer.PlayerHealthController.GetBodyPartHealth(EBodyPart.Stomach).Maximum, default); + LocalPlayer.PlayerHealthController.ChangeHealth(EBodyPart.Chest, LocalPlayer.PlayerHealthController.GetBodyPartHealth(EBodyPart.Chest).Maximum, default); + LocalPlayer.PlayerHealthController.ChangeHealth(EBodyPart.LeftLeg, LocalPlayer.PlayerHealthController.GetBodyPartHealth(EBodyPart.LeftLeg).Maximum, default); + LocalPlayer.PlayerHealthController.ChangeHealth(EBodyPart.RightLeg, LocalPlayer.PlayerHealthController.GetBodyPartHealth(EBodyPart.RightLeg).Maximum, default); + LocalPlayer.PlayerHealthController.ChangeHealth(EBodyPart.LeftArm, LocalPlayer.PlayerHealthController.GetBodyPartHealth(EBodyPart.LeftArm).Maximum, default); + LocalPlayer.PlayerHealthController.ChangeHealth(EBodyPart.RightArm, LocalPlayer.PlayerHealthController.GetBodyPartHealth(EBodyPart.RightArm).Maximum, default); + LocalPlayer.PlayerHealthController.ChangeHealth(EBodyPart.Head, 9999, default); + LocalPlayer.PlayerHealthController.ChangeHealth(EBodyPart.Stomach, 9999, default); + LocalPlayer.PlayerHealthController.ChangeHealth(EBodyPart.Chest, 9999, default); + LocalPlayer.PlayerHealthController.ChangeHealth(EBodyPart.LeftLeg, 9999, default); + LocalPlayer.PlayerHealthController.ChangeHealth(EBodyPart.RightLeg, 9999, default); + LocalPlayer.PlayerHealthController.ChangeHealth(EBodyPart.LeftArm, 9999, default); + LocalPlayer.PlayerHealthController.ChangeHealth(EBodyPart.RightArm, 9999, default); + } + private void GodMode() { + if (notReady()) + return; + + if (LocalPlayer.ActiveHealthController == null) + return; + + if (LocalPlayer.ActiveHealthController.DamageCoeff != -1f) + { + LocalPlayer.ActiveHealthController.SetDamageCoeff(-1f); + LocalPlayer.ActiveHealthController.RemoveNegativeEffects(EBodyPart.Common); + LocalPlayer.ActiveHealthController.RestoreFullHealth(); + LocalPlayer.ActiveHealthController.ChangeEnergy(999f); + LocalPlayer.ActiveHealthController.ChangeHydration(999f); + LocalPlayer.ActiveHealthController.DoPermanentHealthBoost(25f); + LocalPlayer.ActiveHealthController.RemoveMedEffect(); + } + if (LocalPlayer.ActiveHealthController.FallSafeHeight != 9999999f) + { + LocalPlayer.ActiveHealthController.FallSafeHeight = 9999999f; + } + } + + private void GodMode_OnDisable() + { + if (notReady()) + return; + + if (LocalPlayer.ActiveHealthController == null) + return; + LocalPlayer.ActiveHealthController.SetDamageCoeff(1f); + LocalPlayer.ActiveHealthController.FallSafeHeight = 1f; + LocalPlayer.ActiveHealthController.ChangeEnergy(100f); + LocalPlayer.ActiveHealthController.ChangeHydration(100f); + LocalPlayer.ActiveHealthController.RemoveMedEffect(); + LocalPlayer.ActiveHealthController.DoPermanentHealthBoost(0f); + } + + private void Stamina_Configure() { + if (notReady()) + return; + + if (LocalPlayer.Physical == null) + return; + + if (LocalPlayer.Physical.StaminaParameters == null) + return; + var parameters = LocalPlayer.Physical.StaminaParameters; + _aimDrainRate = parameters.AimDrainRate; + _aimRangeFinderDrainRate = parameters.AimRangeFinderDrainRate; + _sprintDrainRate = parameters.SprintDrainRate; + _jumpConsumption = parameters.JumpConsumption; + _proneConsumption = parameters.ProneConsumption; + + _aimConsumptionByPose = parameters.AimConsumptionByPose; + _overweightConsumptionByPose = parameters.OverweightConsumptionByPose; + + _crouchConsumption = parameters.CrouchConsumption; + _standupConsumption = parameters.StandupConsumption; + _walkConsumption = parameters.WalkConsumption; + + _oxygenRestoration = parameters.OxygenRestoration; + _exhaustedMeleeSpeed = parameters.ExhaustedMeleeSpeed; + + _baseRestorationRate = parameters.BaseRestorationRate; + + _staminaExhaustionCausesJiggle = parameters.StaminaExhaustionCausesJiggle; + _staminaExhaustionRocksCamera = parameters.StaminaExhaustionRocksCamera; + _staminaExhaustionStartsBreathSound = parameters.StaminaExhaustionStartsBreathSound; + + _isConfigured = true; + } + + private void Stamina() { + if (notReady()) + return; + + if (LocalPlayer.Physical == null) + return; + + if (LocalPlayer.Physical.StaminaParameters == null) + return; + + var parameters = LocalPlayer.Physical.StaminaParameters; + if (!_isConfigured) + Stamina_Configure(); + + LocalPlayer.PlayerHealthController.SetStaminaCoeff(3000000); + parameters.AimDrainRate = 0f; + parameters.AimRangeFinderDrainRate = 0f; + parameters.SprintDrainRate = 0f; + parameters.JumpConsumption = 0f; + parameters.ProneConsumption = 0f; + + parameters.AimConsumptionByPose = Vector3.zero; + parameters.OverweightConsumptionByPose = Vector3.zero; + + parameters.CrouchConsumption = Vector2.zero; + parameters.StandupConsumption = Vector2.zero; + parameters.WalkConsumption = Vector2.zero; + + parameters.OxygenRestoration = 10000f; + parameters.ExhaustedMeleeSpeed = 10000f; + parameters.BaseRestorationRate = parameters.Capacity; + + parameters.StaminaExhaustionCausesJiggle = false; + parameters.StaminaExhaustionRocksCamera = false; + parameters.StaminaExhaustionStartsBreathSound = false; + } + private void Stamina_OnDisable() { + if (notReady()) + return; + + if (LocalPlayer.Physical == null) + return; + + if (LocalPlayer.Physical.StaminaParameters == null) + return; + var parameters = LocalPlayer.Physical.StaminaParameters; + parameters.AimDrainRate = _aimDrainRate; + parameters.AimRangeFinderDrainRate = _aimRangeFinderDrainRate; + parameters.SprintDrainRate = _sprintDrainRate; + parameters.JumpConsumption = _jumpConsumption; + parameters.ProneConsumption = _proneConsumption; + + parameters.AimConsumptionByPose = _aimConsumptionByPose; + parameters.OverweightConsumptionByPose = _overweightConsumptionByPose; + + parameters.CrouchConsumption = _crouchConsumption; + parameters.StandupConsumption = _standupConsumption; + parameters.WalkConsumption = _walkConsumption; + + parameters.OxygenRestoration = _oxygenRestoration; + parameters.ExhaustedMeleeSpeed = _exhaustedMeleeSpeed; + + parameters.BaseRestorationRate = _baseRestorationRate; + + parameters.StaminaExhaustionCausesJiggle = _staminaExhaustionCausesJiggle; + parameters.StaminaExhaustionRocksCamera = _staminaExhaustionRocksCamera; + parameters.StaminaExhaustionStartsBreathSound = _staminaExhaustionStartsBreathSound; + } + public static void IncreaseTraderStanding() + { + if (notReady()) + return; + + foreach (KeyValuePair info in LocalPlayer.Profile.TradersInfo) + { + string traderId = info.Key; + Profile.TraderInfo traderInfo = info.Value; + traderInfo.Init(traderId, LocalPlayer.Profile.Info); + traderInfo.SetStanding(traderInfo.Standing + 0.10000000149011612); + } + } + public static void CallAirdrop(bool takeNearbyPoint = false, Vector3 position = default(Vector3)) + { + if (notReady()) + return; + + GameWorld.InitAirdrop(takeNearbyPoint, position); + } + + public void Update() + { + RefreshData(); + if (Settings.DrawPlayers) + RefreshPlayers(); + + if (Input.GetKeyDown(Settings.UnlockDoors)) + UnlockAllDoors(); + + if (Input.GetKeyDown(Settings.InstaHeal)) + Heal(); + + if (Settings.GodMode) + { + Heal(); + GodMode(); + } + else + GodMode_OnDisable(); + + if (Settings.Stamina) + Stamina(); + else + Stamina_OnDisable(); + + if (Input.GetKeyDown(Settings.KillSwitch)) + KillEverything(); + + if (Input.GetKeyDown(Settings.TpLoots)) + TeleportLoot(); + + if (Input.GetKeyDown(Settings.IncreaseTraderStandingKey)) + IncreaseTraderStanding(); + + if (Input.GetKeyDown(Settings.CallAirdrop)) + CallAirdrop(false, default(Vector3)); + + if (Input.GetKeyDown(Settings.TpEnemies)) + TeleportAllEnemies(); + } + } +} diff --git a/EscapeFromTarkovCheat/Properties/AssemblyInfo.cs b/EscapeFromTarkovCheat/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..896e37b --- /dev/null +++ b/EscapeFromTarkovCheat/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("EscapeFromTarkovCheat")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("EscapeFromTarkovCheat")] +[assembly: AssemblyCopyright("Copyright © UnknownCheats 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c1c426a1-efc3-4c83-972c-eca557571328")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.2.0.0")] +[assembly: AssemblyFileVersion("1.2.0.0")] diff --git a/EscapeFromTarkovCheat/UI/Menu.cs b/EscapeFromTarkovCheat/UI/Menu.cs new file mode 100644 index 0000000..6a9086e --- /dev/null +++ b/EscapeFromTarkovCheat/UI/Menu.cs @@ -0,0 +1,305 @@ +using System; +using System.Runtime.InteropServices; +using EscapeFromTarkovCheat; +using EscapeFromTarkovCheat.Utils; +using UnityEngine; +using EscapeFromTarkovCheat.Data; +using EscapeFromTarkovCheat.Features; + +internal enum MENUS { + MAIN, + PLAYER, + ITEM, + AIMBOT, + MISC, + SKILLS, + ITEMS +} + +namespace Menu.UI +{ + public class Menu : MonoBehaviour + { + private Rect _mainWindow; + private Rect _playerVisualWindow; + private Rect _miscVisualWindow; + private Rect _aimbotVisualWindow; + private Rect _miscWindow; + private Rect _skillsWindow; + private Rect _itemsWindow; + Vector2 skillsScrollPosition = Vector2.zero; + private bool _visible = true; + private bool _playerEspVisualVisible; + private bool _miscVisualVisible; + private bool _aimbotVisualVisible; + private bool _miscVisible; + private bool _skillsVisible; + private bool _itemsVisible; + private string[] languageNames = { "English", "中文" }; + private int selectedIndex = 0; + Vector2 basePoint = new Vector2(20, 60); + private void Start() + { + AllocConsoleHandler.Open(); + _mainWindow = new Rect(basePoint.x, basePoint.y, 250f, 300f); + _playerVisualWindow = new Rect(basePoint.x, basePoint.y + _mainWindow.height, 250f, 200f); + _miscVisualWindow = new Rect(basePoint.x, _playerVisualWindow.yMin + _playerVisualWindow.height, 250f, 180f); + _aimbotVisualWindow = new Rect(basePoint.x, _miscVisualWindow.yMin + _miscVisualWindow.height, 250f, 150f); + _miscWindow = new Rect(basePoint.x + _mainWindow.width, basePoint.y, 350f, 360f); + _skillsWindow = new Rect(basePoint.x + _mainWindow.width, basePoint.y + _miscWindow.height, 250f, 550f); + _itemsWindow = new Rect(basePoint.x + _mainWindow.width + _miscWindow.width, basePoint.y, 250f, 150f); + GameUtils.AddConsoleLog("Initialized."); + } + + private void Update() + { + if (Input.GetKeyDown(KeyCode.Insert)) + _visible = !_visible; + + if (Input.GetKeyDown(KeyCode.Delete)) + Loader.Unload(); + } + + private void OnGUI() + { + if (!_visible) + return; + + _mainWindow = GUILayout.Window((int)MENUS.MAIN, _mainWindow, RenderUi, LocalisationManager.GetString(Settings.Language, StringKey.MAIN_TITLE)); + + if (_playerEspVisualVisible) + _playerVisualWindow = GUILayout.Window(((int)MENUS.PLAYER), _playerVisualWindow, RenderUi, LocalisationManager.GetString(Settings.Language, StringKey.MENU_PLAYER_VISUAL_TITLE)); + if (_miscVisualVisible) + _miscVisualWindow = GUILayout.Window((int)MENUS.ITEM, _miscVisualWindow, RenderUi, LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISC_VISUAL_TITLE)); + if (_aimbotVisualVisible) + _aimbotVisualWindow = GUILayout.Window((int)MENUS.AIMBOT, _aimbotVisualWindow, RenderUi, LocalisationManager.GetString(Settings.Language, StringKey.MENU_AIMBOT_TITLE)); + if (_miscVisible) + _miscWindow = GUILayout.Window((int)MENUS.MISC, _miscWindow, RenderUi, LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISCELLANEOUS_TITLE)); + if (_skillsVisible) + _skillsWindow = GUILayout.Window((int)MENUS.SKILLS, _skillsWindow, RenderUi, LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_TITLE)); + if (_itemsVisible) + _itemsWindow = GUILayout.Window((int)MENUS.ITEMS, _itemsWindow, RenderUi, LocalisationManager.GetString(Settings.Language, StringKey.MENU_ITEMS_TITLE)); + } + private Locale FromGUI(int selection) { + switch (selection) { + case 0: return Locale.ENGLISH; + case 1: return Locale.CHINESE; + default: return Locale.ENGLISH; + } + } + + private void RenderUi(int id) + { + switch (id) + { + case (int)MENUS.MAIN: + selectedIndex = GUILayout.Toolbar(selectedIndex, languageNames); + Settings.Language = FromGUI(selectedIndex); + GUILayout.Label(LocalisationManager.GetString(Settings.Language, StringKey.MENU_MAIN_DESC_TOGGLE)); + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_MAIN_BUTTON_PLAYER_VISUAL))) + _playerEspVisualVisible = !_playerEspVisualVisible; + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_MAIN_BUTTON_MISC_VISUAL))) + _miscVisualVisible = !_miscVisualVisible; + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_MAIN_BUTTON_AIMBOT))) + _aimbotVisualVisible = !_aimbotVisualVisible; + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_MAIN_BUTTON_MISCELLANEOUS))) + _miscVisible = !_miscVisible; + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_MAIN_BUTTON_SKILLS))) + _skillsVisible = !_skillsVisible; + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_MAIN_BUTTON_ITEMS))) + _itemsVisible = !_itemsVisible; + if (GUILayout.Button("BAN")) + { + EFT.UI.PreloaderUI.Instance.ShowPveLoadingScreen(); + EFT.UI.PreloaderUI.Instance.ShowErrorScreen("ERROR", "229\n\n\n", Application.Quit); + EFT.UI.PreloaderUI.Instance.ShowCriticalErrorScreen("验证错误", "授权发生错误", EFT.UI.ErrorScreen.EButtonType.QuitButton, 30f, Application.Quit, Application.Quit); + } + break; + + case (int)MENUS.PLAYER: + Settings.DrawPlayers = GUILayout.Toggle(Settings.DrawPlayers, LocalisationManager.GetString(Settings.Language, StringKey.MENU_PLAYER_VISUAL_DRAWPLAYERS)); + Settings.DrawPlayerBox = GUILayout.Toggle(Settings.DrawPlayerBox, LocalisationManager.GetString(Settings.Language, StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_BOX)); + Settings.DrawPlayerName = GUILayout.Toggle(Settings.DrawPlayerName, LocalisationManager.GetString(Settings.Language, StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_NAME)); + Settings.DrawPlayerLine = GUILayout.Toggle(Settings.DrawPlayerLine, LocalisationManager.GetString(Settings.Language, StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_LINE)); + Settings.DrawPlayerHealth = GUILayout.Toggle(Settings.DrawPlayerHealth, LocalisationManager.GetString(Settings.Language, StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_HEALTH)); + Settings.DrawPlayerSkeletons = GUILayout.Toggle(Settings.DrawPlayerSkeletons, LocalisationManager.GetString(Settings.Language, StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_SKELETON)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_PLAYER_VISUAL_DRAWPLAYER_RANGE)} {(int)Settings.DrawPlayersDistance} m"); + Settings.DrawPlayersDistance = GUILayout.HorizontalSlider(Settings.DrawPlayersDistance, 0f, 2000f); + break; + + case (int)MENUS.ITEM: + Settings.DrawLootItems = GUILayout.Toggle(Settings.DrawLootItems, LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISC_VISUAL_DRAWLOOTITEMS)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISC_VISUAL_LOOTITEMRANGE)} {(int)Settings.DrawLootItemsDistance} m"); + Settings.DrawLootItemsDistance = GUILayout.HorizontalSlider(Settings.DrawLootItemsDistance, 0f, 1000f); + + Settings.DrawLootableContainers = GUILayout.Toggle(Settings.DrawLootableContainers, LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISC_VISUAL_DRAWCONTAINERS)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISC_VISUAL_CONTAINERRANGE)} {(int)Settings.DrawLootableContainersDistance} m"); + Settings.DrawLootableContainersDistance = GUILayout.HorizontalSlider(Settings.DrawLootableContainersDistance, 0f, 1000f); + + Settings.DrawExfiltrationPoints = GUILayout.Toggle(Settings.DrawExfiltrationPoints, LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISC_VISUAL_DRAWEP)); + break; + + case (int)MENUS.AIMBOT: + Settings.Aimbot = GUILayout.Toggle(Settings.Aimbot, LocalisationManager.GetString(Settings.Language, StringKey.MENU_AIMBOT_TOGGLE)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_AIMBOT_SMOOTH)} {(int)Settings.AimbotSmooth} m"); + Settings.AimbotSmooth = GUILayout.HorizontalSlider(Settings.AimbotSmooth, 0f, 100); + Settings.AimbotDrawFOV = GUILayout.Toggle(Settings.AimbotDrawFOV, LocalisationManager.GetString(Settings.Language, StringKey.MENU_AIMBOT_DRAWFOV)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_AIMBOT_FOVRANGE)} {(int)Settings.AimbotFOV} m"); + Settings.AimbotFOV = GUILayout.HorizontalSlider(Settings.AimbotFOV, 0f, 180); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_AIMBOT_AIMINGRANGE)} {(int)Settings.AimbotRange} m"); + Settings.AimbotRange = GUILayout.HorizontalSlider(Settings.AimbotRange, 0f, 1000f); + Settings.VisibleOnly = GUILayout.Toggle(Settings.VisibleOnly, LocalisationManager.GetString(Settings.Language, StringKey.MENU_AIMBOT_VISIBLEONLY)); + Settings.SilentAim = GUILayout.Toggle(Settings.SilentAim, LocalisationManager.GetString(Settings.Language, StringKey.MENU_AIMBOT_SILENT)); + Settings.NoRecoil = GUILayout.Toggle(Settings.NoRecoil, LocalisationManager.GetString(Settings.Language, StringKey.MENU_AIMBOT_NORECOIL)); + break; + case (int)MENUS.MISC: + Settings.GodMode = GUILayout.Toggle(Settings.GodMode, LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISCELLANEOUS_GODMODE)); + + Settings.Stamina = GUILayout.Toggle(Settings.Stamina, LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISCELLANEOUS_STAMINA)); + + Settings.SpeedHack = GUILayout.Toggle(Settings.SpeedHack, LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISCELLANEOUS_SPEEDHACK)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISCELLANEOUS_SPEEDHACK_ADDITION)} {(int)Settings.SpeedAddition} m/s"); + Settings.SpeedAddition = GUILayout.HorizontalSlider(Settings.SpeedAddition, 2.5f, 10f); + + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISCELLANEOUS_BUTTON_ADDXP))) + ExperienceManager.AddExperience(Main.LocalPlayer, Settings.ExperienceAmount); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISCELLANEOUS_XPINRAID)} {((Main.GameWorld != null) ? ExperienceManager.Get(Main.LocalPlayer) : 0)}"); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISCELLANEOUS_XPADDITION)} {Settings.ExperienceAmount}"); + Settings.ExperienceAmount = GUILayout.HorizontalSlider(Settings.ExperienceAmount, 5000f, 100000f); + + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISCELLANEOUS_BUTTON_KILL))) + Main.KillEverything(); + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISCELLANEOUS_BUTTON_TPENEMIES))) + Main.TeleportAllEnemies(); + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISCELLANEOUS_BUTTON_TRADERSTANDING))) + Main.IncreaseTraderStanding(); + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISCELLANEOUS_BUTTON_HEAL))) + Main.Heal(); + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_MISCELLANEOUS_BUTTON_UNLOCK))) + Main.UnlockAllDoors(); + break; + case (int)MENUS.SKILLS: + GUIStyle redlabel = new GUIStyle(GUI.skin.label); + redlabel.normal.textColor = Color.red; + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_BUTTON_MAXALL))) + Main.skills.MaxAll(); + if (Main.notReady()) + GUILayout.Label(LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_HINT_INRAID), redlabel); + skillsScrollPosition = GUILayout.BeginScrollView(skillsScrollPosition, GUILayout.Width(250), GUILayout.Height(500)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_STRENGTH)} Lv. {Main.skills.Get(Skill.STRENGTH)}"); + Main.skills.Commit(Skill.STRENGTH, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.STRENGTH), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_STRESSRESIST)} Lv. {Main.skills.Get(Skill.STRESSRESISTANCE)}"); + Main.skills.Commit(Skill.STRESSRESISTANCE, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.STRESSRESISTANCE), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_MAGDRILLS)} Lv. {Main.skills.Get(Skill.MAGDRILLS)}"); + Main.skills.Commit(Skill.MAGDRILLS, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.MAGDRILLS), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_MELEE)} Lv. {Main.skills.Get(Skill.MELEE)}"); + Main.skills.Commit(Skill.MELEE, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.MELEE), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_HIDEOUT)} Lv. {Main.skills.Get(Skill.HIDEOUTMANAGEMENT)}"); + Main.skills.Commit(Skill.HIDEOUTMANAGEMENT, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.HIDEOUTMANAGEMENT), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_CRAFTING)} Lv. {Main.skills.Get(Skill.CRAFTING)}"); + Main.skills.Commit(Skill.CRAFTING, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.CRAFTING), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_HEAVYVESTS)} Lv. {Main.skills.Get(Skill.HEAVYVESTS)}"); + Main.skills.Commit(Skill.HEAVYVESTS, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.HEAVYVESTS), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_LIGHTVESTS)} Lv. {Main.skills.Get(Skill.LIGHTVESTS)}"); + Main.skills.Commit(Skill.LIGHTVESTS, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.LIGHTVESTS), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_LMG)} Lv. {Main.skills.Get(Skill.LMG)}"); + Main.skills.Commit(Skill.LMG, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.LMG), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_ASSAULT)} Lv. {Main.skills.Get(Skill.ASSAULT)}"); + Main.skills.Commit(Skill.ASSAULT, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.ASSAULT), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_PISTOL)} Lv. {Main.skills.Get(Skill.PISTOL)}"); + Main.skills.Commit(Skill.PISTOL, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.PISTOL), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_PERCEPTION)} Lv. {Main.skills.Get(Skill.PERCEPTION)}"); + Main.skills.Commit(Skill.PERCEPTION, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.PERCEPTION), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_SNIPER)} Lv. {Main.skills.Get(Skill.SNIPER)}"); + Main.skills.Commit(Skill.SNIPER, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.SNIPER), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_SNIPING)} Lv. {Main.skills.Get(Skill.SNIPING)}"); + Main.skills.Commit(Skill.SNIPING, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.SNIPING), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_ENDURANCE)} Lv. {Main.skills.Get(Skill.ENDURANCE)}"); + Main.skills.Commit(Skill.ENDURANCE, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.ENDURANCE), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_THROWING)} Lv. {Main.skills.Get(Skill.THROWING)}"); + Main.skills.Commit(Skill.THROWING, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.THROWING), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_CHARISMA)} Lv. {Main.skills.Get(Skill.CHARISMA)}"); + Main.skills.Commit(Skill.CHARISMA, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.CHARISMA), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_HEALTH)} Lv. {Main.skills.Get(Skill.HEALTH)}"); + Main.skills.Commit(Skill.HEALTH, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.HEALTH), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_VITALITY)} Lv. {Main.skills.Get(Skill.VITALITY)}"); + Main.skills.Commit(Skill.VITALITY, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.VITALITY), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_METABOLISM)} Lv. {Main.skills.Get(Skill.METABOLISM)}"); + Main.skills.Commit(Skill.METABOLISM, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.METABOLISM), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_IMMUNITY)} Lv. {Main.skills.Get(Skill.IMMUNITY)}"); + Main.skills.Commit(Skill.IMMUNITY, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.IMMUNITY), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_SURGERY)} Lv. {Main.skills.Get(Skill.SURGERY)}"); + Main.skills.Commit(Skill.SURGERY, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.SURGERY), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_INTELLECT)} Lv. {Main.skills.Get(Skill.INTELLECT)}"); + Main.skills.Commit(Skill.INTELLECT, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.INTELLECT), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_ATTENTION)} Lv. {Main.skills.Get(Skill.ATTENTION)}"); + Main.skills.Commit(Skill.ATTENTION, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.ATTENTION), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_REVOLVER)} Lv. {Main.skills.Get(Skill.REVOLVER)}"); + Main.skills.Commit(Skill.REVOLVER, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.REVOLVER), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_SHOTGUN)} Lv. {Main.skills.Get(Skill.SHOTGUN)}"); + Main.skills.Commit(Skill.SHOTGUN, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.SHOTGUN), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_HMG)} Lv. {Main.skills.Get(Skill.HMG)}"); + Main.skills.Commit(Skill.HMG, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.HMG), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_DMR)} Lv. {Main.skills.Get(Skill.DMR)}"); + Main.skills.Commit(Skill.DMR, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.DMR), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_AIMDRILLS)} Lv. {Main.skills.Get(Skill.AIMDRILLS)}"); + Main.skills.Commit(Skill.AIMDRILLS, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.AIMDRILLS), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_SEARCH)} Lv. {Main.skills.Get(Skill.SEARCH)}"); + Main.skills.Commit(Skill.SEARCH, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.SEARCH), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_WEAPONTREATMENT)} Lv. {Main.skills.Get(Skill.WEAPONTREATMENT)}"); + Main.skills.Commit(Skill.WEAPONTREATMENT, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.WEAPONTREATMENT), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_TROUBLESHOOTING)} Lv. {Main.skills.Get(Skill.TROUBLESHOOTING)}"); + Main.skills.Commit(Skill.TROUBLESHOOTING, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.TROUBLESHOOTING), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_COVERTMOVEMENT)} Lv. {Main.skills.Get(Skill.COVERTMOVEMENT)}"); + Main.skills.Commit(Skill.COVERTMOVEMENT, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.COVERTMOVEMENT), 0f, 51f)); + GUILayout.Label($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_SKILLS_SMG)} Lv. {Main.skills.Get(Skill.SMG)}"); + Main.skills.Commit(Skill.SMG, (int)GUILayout.HorizontalSlider(Main.skills.Get(Skill.SMG), 0f, 51f)); + GUILayout.EndScrollView(); + break; + case (int)MENUS.ITEMS: + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_ITEMS_BUTTON_TPLOOTS))) + Main.TeleportLoot(); + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_ITEMS_BUTTON_AIRDROP))) + Main.CallAirdrop(false, default(Vector3)); + + GUILayout.Label($"--- {LocalisationManager.GetString(Settings.Language, StringKey.MENU_ITEMS_INVEDITOR_TITLE)} ---"); + GUILayout.Label(LocalisationManager.GetString(Settings.Language, StringKey.MENU_ITEMS_INVEDITOR_SEARCH)); + + ItemFeatures.SetSearchQuery(GUILayout.TextField(ItemFeatures.GetSearchQuery())); + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_ITEMS_INVEDITOR_GET))) + ItemFeatures.GetItemsInInventory(); + + GUILayout.Label(LocalisationManager.GetString(Settings.Language, StringKey.MENU_ITEMS_INVEDITOR_STRINGS)); + GUILayout.TextArea(ItemFeatures.ItemStringText, new GUILayoutOption[]{GUILayout.Height(100f)}); + GUILayout.Label(LocalisationManager.GetString(Settings.Language, StringKey.MENU_ITEMS_INVEDITOR_CHANGES)); + ItemFeatures.UpdateValues( + GUILayout.TextField(ItemFeatures.Id), + GUILayout.TextField(ItemFeatures.Width), + GUILayout.TextField(ItemFeatures.Height) + ); + + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_ITEMS_INVEDITOR_BUTTON_COMMIT))) + ItemFeatures.Commit(); + + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_ITEMS_INVEDITOR_BUTTON_SETFIR))) + ItemFeatures.SetInventoryFoundInRaid(); + + GUILayout.Label($"--- {LocalisationManager.GetString(Settings.Language, StringKey.MENU_ITEMS_INVEDITOR_DUPE_TITLE)} ---"); + if (GUILayout.Button($"{LocalisationManager.GetString(Settings.Language, StringKey.MENU_ITEMS_INVEDITOR_DUPE_BUTTON_SETSTACK)}{(int)Settings.dupeStackCount}")) + ItemFeatures.DupeItemsInInventory((int)Settings.dupeStackCount); + Settings.dupeStackCount = GUILayout.HorizontalSlider(Settings.dupeStackCount, 1f, 100f); + + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_ITEMS_INVEDITOR_DUPE_BUTTON_RESETSTACK))) + ItemFeatures.ResetItemsInInventory(); + + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_ITEMS_INVEDITOR_DUPE_BUTTON_SETSTACK_FASTRUBLE))) + ItemFeatures.DupeRubles(); + + if (GUILayout.Button(LocalisationManager.GetString(Settings.Language, StringKey.MENU_ITEMS_INVEDITOR_DUPE_BUTTON_SETSTACK_FASTEUROUSD))) + ItemFeatures.DupeDollarsEuros(); + break; + } + GUI.DragWindow(); + } + } +} diff --git a/EscapeFromTarkovCheat/Utils/AllocConsoleHandler.cs b/EscapeFromTarkovCheat/Utils/AllocConsoleHandler.cs new file mode 100644 index 0000000..5f90965 --- /dev/null +++ b/EscapeFromTarkovCheat/Utils/AllocConsoleHandler.cs @@ -0,0 +1,30 @@ +using System; +using System.IO; +using System.Runtime.InteropServices; +using UnityEngine; + + +//Credits myshmeh +namespace EscapeFromTarkovCheat.Utils +{ + public static class AllocConsoleHandler + { + [DllImport("Kernel32.dll")] + private static extern bool AllocConsole(); + + [DllImport("msvcrt.dll")] + public static extern int system(string cmd); + + public static void Open() + { + AllocConsole(); + Console.SetOut(new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = true }); + Application.logMessageReceivedThreaded += (condition, stackTrace, type) => Console.WriteLine(condition + " " + stackTrace); + } + + public static void ClearAllocConsole() + { + system("CLS"); + } + } +} \ No newline at end of file diff --git a/EscapeFromTarkovCheat/Utils/BoneType.cs b/EscapeFromTarkovCheat/Utils/BoneType.cs new file mode 100644 index 0000000..b9732b1 --- /dev/null +++ b/EscapeFromTarkovCheat/Utils/BoneType.cs @@ -0,0 +1,165 @@ +using EscapeFromTarkovCheat.Utils; +using System; +using System.Linq; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Utils +{ + public enum BoneType + { + Empty = 0, + IKController, + Mesh, + Vest_0, + Vest_1, + backpack, + backpack_0, + backpack_1, + backpack_2, + razgruz, + razgruz_0, + razgruz_1, + razgruz_2, + Root_Joint, + HumanPelvis, + HumanLThigh1, + HumanLThigh2, + HumanLCalf, + HumanLFoot, + HumanLToe, + HumanRThigh1, + HumanRThigh2, + HumanRCalf, + HumanRFoot, + HumanRToe, + Bear_Feet, + USEC_Feet, + BEAR_feet_1, + weapon_holster_pistol, + HumanSpine1, + HumanGear1, + HumanGear2, + HumanGear3, + HumanGear4, + HumanGear4_1, + HumanGear5, + HumanSpine2, + HumanSpine3, + IK_S_LForearm1, + IK_S_LForearm2, + IK_S_LForearm3, + IK_S_LPalm, + IK_S_LDigit11, + IK_S_LDigit12, + IK_S_LDigit13, + IK_S_LDigit21, + IK_S_LDigit22, + IK_S_LDigit23, + IK_S_LDigit31, + IK_S_LDigit32, + IK_S_LDigit33, + IK_S_LDigit41, + IK_S_LDigit42, + IK_S_LDigit43, + IK_S_LDigit51, + IK_S_LDigit52, + IK_S_LDigit53, + XYZ, + LCollarbone_anim, + RCollarbone_anim, + RCollarbone_anim_XYZ, + Weapon_root_3rd_anim, + Weapon_root_3rd_anim_XYZ_1, + Bend_Goal_Left, + Bend_Goal_Right, + Bend_Goal_Right_XYZ_1, + HumanRibcage, + IK_LForearm1, + IK_LForearm2, + IK_LForearm3, + IK_LPalm, + IK_LDigit11, + IK_LDigit12, + IK_LDigit13, + IK_LDigit21, + IK_LDigit22, + IK_LDigit23, + IK_LDigit31, + IK_LDigit32, + IK_LDigit33, + IK_LDigit41, + IK_LDigit42, + IK_LDigit43, + IK_LDigit51, + IK_LDigit52, + IK_LDigit53, + Camera_animated, + CameraContainer, + Cam, + HumanLCollarbone, + HumanLUpperarm, + HumanLForearm1, + HumanLForearm2, + HumanLForearm3, + HumanLPalm, + HumanLDigit11, + HumanLDigit12, + HumanLDigit13, + HumanLDigit21, + HumanLDigit22, + HumanLDigit23, + HumanLDigit31, + HumanLDigit32, + HumanLDigit33, + HumanLDigit41, + HumanLDigit42, + HumanLDigit43, + HumanLDigit51, + HumanLDigit52, + HumanLDigit53, + HumanRCollarbone, + HumanRUpperarm, + HumanRForearm1, + HumanRForearm2, + HumanRForearm3, + HumanRPalm, + HumanRDigit11, + HumanRDigit12, + HumanRDigit13, + HumanRDigit21, + HumanRDigit22, + HumanRDigit23, + HumanRDigit31, + HumanRDigit32, + HumanRDigit33, + HumanRDigit41, + HumanRDigit42, + HumanRDigit43, + HumanRDigit51, + HumanRDigit52, + HumanRDigit53, + Weapon_root, + HumanNeck, + HumanHead, + HumanBackpack, + weapon_holster, + weapon_holster1, + Camera_animated_3rd + } + + public static class BonesType + { + public static Vector3 GetBonePosition(BoneType boneType) + { + var player = Main.LocalPlayer; + if (player == null || player.PlayerBody == null || player.PlayerBody.SkeletonRootJoint == null) + return Vector3.zero; + + var bone = player.PlayerBody.SkeletonRootJoint.Bones.ElementAtOrDefault((int)boneType).Value; + if (bone == null) + return Vector3.zero; + + return GameUtils.WorldPointToScreenPoint(bone.position); + } + } +} \ No newline at end of file diff --git a/EscapeFromTarkovCheat/Utils/GameUtils.cs b/EscapeFromTarkovCheat/Utils/GameUtils.cs new file mode 100644 index 0000000..b586ccb --- /dev/null +++ b/EscapeFromTarkovCheat/Utils/GameUtils.cs @@ -0,0 +1,161 @@ +using System; +using System.Linq; +using Diz.Skinning; +using EFT; +using EFT.Interactive; +using EFT.InventoryLogic; +using EFT.UI; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Utils +{ + + public static class GameUtils + { + public static float Map(float value, float sourceFrom, float sourceTo, float destinationFrom, float destinationTo) + { + return (value - sourceFrom) / (sourceTo - sourceFrom) * (destinationTo - destinationFrom) + destinationFrom; + } + public static bool IsPlayerValid(Player player) + { + return player != null && player.Transform != null && player.PlayerBones != null && player.PlayerBones.transform != null; + } + public static bool IsExfiltrationPointValid(ExfiltrationPoint lootItem) + { + return lootItem != null; + } + public static bool IsLootItemValid(LootItem lootItem) + { + return lootItem != null && lootItem.Item != null && lootItem.Item.Template != null; + } + + public static bool IsLootableContainerValid(LootableContainer lootableContainer) + { + return lootableContainer != null && lootableContainer.Template != null; + } + + public static bool IsPlayerAlive(Player player) + { + if (!IsPlayerValid(player)) + return false; + + if (player.HealthController == null) + return false; + + return player.HealthController.IsAlive; + } + public static bool IsPlayerVisible(Player player) + { + if (player == null || Camera.main == null) + return false; + + // 可视检查部位 + BifacialTransform[] pointsToCheck = { + player.PlayerBones.Head, + player.PlayerBones.Spine3, + player.PlayerBones.Pelvis + }; + + foreach (BifacialTransform point in pointsToCheck) + { + if (point == null) + continue; + + // 射线方向 + Vector3 direction = point.position - Camera.main.transform.position; + + // 射线检测 + if (!Physics.Raycast(Camera.main.transform.position, direction, out RaycastHit hit, direction.magnitude)) + { + continue; + } + + // 射线命中 + if (hit.collider.gameObject == player.gameObject) + { + return true; + } + } + + return false; + } + public static Vector3 WorldPointToScreenPoint(Vector3 worldPoint) + { + Vector3 screenPoint = Main.MainCamera.WorldToScreenPoint(worldPoint); + + screenPoint.y = Screen.height - screenPoint.y; + + return screenPoint; + } + + public static bool IsScreenPointVisible(Vector3 screenPoint) + { + return screenPoint.z > 0.01f && screenPoint.x > -5f && screenPoint.y > -5f && screenPoint.x < Screen.width && screenPoint.y < Screen.height; + } + + public static Vector3 GetBonePosByID(Player player, int id) + { + Vector3 result; + try + { + result = SkeletonBonePos(player.PlayerBones.AnimatedTransform.Original.gameObject.GetComponent().SkeletonRootJoint, id); + } + catch (Exception) + { + result = Vector3.zero; + } + return result; + } + + public static Vector3 GetBonePosByEID(Player player, BoneType eid) + { + Vector3 result; + try + { + result = SkeletonBonePos(player.PlayerBones.AnimatedTransform.Original.gameObject.GetComponent().SkeletonRootJoint, (int)eid); + } + catch (Exception) + { + result = Vector3.zero; + } + return result; + } + + public static Vector3 SkeletonBonePos(Skeleton skeleton, int id) + { + return skeleton.Bones.ElementAt(id).Value.position; + } + public static void AddConsoleLog(string log) + { + if (PreloaderUI.Instantiated) + ConsoleScreen.Log(log); + } + public static Vector3 GetTargetPosition() + { + var centerPosition = Main.LocalPlayer.Transform.position; + + if (Main.LocalPlayer.HandsController is Player.FirearmController firearmController) + { + if (Physics.Raycast(new Ray(firearmController.Fireport.position, firearmController.WeaponDirection), out RaycastHit hit, float.MaxValue)) + { + centerPosition = hit.point; + } + } + + return centerPosition; + } + public static bool IsGroundLoot(LootItem lootItem) + { + return lootItem.GetComponent() == null; + } + public static bool IsInteractableLoot(LootItem lootItem) + { + var collider = lootItem.GetComponent(); + return collider != null && collider.enabled; + } + public static bool IsInventoryItemValid(Item item) + { + return item != null && item.Template != null; + } + } +} \ No newline at end of file diff --git a/EscapeFromTarkovCheat/Utils/Render.cs b/EscapeFromTarkovCheat/Utils/Render.cs new file mode 100644 index 0000000..23d17c5 --- /dev/null +++ b/EscapeFromTarkovCheat/Utils/Render.cs @@ -0,0 +1,158 @@ +/** + * Render class Credit to ZAT from Unknowncheats + * https://www.unknowncheats.me/forum/members/562321.html + */ + +using System.Collections.Generic; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Utils +{ + public static class Render + { + public static Material DrawMaterial = new Material(Shader.Find("Hidden/Internal-Colored")); + + public static GUIStyle StringStyle { get; set; } = new GUIStyle(GUI.skin.label); + private class RingArray + { + public Vector2[] Positions { get; private set; } + + public RingArray(int numSegments) + { + Positions = new Vector2[numSegments]; + var stepSize = 360f / numSegments; + for (int i = 0; i < numSegments; i++) + { + var rad = Mathf.Deg2Rad * stepSize * i; + Positions[i] = new Vector2(Mathf.Sin(rad), Mathf.Cos(rad)); + } + } + } + + private static Dictionary ringDict = new Dictionary(); + + public static Color Color + { + get { return GUI.color; } + set { GUI.color = value; } + } + + public static void DrawLine(Vector2 from, Vector2 to, float thickness, Color color) + { + Color = color; + DrawLine(from, to, thickness); + } + public static void DrawLine(Vector2 from, Vector2 to, float thickness) + { + var delta = (to - from).normalized; + var angle = Mathf.Atan2(delta.y, delta.x) * Mathf.Rad2Deg; + GUIUtility.RotateAroundPivot(angle, from); + DrawBox(from, Vector2.right * (from - to).magnitude, thickness, false); + GUIUtility.RotateAroundPivot(-angle, from); + } + + public static void DrawBox(float x, float y, float w, float h, Color color) + { + DrawLine(new Vector2(x, y), new Vector2(x + w, y), 1f, color); + DrawLine(new Vector2(x, y), new Vector2(x, y + h), 1f,color); + DrawLine(new Vector2(x + w, y), new Vector2(x + w, y + h), 1f, color); + DrawLine(new Vector2(x, y + h), new Vector2(x + w, y + h), 1f, color); + } + + public static void DrawBox(Vector2 position, Vector2 size, float thickness, Color color, bool centered = true) + { + Color = color; + DrawBox(position, size, thickness, centered); + } + public static void DrawBox(Vector2 position, Vector2 size, float thickness, bool centered = true) + { + var upperLeft = centered ? position - size / 2f : position; + GUI.DrawTexture(new Rect(position.x, position.y, size.x, thickness), Texture2D.whiteTexture); + GUI.DrawTexture(new Rect(position.x, position.y, thickness, size.y), Texture2D.whiteTexture); + GUI.DrawTexture(new Rect(position.x + size.x, position.y, thickness, size.y), Texture2D.whiteTexture); + GUI.DrawTexture(new Rect(position.x, position.y + size.y, size.x + thickness, thickness), Texture2D.whiteTexture); + } + + public static void DrawCross(Vector2 position, Vector2 size, float thickness, Color color) + { + Color = color; + DrawCross(position, size, thickness); + } + public static void DrawCross(Vector2 position, Vector2 size, float thickness) + { + GUI.DrawTexture(new Rect(position.x - size.x / 2f, position.y, size.x, thickness), Texture2D.whiteTexture); + GUI.DrawTexture(new Rect(position.x, position.y - size.y / 2f, thickness, size.y), Texture2D.whiteTexture); + } + + public static void DrawDot(Vector2 position, Color color) + { + Color = color; + DrawDot(position); + } + public static void DrawDot(Vector2 position) + { + DrawBox(position - Vector2.one, Vector2.one * 2f, 1f); + } + + public static void DrawString(Vector2 position, string label, Color color, bool centered = true) + { + Color = color; + DrawString(position, label, centered); + } + public static void DrawString(Vector2 position, string label, bool centered = true) + { + var content = new GUIContent(label); + var size = StringStyle.CalcSize(content); + var upperLeft = centered ? position - size / 2f : position; + GUI.Label(new Rect(upperLeft, size), content); + } + + public static void DrawCircle(Vector2 position, float radius, int numSides, bool centered = true, float thickness = 1f) + { + DrawCircle(position, radius, numSides, Color.white, centered, thickness); + } + public static void DrawCircle(Vector2 position, float radius, int numSides, Color color, bool centered = true, float thickness = 1f) + { + RingArray arr; + if (ringDict.ContainsKey(numSides)) + arr = ringDict[numSides]; + else + arr = ringDict[numSides] = new RingArray(numSides); + + + var center = centered ? position : position + Vector2.one * radius; + + for (int i = 0; i < numSides - 1; i++) + DrawLine(center + arr.Positions[i] * radius, center + arr.Positions[i + 1] * radius, thickness, color); + + DrawLine(center + arr.Positions[0] * radius, center + arr.Positions[arr.Positions.Length - 1] * radius, thickness, color); + } + + public static void DrawSnapline(Vector3 worldpos, Color color) + { + Vector3 pos = Main.MainCamera.WorldToScreenPoint(worldpos); + pos.y = Screen.height - pos.y; + GL.PushMatrix(); + GL.Begin(1); + DrawMaterial.SetPass(0); + GL.Color(color); + GL.Vertex3(Screen.width / 2, Screen.height, 0f); + GL.Vertex3(pos.x, pos.y, 0f); + GL.End(); + GL.PopMatrix(); + } + public static void DrawBoneLine(Vector2 from, Vector2 to, float thickness, Color color) + { + Color = color; + DrawBoneLine(from, to, thickness); + } + public static void DrawBoneLine(Vector2 from, Vector2 to, float thickness) + { + var delta = (to - from).normalized; + var angle = Mathf.Atan2(delta.y, delta.x) * Mathf.Rad2Deg; + GUIUtility.RotateAroundPivot(angle, from); + DrawBox(from, Vector2.right * (from - to).magnitude, thickness, false); + GUIUtility.RotateAroundPivot(-angle, from); + } + } +} diff --git a/EscapeFromTarkovCheat/Utils/Settings.cs b/EscapeFromTarkovCheat/Utils/Settings.cs new file mode 100644 index 0000000..4d692a5 --- /dev/null +++ b/EscapeFromTarkovCheat/Utils/Settings.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using EFT.Visual; +using EscapeFromTarkovCheat.Data; +using EscapeFromTarkovCheat.Feauters; +using UnityEngine; + +namespace EscapeFromTarkovCheat.Utils +{ + class Settings + { + // Locales + internal static Locale Language = Locale.ENGLISH; + + // ESP + // Players + internal static bool DrawPlayers = true; + internal static bool DrawPlayerName = true; + internal static bool DrawPlayerHealth = false; + internal static bool DrawPlayerBox = true; + internal static bool DrawPlayerLine = true; + internal static bool DrawPlayerSkeletons = true; + internal static float DrawPlayersDistance = 200f; + + // Loot + internal static bool DrawLootItems = false; + internal static float DrawLootItemsDistance = 300f; + internal static bool DrawLootableContainers = false; + internal static float DrawLootableContainersDistance = 10f; + internal static bool DrawExfiltrationPoints = true; + + // Aimbot + internal static bool Aimbot = true; + internal static bool VisibleOnly = false; + internal static bool SilentAim = false; + internal static float AimbotSmooth = 50f; + internal static bool AimbotDrawFOV = true; + internal static float AimbotFOV = 10f; + internal static float AimbotRange = 200f; + internal static bool NoRecoil = true; + + // Miscellaneous + internal static bool GodMode = true; + internal static bool Stamina = true; + internal static bool SpeedHack = false; + internal static float SpeedAddition = 2.5f; + internal static float ExperienceAmount = 10000f; + + // Items + internal static float dupeStackCount = 2; + + // Key Bindings + internal static KeyCode InstaHeal = KeyCode.Keypad1; + internal static KeyCode KillSwitch = KeyCode.Keypad2; + internal static KeyCode TpLoots = KeyCode.Keypad3; + internal static KeyCode UnlockDoors = KeyCode.Keypad4; + internal static KeyCode IncreaseTraderStandingKey = KeyCode.Keypad5; + internal static KeyCode CallAirdrop = KeyCode.Keypad6; + internal static KeyCode TpEnemies = KeyCode.Keypad7; + internal static KeyCode AimbotKey = KeyCode.Mouse1; + + // Switches + internal static bool debug = true; + } +} \ No newline at end of file diff --git a/Managed/Accessibility.dll b/Managed/Accessibility.dll new file mode 100644 index 0000000..06df3c6 Binary files /dev/null and b/Managed/Accessibility.dll differ diff --git a/Managed/AmplifyMotion.dll b/Managed/AmplifyMotion.dll new file mode 100644 index 0000000..b5df60d Binary files /dev/null and b/Managed/AmplifyMotion.dll differ diff --git a/Managed/AnimationSystem.Recording.dll b/Managed/AnimationSystem.Recording.dll new file mode 100644 index 0000000..1088cbd Binary files /dev/null and b/Managed/AnimationSystem.Recording.dll differ diff --git a/Managed/AnimationSystem.Types.dll b/Managed/AnimationSystem.Types.dll new file mode 100644 index 0000000..7469ce2 Binary files /dev/null and b/Managed/AnimationSystem.Types.dll differ diff --git a/Managed/Assembly-CSharp-firstpass.dll b/Managed/Assembly-CSharp-firstpass.dll new file mode 100644 index 0000000..10ac1d2 Binary files /dev/null and b/Managed/Assembly-CSharp-firstpass.dll differ diff --git a/Managed/Assembly-CSharp.dll b/Managed/Assembly-CSharp.dll new file mode 100644 index 0000000..0f96742 Binary files /dev/null and b/Managed/Assembly-CSharp.dll differ diff --git a/Managed/Autodesk.Fbx.dll b/Managed/Autodesk.Fbx.dll new file mode 100644 index 0000000..466a6a0 Binary files /dev/null and b/Managed/Autodesk.Fbx.dll differ diff --git a/Managed/BSG.Unity.Wires.dll b/Managed/BSG.Unity.Wires.dll new file mode 100644 index 0000000..01eb378 Binary files /dev/null and b/Managed/BSG.Unity.Wires.dll differ diff --git a/Managed/Cinemachine.dll b/Managed/Cinemachine.dll new file mode 100644 index 0000000..6ac8a80 Binary files /dev/null and b/Managed/Cinemachine.dll differ diff --git a/Managed/Coffee.SoftMaskForUGUI.dll b/Managed/Coffee.SoftMaskForUGUI.dll new file mode 100644 index 0000000..3cd6965 Binary files /dev/null and b/Managed/Coffee.SoftMaskForUGUI.dll differ diff --git a/Managed/Comfort.Unity.dll b/Managed/Comfort.Unity.dll new file mode 100644 index 0000000..9471055 Binary files /dev/null and b/Managed/Comfort.Unity.dll differ diff --git a/Managed/Comfort.dll b/Managed/Comfort.dll new file mode 100644 index 0000000..c3e0363 Binary files /dev/null and b/Managed/Comfort.dll differ diff --git a/Managed/CommonExtensions.dll b/Managed/CommonExtensions.dll new file mode 100644 index 0000000..8a0e761 Binary files /dev/null and b/Managed/CommonExtensions.dll differ diff --git a/Managed/DOTween.Modules.dll b/Managed/DOTween.Modules.dll new file mode 100644 index 0000000..15cdbe8 Binary files /dev/null and b/Managed/DOTween.Modules.dll differ diff --git a/Managed/DOTween.dll b/Managed/DOTween.dll new file mode 100644 index 0000000..d69f616 Binary files /dev/null and b/Managed/DOTween.dll differ diff --git a/Managed/DissonanceVoip.dll b/Managed/DissonanceVoip.dll new file mode 100644 index 0000000..17e1bfd Binary files /dev/null and b/Managed/DissonanceVoip.dll differ diff --git a/Managed/FbxBuildTestAssets.dll b/Managed/FbxBuildTestAssets.dll new file mode 100644 index 0000000..83b08f3 Binary files /dev/null and b/Managed/FbxBuildTestAssets.dll differ diff --git a/Managed/FilesChecker.dll b/Managed/FilesChecker.dll new file mode 100644 index 0000000..4fbc027 Binary files /dev/null and b/Managed/FilesChecker.dll differ diff --git a/Managed/ItemComponent.Types.dll b/Managed/ItemComponent.Types.dll new file mode 100644 index 0000000..6a590e3 Binary files /dev/null and b/Managed/ItemComponent.Types.dll differ diff --git a/Managed/ItemTemplate.Types.dll b/Managed/ItemTemplate.Types.dll new file mode 100644 index 0000000..89c7c11 Binary files /dev/null and b/Managed/ItemTemplate.Types.dll differ diff --git a/Managed/JBooth.MicroSplat.Core.dll b/Managed/JBooth.MicroSplat.Core.dll new file mode 100644 index 0000000..636b1cd Binary files /dev/null and b/Managed/JBooth.MicroSplat.Core.dll differ diff --git a/Managed/LibraryLoaderUtility.dll b/Managed/LibraryLoaderUtility.dll new file mode 100644 index 0000000..9e21074 Binary files /dev/null and b/Managed/LibraryLoaderUtility.dll differ diff --git a/Managed/Meta.XR.Audio.dll b/Managed/Meta.XR.Audio.dll new file mode 100644 index 0000000..c140ee8 Binary files /dev/null and b/Managed/Meta.XR.Audio.dll differ diff --git a/Managed/Microsoft.CSharp.dll b/Managed/Microsoft.CSharp.dll new file mode 100644 index 0000000..f2eb2f1 Binary files /dev/null and b/Managed/Microsoft.CSharp.dll differ diff --git a/Managed/Mono.Data.Sqlite.dll b/Managed/Mono.Data.Sqlite.dll new file mode 100644 index 0000000..33ede19 Binary files /dev/null and b/Managed/Mono.Data.Sqlite.dll differ diff --git a/Managed/Mono.Posix.dll b/Managed/Mono.Posix.dll new file mode 100644 index 0000000..b44925e Binary files /dev/null and b/Managed/Mono.Posix.dll differ diff --git a/Managed/Mono.Security.dll b/Managed/Mono.Security.dll new file mode 100644 index 0000000..1206537 Binary files /dev/null and b/Managed/Mono.Security.dll differ diff --git a/Managed/Mono.WebBrowser.dll b/Managed/Mono.WebBrowser.dll new file mode 100644 index 0000000..f9eba37 Binary files /dev/null and b/Managed/Mono.WebBrowser.dll differ diff --git a/Managed/NLog.dll b/Managed/NLog.dll new file mode 100644 index 0000000..d7d2ee6 Binary files /dev/null and b/Managed/NLog.dll differ diff --git a/Managed/Newtonsoft.Json.UnityConverters.dll b/Managed/Newtonsoft.Json.UnityConverters.dll new file mode 100644 index 0000000..4a3c3fe Binary files /dev/null and b/Managed/Newtonsoft.Json.UnityConverters.dll differ diff --git a/Managed/Newtonsoft.Json.dll b/Managed/Newtonsoft.Json.dll new file mode 100644 index 0000000..669aefa Binary files /dev/null and b/Managed/Newtonsoft.Json.dll differ diff --git a/Managed/Novell.Directory.Ldap.dll b/Managed/Novell.Directory.Ldap.dll new file mode 100644 index 0000000..c45177b Binary files /dev/null and b/Managed/Novell.Directory.Ldap.dll differ diff --git a/Managed/Sirenix.OdinInspector.Attributes.dll b/Managed/Sirenix.OdinInspector.Attributes.dll new file mode 100644 index 0000000..4554d44 Binary files /dev/null and b/Managed/Sirenix.OdinInspector.Attributes.dll differ diff --git a/Managed/Sirenix.Serialization.Config.dll b/Managed/Sirenix.Serialization.Config.dll new file mode 100644 index 0000000..e0adf0c Binary files /dev/null and b/Managed/Sirenix.Serialization.Config.dll differ diff --git a/Managed/Sirenix.Serialization.dll b/Managed/Sirenix.Serialization.dll new file mode 100644 index 0000000..f319288 Binary files /dev/null and b/Managed/Sirenix.Serialization.dll differ diff --git a/Managed/Sirenix.Utilities.dll b/Managed/Sirenix.Utilities.dll new file mode 100644 index 0000000..6fa0c8f Binary files /dev/null and b/Managed/Sirenix.Utilities.dll differ diff --git a/Managed/System.ComponentModel.Composition.dll b/Managed/System.ComponentModel.Composition.dll new file mode 100644 index 0000000..c7f41b6 Binary files /dev/null and b/Managed/System.ComponentModel.Composition.dll differ diff --git a/Managed/System.ComponentModel.DataAnnotations.dll b/Managed/System.ComponentModel.DataAnnotations.dll new file mode 100644 index 0000000..09dfb42 Binary files /dev/null and b/Managed/System.ComponentModel.DataAnnotations.dll differ diff --git a/Managed/System.Configuration.dll b/Managed/System.Configuration.dll new file mode 100644 index 0000000..648b052 Binary files /dev/null and b/Managed/System.Configuration.dll differ diff --git a/Managed/System.Core.dll b/Managed/System.Core.dll new file mode 100644 index 0000000..62f2308 Binary files /dev/null and b/Managed/System.Core.dll differ diff --git a/Managed/System.Data.DataSetExtensions.dll b/Managed/System.Data.DataSetExtensions.dll new file mode 100644 index 0000000..d4a9161 Binary files /dev/null and b/Managed/System.Data.DataSetExtensions.dll differ diff --git a/Managed/System.Data.dll b/Managed/System.Data.dll new file mode 100644 index 0000000..5dbc8e7 Binary files /dev/null and b/Managed/System.Data.dll differ diff --git a/Managed/System.Design.dll b/Managed/System.Design.dll new file mode 100644 index 0000000..18dbcc2 Binary files /dev/null and b/Managed/System.Design.dll differ diff --git a/Managed/System.DirectoryServices.dll b/Managed/System.DirectoryServices.dll new file mode 100644 index 0000000..9c1f8c6 Binary files /dev/null and b/Managed/System.DirectoryServices.dll differ diff --git a/Managed/System.Drawing.Design.dll b/Managed/System.Drawing.Design.dll new file mode 100644 index 0000000..abc52fe Binary files /dev/null and b/Managed/System.Drawing.Design.dll differ diff --git a/Managed/System.Drawing.dll b/Managed/System.Drawing.dll new file mode 100644 index 0000000..d9e0859 Binary files /dev/null and b/Managed/System.Drawing.dll differ diff --git a/Managed/System.EnterpriseServices.dll b/Managed/System.EnterpriseServices.dll new file mode 100644 index 0000000..7e2a8bb Binary files /dev/null and b/Managed/System.EnterpriseServices.dll differ diff --git a/Managed/System.IO.Compression.FileSystem.dll b/Managed/System.IO.Compression.FileSystem.dll new file mode 100644 index 0000000..e270906 Binary files /dev/null and b/Managed/System.IO.Compression.FileSystem.dll differ diff --git a/Managed/System.IO.Compression.dll b/Managed/System.IO.Compression.dll new file mode 100644 index 0000000..32cd02b Binary files /dev/null and b/Managed/System.IO.Compression.dll differ diff --git a/Managed/System.IO.Hashing.dll b/Managed/System.IO.Hashing.dll new file mode 100644 index 0000000..c81ac7b Binary files /dev/null and b/Managed/System.IO.Hashing.dll differ diff --git a/Managed/System.Memory.dll b/Managed/System.Memory.dll new file mode 100644 index 0000000..9b9e5ed Binary files /dev/null and b/Managed/System.Memory.dll differ diff --git a/Managed/System.Net.Http.dll b/Managed/System.Net.Http.dll new file mode 100644 index 0000000..3e5f095 Binary files /dev/null and b/Managed/System.Net.Http.dll differ diff --git a/Managed/System.Numerics.dll b/Managed/System.Numerics.dll new file mode 100644 index 0000000..69747f4 Binary files /dev/null and b/Managed/System.Numerics.dll differ diff --git a/Managed/System.Runtime.CompilerServices.Unsafe.dll b/Managed/System.Runtime.CompilerServices.Unsafe.dll new file mode 100644 index 0000000..491a80a Binary files /dev/null and b/Managed/System.Runtime.CompilerServices.Unsafe.dll differ diff --git a/Managed/System.Runtime.Serialization.Formatters.Soap.dll b/Managed/System.Runtime.Serialization.Formatters.Soap.dll new file mode 100644 index 0000000..2d02548 Binary files /dev/null and b/Managed/System.Runtime.Serialization.Formatters.Soap.dll differ diff --git a/Managed/System.Runtime.Serialization.dll b/Managed/System.Runtime.Serialization.dll new file mode 100644 index 0000000..356c18c Binary files /dev/null and b/Managed/System.Runtime.Serialization.dll differ diff --git a/Managed/System.Runtime.dll b/Managed/System.Runtime.dll new file mode 100644 index 0000000..fcb17d5 Binary files /dev/null and b/Managed/System.Runtime.dll differ diff --git a/Managed/System.Security.dll b/Managed/System.Security.dll new file mode 100644 index 0000000..ce079f4 Binary files /dev/null and b/Managed/System.Security.dll differ diff --git a/Managed/System.ServiceModel.Internals.dll b/Managed/System.ServiceModel.Internals.dll new file mode 100644 index 0000000..59d009c Binary files /dev/null and b/Managed/System.ServiceModel.Internals.dll differ diff --git a/Managed/System.Transactions.dll b/Managed/System.Transactions.dll new file mode 100644 index 0000000..386751b Binary files /dev/null and b/Managed/System.Transactions.dll differ diff --git a/Managed/System.Web.ApplicationServices.dll b/Managed/System.Web.ApplicationServices.dll new file mode 100644 index 0000000..dbaf2b8 Binary files /dev/null and b/Managed/System.Web.ApplicationServices.dll differ diff --git a/Managed/System.Web.Services.dll b/Managed/System.Web.Services.dll new file mode 100644 index 0000000..3f17601 Binary files /dev/null and b/Managed/System.Web.Services.dll differ diff --git a/Managed/System.Web.dll b/Managed/System.Web.dll new file mode 100644 index 0000000..53168fd Binary files /dev/null and b/Managed/System.Web.dll differ diff --git a/Managed/System.Windows.Forms.dll b/Managed/System.Windows.Forms.dll new file mode 100644 index 0000000..d819ff0 Binary files /dev/null and b/Managed/System.Windows.Forms.dll differ diff --git a/Managed/System.Xml.Linq.dll b/Managed/System.Xml.Linq.dll new file mode 100644 index 0000000..95b9164 Binary files /dev/null and b/Managed/System.Xml.Linq.dll differ diff --git a/Managed/System.Xml.dll b/Managed/System.Xml.dll new file mode 100644 index 0000000..ad32fe3 Binary files /dev/null and b/Managed/System.Xml.dll differ diff --git a/Managed/System.dll b/Managed/System.dll new file mode 100644 index 0000000..3ce7f1b Binary files /dev/null and b/Managed/System.dll differ diff --git a/Managed/Unity.AI.Navigation.dll b/Managed/Unity.AI.Navigation.dll new file mode 100644 index 0000000..91892ab Binary files /dev/null and b/Managed/Unity.AI.Navigation.dll differ diff --git a/Managed/Unity.Burst.Unsafe.dll b/Managed/Unity.Burst.Unsafe.dll new file mode 100644 index 0000000..ac36cfa Binary files /dev/null and b/Managed/Unity.Burst.Unsafe.dll differ diff --git a/Managed/Unity.Burst.dll b/Managed/Unity.Burst.dll new file mode 100644 index 0000000..60dca04 Binary files /dev/null and b/Managed/Unity.Burst.dll differ diff --git a/Managed/Unity.Collections.LowLevel.ILSupport.dll b/Managed/Unity.Collections.LowLevel.ILSupport.dll new file mode 100644 index 0000000..638e279 Binary files /dev/null and b/Managed/Unity.Collections.LowLevel.ILSupport.dll differ diff --git a/Managed/Unity.Collections.dll b/Managed/Unity.Collections.dll new file mode 100644 index 0000000..80153e7 Binary files /dev/null and b/Managed/Unity.Collections.dll differ diff --git a/Managed/Unity.Formats.Fbx.Runtime.dll b/Managed/Unity.Formats.Fbx.Runtime.dll new file mode 100644 index 0000000..4063538 Binary files /dev/null and b/Managed/Unity.Formats.Fbx.Runtime.dll differ diff --git a/Managed/Unity.Mathematics.dll b/Managed/Unity.Mathematics.dll new file mode 100644 index 0000000..feb87c7 Binary files /dev/null and b/Managed/Unity.Mathematics.dll differ diff --git a/Managed/Unity.MemoryProfiler.dll b/Managed/Unity.MemoryProfiler.dll new file mode 100644 index 0000000..76aa0df Binary files /dev/null and b/Managed/Unity.MemoryProfiler.dll differ diff --git a/Managed/Unity.PlayableGraphVisualizer.dll b/Managed/Unity.PlayableGraphVisualizer.dll new file mode 100644 index 0000000..ef3c7ec Binary files /dev/null and b/Managed/Unity.PlayableGraphVisualizer.dll differ diff --git a/Managed/Unity.Postprocessing.Runtime.dll b/Managed/Unity.Postprocessing.Runtime.dll new file mode 100644 index 0000000..0914aa2 Binary files /dev/null and b/Managed/Unity.Postprocessing.Runtime.dll differ diff --git a/Managed/Unity.ProBuilder.Csg.dll b/Managed/Unity.ProBuilder.Csg.dll new file mode 100644 index 0000000..ee1492c Binary files /dev/null and b/Managed/Unity.ProBuilder.Csg.dll differ diff --git a/Managed/Unity.ProBuilder.KdTree.dll b/Managed/Unity.ProBuilder.KdTree.dll new file mode 100644 index 0000000..0f52f0c Binary files /dev/null and b/Managed/Unity.ProBuilder.KdTree.dll differ diff --git a/Managed/Unity.ProBuilder.Poly2Tri.dll b/Managed/Unity.ProBuilder.Poly2Tri.dll new file mode 100644 index 0000000..66d42f4 Binary files /dev/null and b/Managed/Unity.ProBuilder.Poly2Tri.dll differ diff --git a/Managed/Unity.ProBuilder.Stl.dll b/Managed/Unity.ProBuilder.Stl.dll new file mode 100644 index 0000000..ce692e7 Binary files /dev/null and b/Managed/Unity.ProBuilder.Stl.dll differ diff --git a/Managed/Unity.ProBuilder.dll b/Managed/Unity.ProBuilder.dll new file mode 100644 index 0000000..f52c6f5 Binary files /dev/null and b/Managed/Unity.ProBuilder.dll differ diff --git a/Managed/Unity.Profiling.Core.dll b/Managed/Unity.Profiling.Core.dll new file mode 100644 index 0000000..7eb991c Binary files /dev/null and b/Managed/Unity.Profiling.Core.dll differ diff --git a/Managed/Unity.Recorder.Base.dll b/Managed/Unity.Recorder.Base.dll new file mode 100644 index 0000000..53a2b59 Binary files /dev/null and b/Managed/Unity.Recorder.Base.dll differ diff --git a/Managed/Unity.Recorder.dll b/Managed/Unity.Recorder.dll new file mode 100644 index 0000000..7734f56 Binary files /dev/null and b/Managed/Unity.Recorder.dll differ diff --git a/Managed/Unity.ScriptableBuildPipeline.dll b/Managed/Unity.ScriptableBuildPipeline.dll new file mode 100644 index 0000000..09009ab Binary files /dev/null and b/Managed/Unity.ScriptableBuildPipeline.dll differ diff --git a/Managed/Unity.TextMeshPro.dll b/Managed/Unity.TextMeshPro.dll new file mode 100644 index 0000000..aff386f Binary files /dev/null and b/Managed/Unity.TextMeshPro.dll differ diff --git a/Managed/Unity.Timeline.dll b/Managed/Unity.Timeline.dll new file mode 100644 index 0000000..ecd03ba Binary files /dev/null and b/Managed/Unity.Timeline.dll differ diff --git a/Managed/UnityEngine.AIModule.dll b/Managed/UnityEngine.AIModule.dll new file mode 100644 index 0000000..bec3a2c Binary files /dev/null and b/Managed/UnityEngine.AIModule.dll differ diff --git a/Managed/UnityEngine.ARModule.dll b/Managed/UnityEngine.ARModule.dll new file mode 100644 index 0000000..23c35ac Binary files /dev/null and b/Managed/UnityEngine.ARModule.dll differ diff --git a/Managed/UnityEngine.AccessibilityModule.dll b/Managed/UnityEngine.AccessibilityModule.dll new file mode 100644 index 0000000..297e2e4 Binary files /dev/null and b/Managed/UnityEngine.AccessibilityModule.dll differ diff --git a/Managed/UnityEngine.AndroidJNIModule.dll b/Managed/UnityEngine.AndroidJNIModule.dll new file mode 100644 index 0000000..357c614 Binary files /dev/null and b/Managed/UnityEngine.AndroidJNIModule.dll differ diff --git a/Managed/UnityEngine.AnimationModule.dll b/Managed/UnityEngine.AnimationModule.dll new file mode 100644 index 0000000..737d457 Binary files /dev/null and b/Managed/UnityEngine.AnimationModule.dll differ diff --git a/Managed/UnityEngine.AssetBundleModule.dll b/Managed/UnityEngine.AssetBundleModule.dll new file mode 100644 index 0000000..ca47b48 Binary files /dev/null and b/Managed/UnityEngine.AssetBundleModule.dll differ diff --git a/Managed/UnityEngine.AudioModule.dll b/Managed/UnityEngine.AudioModule.dll new file mode 100644 index 0000000..aeea732 Binary files /dev/null and b/Managed/UnityEngine.AudioModule.dll differ diff --git a/Managed/UnityEngine.ClothModule.dll b/Managed/UnityEngine.ClothModule.dll new file mode 100644 index 0000000..d7f1053 Binary files /dev/null and b/Managed/UnityEngine.ClothModule.dll differ diff --git a/Managed/UnityEngine.ClusterInputModule.dll b/Managed/UnityEngine.ClusterInputModule.dll new file mode 100644 index 0000000..b5c5706 Binary files /dev/null and b/Managed/UnityEngine.ClusterInputModule.dll differ diff --git a/Managed/UnityEngine.ClusterRendererModule.dll b/Managed/UnityEngine.ClusterRendererModule.dll new file mode 100644 index 0000000..fa07b5c Binary files /dev/null and b/Managed/UnityEngine.ClusterRendererModule.dll differ diff --git a/Managed/UnityEngine.ContentLoadModule.dll b/Managed/UnityEngine.ContentLoadModule.dll new file mode 100644 index 0000000..fdac411 Binary files /dev/null and b/Managed/UnityEngine.ContentLoadModule.dll differ diff --git a/Managed/UnityEngine.CoreModule.dll b/Managed/UnityEngine.CoreModule.dll new file mode 100644 index 0000000..5543d8e Binary files /dev/null and b/Managed/UnityEngine.CoreModule.dll differ diff --git a/Managed/UnityEngine.CrashReportingModule.dll b/Managed/UnityEngine.CrashReportingModule.dll new file mode 100644 index 0000000..659af63 Binary files /dev/null and b/Managed/UnityEngine.CrashReportingModule.dll differ diff --git a/Managed/UnityEngine.DSPGraphModule.dll b/Managed/UnityEngine.DSPGraphModule.dll new file mode 100644 index 0000000..622a9c6 Binary files /dev/null and b/Managed/UnityEngine.DSPGraphModule.dll differ diff --git a/Managed/UnityEngine.DirectorModule.dll b/Managed/UnityEngine.DirectorModule.dll new file mode 100644 index 0000000..0db8b6a Binary files /dev/null and b/Managed/UnityEngine.DirectorModule.dll differ diff --git a/Managed/UnityEngine.GIModule.dll b/Managed/UnityEngine.GIModule.dll new file mode 100644 index 0000000..a08f0de Binary files /dev/null and b/Managed/UnityEngine.GIModule.dll differ diff --git a/Managed/UnityEngine.GameCenterModule.dll b/Managed/UnityEngine.GameCenterModule.dll new file mode 100644 index 0000000..f724d93 Binary files /dev/null and b/Managed/UnityEngine.GameCenterModule.dll differ diff --git a/Managed/UnityEngine.GridModule.dll b/Managed/UnityEngine.GridModule.dll new file mode 100644 index 0000000..e9e2926 Binary files /dev/null and b/Managed/UnityEngine.GridModule.dll differ diff --git a/Managed/UnityEngine.HotReloadModule.dll b/Managed/UnityEngine.HotReloadModule.dll new file mode 100644 index 0000000..fea479a Binary files /dev/null and b/Managed/UnityEngine.HotReloadModule.dll differ diff --git a/Managed/UnityEngine.IMGUIModule.dll b/Managed/UnityEngine.IMGUIModule.dll new file mode 100644 index 0000000..368a7c2 Binary files /dev/null and b/Managed/UnityEngine.IMGUIModule.dll differ diff --git a/Managed/UnityEngine.ImageConversionModule.dll b/Managed/UnityEngine.ImageConversionModule.dll new file mode 100644 index 0000000..1b9b875 Binary files /dev/null and b/Managed/UnityEngine.ImageConversionModule.dll differ diff --git a/Managed/UnityEngine.InputLegacyModule.dll b/Managed/UnityEngine.InputLegacyModule.dll new file mode 100644 index 0000000..1a4e19e Binary files /dev/null and b/Managed/UnityEngine.InputLegacyModule.dll differ diff --git a/Managed/UnityEngine.InputModule.dll b/Managed/UnityEngine.InputModule.dll new file mode 100644 index 0000000..591fc85 Binary files /dev/null and b/Managed/UnityEngine.InputModule.dll differ diff --git a/Managed/UnityEngine.JSONSerializeModule.dll b/Managed/UnityEngine.JSONSerializeModule.dll new file mode 100644 index 0000000..1407991 Binary files /dev/null and b/Managed/UnityEngine.JSONSerializeModule.dll differ diff --git a/Managed/UnityEngine.LocalizationModule.dll b/Managed/UnityEngine.LocalizationModule.dll new file mode 100644 index 0000000..5ff9f6d Binary files /dev/null and b/Managed/UnityEngine.LocalizationModule.dll differ diff --git a/Managed/UnityEngine.NVIDIAModule.dll b/Managed/UnityEngine.NVIDIAModule.dll new file mode 100644 index 0000000..fb22a7f Binary files /dev/null and b/Managed/UnityEngine.NVIDIAModule.dll differ diff --git a/Managed/UnityEngine.ParticleSystemModule.dll b/Managed/UnityEngine.ParticleSystemModule.dll new file mode 100644 index 0000000..73b9eeb Binary files /dev/null and b/Managed/UnityEngine.ParticleSystemModule.dll differ diff --git a/Managed/UnityEngine.PerformanceReportingModule.dll b/Managed/UnityEngine.PerformanceReportingModule.dll new file mode 100644 index 0000000..b50f083 Binary files /dev/null and b/Managed/UnityEngine.PerformanceReportingModule.dll differ diff --git a/Managed/UnityEngine.Physics2DModule.dll b/Managed/UnityEngine.Physics2DModule.dll new file mode 100644 index 0000000..0e9a897 Binary files /dev/null and b/Managed/UnityEngine.Physics2DModule.dll differ diff --git a/Managed/UnityEngine.PhysicsModule.dll b/Managed/UnityEngine.PhysicsModule.dll new file mode 100644 index 0000000..26955eb Binary files /dev/null and b/Managed/UnityEngine.PhysicsModule.dll differ diff --git a/Managed/UnityEngine.ProfilerModule.dll b/Managed/UnityEngine.ProfilerModule.dll new file mode 100644 index 0000000..fbe1d0b Binary files /dev/null and b/Managed/UnityEngine.ProfilerModule.dll differ diff --git a/Managed/UnityEngine.PropertiesModule.dll b/Managed/UnityEngine.PropertiesModule.dll new file mode 100644 index 0000000..0355c79 Binary files /dev/null and b/Managed/UnityEngine.PropertiesModule.dll differ diff --git a/Managed/UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll b/Managed/UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll new file mode 100644 index 0000000..cb8fef4 Binary files /dev/null and b/Managed/UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll differ diff --git a/Managed/UnityEngine.ScreenCaptureModule.dll b/Managed/UnityEngine.ScreenCaptureModule.dll new file mode 100644 index 0000000..46fac11 Binary files /dev/null and b/Managed/UnityEngine.ScreenCaptureModule.dll differ diff --git a/Managed/UnityEngine.SharedInternalsModule.dll b/Managed/UnityEngine.SharedInternalsModule.dll new file mode 100644 index 0000000..a95f36f Binary files /dev/null and b/Managed/UnityEngine.SharedInternalsModule.dll differ diff --git a/Managed/UnityEngine.SpriteMaskModule.dll b/Managed/UnityEngine.SpriteMaskModule.dll new file mode 100644 index 0000000..3ff828f Binary files /dev/null and b/Managed/UnityEngine.SpriteMaskModule.dll differ diff --git a/Managed/UnityEngine.SpriteShapeModule.dll b/Managed/UnityEngine.SpriteShapeModule.dll new file mode 100644 index 0000000..826b3a6 Binary files /dev/null and b/Managed/UnityEngine.SpriteShapeModule.dll differ diff --git a/Managed/UnityEngine.StreamingModule.dll b/Managed/UnityEngine.StreamingModule.dll new file mode 100644 index 0000000..41869c5 Binary files /dev/null and b/Managed/UnityEngine.StreamingModule.dll differ diff --git a/Managed/UnityEngine.SubstanceModule.dll b/Managed/UnityEngine.SubstanceModule.dll new file mode 100644 index 0000000..aead6e4 Binary files /dev/null and b/Managed/UnityEngine.SubstanceModule.dll differ diff --git a/Managed/UnityEngine.SubsystemsModule.dll b/Managed/UnityEngine.SubsystemsModule.dll new file mode 100644 index 0000000..3fd5f6f Binary files /dev/null and b/Managed/UnityEngine.SubsystemsModule.dll differ diff --git a/Managed/UnityEngine.TLSModule.dll b/Managed/UnityEngine.TLSModule.dll new file mode 100644 index 0000000..19c6689 Binary files /dev/null and b/Managed/UnityEngine.TLSModule.dll differ diff --git a/Managed/UnityEngine.TerrainModule.dll b/Managed/UnityEngine.TerrainModule.dll new file mode 100644 index 0000000..66941f0 Binary files /dev/null and b/Managed/UnityEngine.TerrainModule.dll differ diff --git a/Managed/UnityEngine.TerrainPhysicsModule.dll b/Managed/UnityEngine.TerrainPhysicsModule.dll new file mode 100644 index 0000000..3892f04 Binary files /dev/null and b/Managed/UnityEngine.TerrainPhysicsModule.dll differ diff --git a/Managed/UnityEngine.TextCoreFontEngineModule.dll b/Managed/UnityEngine.TextCoreFontEngineModule.dll new file mode 100644 index 0000000..95553b8 Binary files /dev/null and b/Managed/UnityEngine.TextCoreFontEngineModule.dll differ diff --git a/Managed/UnityEngine.TextCoreTextEngineModule.dll b/Managed/UnityEngine.TextCoreTextEngineModule.dll new file mode 100644 index 0000000..9950744 Binary files /dev/null and b/Managed/UnityEngine.TextCoreTextEngineModule.dll differ diff --git a/Managed/UnityEngine.TextRenderingModule.dll b/Managed/UnityEngine.TextRenderingModule.dll new file mode 100644 index 0000000..fefb160 Binary files /dev/null and b/Managed/UnityEngine.TextRenderingModule.dll differ diff --git a/Managed/UnityEngine.TilemapModule.dll b/Managed/UnityEngine.TilemapModule.dll new file mode 100644 index 0000000..e3ce65c Binary files /dev/null and b/Managed/UnityEngine.TilemapModule.dll differ diff --git a/Managed/UnityEngine.UI.dll b/Managed/UnityEngine.UI.dll new file mode 100644 index 0000000..96d48cf Binary files /dev/null and b/Managed/UnityEngine.UI.dll differ diff --git a/Managed/UnityEngine.UIElementsModule.dll b/Managed/UnityEngine.UIElementsModule.dll new file mode 100644 index 0000000..775fbbd Binary files /dev/null and b/Managed/UnityEngine.UIElementsModule.dll differ diff --git a/Managed/UnityEngine.UIModule.dll b/Managed/UnityEngine.UIModule.dll new file mode 100644 index 0000000..c41919e Binary files /dev/null and b/Managed/UnityEngine.UIModule.dll differ diff --git a/Managed/UnityEngine.UmbraModule.dll b/Managed/UnityEngine.UmbraModule.dll new file mode 100644 index 0000000..f18dcd3 Binary files /dev/null and b/Managed/UnityEngine.UmbraModule.dll differ diff --git a/Managed/UnityEngine.UnityAnalyticsCommonModule.dll b/Managed/UnityEngine.UnityAnalyticsCommonModule.dll new file mode 100644 index 0000000..2e09631 Binary files /dev/null and b/Managed/UnityEngine.UnityAnalyticsCommonModule.dll differ diff --git a/Managed/UnityEngine.UnityAnalyticsModule.dll b/Managed/UnityEngine.UnityAnalyticsModule.dll new file mode 100644 index 0000000..171cff6 Binary files /dev/null and b/Managed/UnityEngine.UnityAnalyticsModule.dll differ diff --git a/Managed/UnityEngine.UnityConnectModule.dll b/Managed/UnityEngine.UnityConnectModule.dll new file mode 100644 index 0000000..c261822 Binary files /dev/null and b/Managed/UnityEngine.UnityConnectModule.dll differ diff --git a/Managed/UnityEngine.UnityCurlModule.dll b/Managed/UnityEngine.UnityCurlModule.dll new file mode 100644 index 0000000..c56ce64 Binary files /dev/null and b/Managed/UnityEngine.UnityCurlModule.dll differ diff --git a/Managed/UnityEngine.UnityTestProtocolModule.dll b/Managed/UnityEngine.UnityTestProtocolModule.dll new file mode 100644 index 0000000..f4b50b3 Binary files /dev/null and b/Managed/UnityEngine.UnityTestProtocolModule.dll differ diff --git a/Managed/UnityEngine.UnityWebRequestAssetBundleModule.dll b/Managed/UnityEngine.UnityWebRequestAssetBundleModule.dll new file mode 100644 index 0000000..60ca516 Binary files /dev/null and b/Managed/UnityEngine.UnityWebRequestAssetBundleModule.dll differ diff --git a/Managed/UnityEngine.UnityWebRequestAudioModule.dll b/Managed/UnityEngine.UnityWebRequestAudioModule.dll new file mode 100644 index 0000000..b6da3f0 Binary files /dev/null and b/Managed/UnityEngine.UnityWebRequestAudioModule.dll differ diff --git a/Managed/UnityEngine.UnityWebRequestModule.dll b/Managed/UnityEngine.UnityWebRequestModule.dll new file mode 100644 index 0000000..acda3df Binary files /dev/null and b/Managed/UnityEngine.UnityWebRequestModule.dll differ diff --git a/Managed/UnityEngine.UnityWebRequestTextureModule.dll b/Managed/UnityEngine.UnityWebRequestTextureModule.dll new file mode 100644 index 0000000..7a347fa Binary files /dev/null and b/Managed/UnityEngine.UnityWebRequestTextureModule.dll differ diff --git a/Managed/UnityEngine.UnityWebRequestWWWModule.dll b/Managed/UnityEngine.UnityWebRequestWWWModule.dll new file mode 100644 index 0000000..93fc375 Binary files /dev/null and b/Managed/UnityEngine.UnityWebRequestWWWModule.dll differ diff --git a/Managed/UnityEngine.VFXModule.dll b/Managed/UnityEngine.VFXModule.dll new file mode 100644 index 0000000..7de68f1 Binary files /dev/null and b/Managed/UnityEngine.VFXModule.dll differ diff --git a/Managed/UnityEngine.VRModule.dll b/Managed/UnityEngine.VRModule.dll new file mode 100644 index 0000000..9d98627 Binary files /dev/null and b/Managed/UnityEngine.VRModule.dll differ diff --git a/Managed/UnityEngine.VehiclesModule.dll b/Managed/UnityEngine.VehiclesModule.dll new file mode 100644 index 0000000..1ff3693 Binary files /dev/null and b/Managed/UnityEngine.VehiclesModule.dll differ diff --git a/Managed/UnityEngine.VideoModule.dll b/Managed/UnityEngine.VideoModule.dll new file mode 100644 index 0000000..8f2dc4c Binary files /dev/null and b/Managed/UnityEngine.VideoModule.dll differ diff --git a/Managed/UnityEngine.VirtualTexturingModule.dll b/Managed/UnityEngine.VirtualTexturingModule.dll new file mode 100644 index 0000000..5b3e24d Binary files /dev/null and b/Managed/UnityEngine.VirtualTexturingModule.dll differ diff --git a/Managed/UnityEngine.WindModule.dll b/Managed/UnityEngine.WindModule.dll new file mode 100644 index 0000000..1d56fbd Binary files /dev/null and b/Managed/UnityEngine.WindModule.dll differ diff --git a/Managed/UnityEngine.XRModule.dll b/Managed/UnityEngine.XRModule.dll new file mode 100644 index 0000000..31c76f5 Binary files /dev/null and b/Managed/UnityEngine.XRModule.dll differ diff --git a/Managed/UnityEngine.dll b/Managed/UnityEngine.dll new file mode 100644 index 0000000..0f82d88 Binary files /dev/null and b/Managed/UnityEngine.dll differ diff --git a/Managed/bsg.componentace.compression.libs.zlib.dll b/Managed/bsg.componentace.compression.libs.zlib.dll new file mode 100644 index 0000000..d84c57e Binary files /dev/null and b/Managed/bsg.componentace.compression.libs.zlib.dll differ diff --git a/Managed/bsg.console.core.dll b/Managed/bsg.console.core.dll new file mode 100644 index 0000000..b7faffc Binary files /dev/null and b/Managed/bsg.console.core.dll differ diff --git a/Managed/bsg.microsoft.extensions.objectpool.dll b/Managed/bsg.microsoft.extensions.objectpool.dll new file mode 100644 index 0000000..a8e9bd7 Binary files /dev/null and b/Managed/bsg.microsoft.extensions.objectpool.dll differ diff --git a/Managed/bsg.system.buffers.dll b/Managed/bsg.system.buffers.dll new file mode 100644 index 0000000..2ef0171 Binary files /dev/null and b/Managed/bsg.system.buffers.dll differ diff --git a/Managed/com.nvidia.reflex.Runtime.dll b/Managed/com.nvidia.reflex.Runtime.dll new file mode 100644 index 0000000..5061402 Binary files /dev/null and b/Managed/com.nvidia.reflex.Runtime.dll differ diff --git a/Managed/kcp.dll b/Managed/kcp.dll new file mode 100644 index 0000000..3339f36 Binary files /dev/null and b/Managed/kcp.dll differ diff --git a/Managed/mscorlib.dll b/Managed/mscorlib.dll new file mode 100644 index 0000000..2a71868 Binary files /dev/null and b/Managed/mscorlib.dll differ diff --git a/Managed/netstandard.dll b/Managed/netstandard.dll new file mode 100644 index 0000000..0d38d31 Binary files /dev/null and b/Managed/netstandard.dll differ diff --git a/Managed/uLipSync.Runtime.dll b/Managed/uLipSync.Runtime.dll new file mode 100644 index 0000000..c713711 Binary files /dev/null and b/Managed/uLipSync.Runtime.dll differ diff --git a/Managed/websocket-sharp.dll b/Managed/websocket-sharp.dll new file mode 100644 index 0000000..b27e717 Binary files /dev/null and b/Managed/websocket-sharp.dll differ diff --git a/Managed/where-allocations.dll b/Managed/where-allocations.dll new file mode 100644 index 0000000..a2d7dd0 Binary files /dev/null and b/Managed/where-allocations.dll differ diff --git a/stoopid.raw/Draggable.cs b/stoopid.raw/Draggable.cs new file mode 100644 index 0000000..5b9e103 --- /dev/null +++ b/stoopid.raw/Draggable.cs @@ -0,0 +1,42 @@ +using UnityEngine; +using UnityEngine.EventSystems; + +public class Draggable : MonoBehaviour, IPointerDownHandler, IEventSystemHandler, IDragHandler +{ + private RectTransform rectTransform; + + private CanvasGroup canvasGroup; + + private Vector2 offset; + + private void Awake() + { + rectTransform = GetComponent(); + canvasGroup = GetComponent(); + } + + public void OnPointerDown(PointerEventData eventData) + { + RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, eventData.position, eventData.pressEventCamera, out offset); + } + + public void OnDrag(PointerEventData eventData) + { + if (canvasGroup != null) + { + canvasGroup.blocksRaycasts = false; + } + if (RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, eventData.position, eventData.pressEventCamera, out var localPoint)) + { + rectTransform.anchoredPosition += localPoint - offset; + } + } + + public void OnEndDrag(PointerEventData eventData) + { + if (canvasGroup != null) + { + canvasGroup.blocksRaycasts = true; + } + } +} diff --git a/stoopid.raw/GrenadeESP.cs b/stoopid.raw/GrenadeESP.cs new file mode 100644 index 0000000..9968e74 --- /dev/null +++ b/stoopid.raw/GrenadeESP.cs @@ -0,0 +1,150 @@ +using System.Collections.Generic; +using EFT.SynchronizableObjects; +using EFT.UI; +using stupid.solutions; +using stupid.solutions.Utils; +using UnityEngine; + +public class GrenadeESP : MonoBehaviour +{ + public Color grenadeColor = Color.red; + + private List grenades = new List(); + + private HashSet processedGrenades = new HashSet(); + + private HashSet processedTripwires = new HashSet(); + + private Dictionary originalGrenadeShaders = new Dictionary(); + + public static bool IsGrenadeValid(Throwable grenade) + { + return grenade != null; + } + + public void Update() + { + if (Main.GameWorld == null || Main.GameWorld.Grenades == null || !Settings.grenadeesp) + { + return; + } + grenades.Clear(); + for (int i = 0; i < Main.GameWorld.Grenades.Count; i++) + { + Throwable byIndex = Main.GameWorld.Grenades.GetByIndex(i); + if (IsGrenadeValid(byIndex)) + { + grenades.Add(byIndex); + } + } + if ((Main.GameWorld == null && processedTripwires != null) || processedGrenades != null) + { + processedTripwires.Clear(); + processedGrenades.Clear(); + } + } + + private void OnGUI() + { + if (Settings.grenadeesp && Main.GameWorld != null) + { + foreach (Throwable grenade in grenades) + { + float num = Vector3.Distance(Main.MainCamera.transform.position, grenade.transform.position); + if (!(num > Settings.DrawPlayersDistance)) + { + Vector3 vector = Camera.main.WorldToScreenPoint(grenade.transform.position); + if (vector.z > 0f) + { + vector.y = (float)Screen.height - vector.y; + Color color = ((num <= 10f) ? Color.red : new Color(1f, 0.65f, 0f)); + Render.DrawString(new Vector2(vector.x, vector.y + 15f), "! Grenade !", color); + Render.DrawString(new Vector2(vector.x, vector.y + 30f), $"{num:F1}m", color); + } + } + } + } + if (Main.GameWorld != null && Main.ActiveCamera != null) + { + ApplyGrenadeChams(); + } + if (!Settings.tripwire || !(Main.GameWorld != null)) + { + return; + } + foreach (SynchronizableObject synchronizableObject in Main.GameWorld.SynchronizableObjectLogicProcessor.GetSynchronizableObjects()) + { + if (Settings.Chams) + { + ApplyTripwireChams(synchronizableObject); + } + if (synchronizableObject.Type != SynchronizableObjectType.Tripwire) + { + continue; + } + float num2 = Vector3.Distance(Main.MainCamera.transform.position, ((Component)(object)synchronizableObject).transform.position); + if (!(num2 > Settings.DrawPlayersDistance)) + { + Vector3 vector2 = Camera.main.WorldToScreenPoint(((Component)(object)synchronizableObject).transform.position); + if (vector2.z > 0f) + { + vector2.y = (float)Screen.height - vector2.y; + Color color2 = ((num2 <= 5f) ? Color.red : new Color(1f, 0.65f, 0f)); + Render.DrawString(new Vector2(vector2.x, vector2.y + 15f), " ! Trip Wire !", color2); + Render.DrawString(new Vector2(vector2.x, vector2.y + 30f), $"{num2:F1}m", color2); + } + } + } + } + + private void ApplyGrenadeChams() + { + if (!Settings.Chams || !Settings.grenadeesp) + { + return; + } + foreach (Throwable grenade in grenades) + { + if (!processedGrenades.Contains(grenade.GetInstanceID())) + { + ApplyChams(grenade.gameObject, processedGrenades, Settings.GrenadeVisible, Settings.GrenadeHidden); + } + } + } + + private void ApplyTripwireChams(SynchronizableObject tripwire) + { + if (Settings.Chams && Settings.tripwire && !processedTripwires.Contains(((Object)(object)tripwire).GetInstanceID())) + { + ApplyChams(((Component)(object)tripwire).gameObject, processedTripwires, Settings.TripwireVisible, Settings.TripwireVisible); + } + } + + private void ApplyChams(GameObject targetObject, HashSet processedEntities, Color visible, Color hidden) + { + Renderer[] componentsInChildren = targetObject.GetComponentsInChildren(); + foreach (Renderer renderer in componentsInChildren) + { + if (!(renderer == null) && !(renderer.material == null)) + { + if (!originalGrenadeShaders.ContainsKey(renderer)) + { + originalGrenadeShaders[renderer] = renderer.material.shader; + } + Shader shader = Main.bundle.LoadAsset("Chams.shader"); + if (shader == null) + { + ConsoleScreen.Log("Failed to load Chams.shader from AssetBundle!"); + continue; + } + renderer.material.shader = shader; + renderer.material.SetColor("_ColorVisible", visible); + renderer.material.SetColor("_ColorBehind", hidden); + renderer.allowOcclusionWhenDynamic = false; + renderer.forceRenderingOff = false; + renderer.enabled = true; + } + } + processedEntities.Add(targetObject.GetInstanceID()); + } +} diff --git a/stoopid.raw/Gridmanager.cs b/stoopid.raw/Gridmanager.cs new file mode 100644 index 0000000..b1a7a94 --- /dev/null +++ b/stoopid.raw/Gridmanager.cs @@ -0,0 +1,132 @@ +using System; +using System.Reflection; +using EFT.InventoryLogic; +using EFT.UI; + +public class Gridmanager +{ + private static Type _ued1aType; + + private static ConstructorInfo _ued1aConstructor; + + static Gridmanager() + { + LoadUed1aType(); + } + + private static void LoadUed1aType() + { + try + { + Type[] types = Assembly.Load("Assembly-CSharp").GetTypes(); + foreach (Type type in types) + { + if (type.Name == "\ued6f") + { + _ued1aType = type; + ConsoleScreen.Log("Found type: \ued6f"); + break; + } + } + if (_ued1aType != null) + { + ConstructorInfo[] constructors = _ued1aType.GetConstructors(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + foreach (ConstructorInfo constructorInfo in constructors) + { + ParameterInfo[] parameters = constructorInfo.GetParameters(); + ConsoleScreen.Log($"Constructor found with {parameters.Length} parameters:"); + for (int j = 0; j < parameters.Length; j++) + { + ParameterInfo parameterInfo = parameters[j]; + ConsoleScreen.Log($"Param {j + 1}: {parameterInfo.ParameterType.FullName} ({parameterInfo.Name})"); + } + if (parameters.Length == 8 && parameters[0].ParameterType == typeof(string) && parameters[1].ParameterType == typeof(int) && parameters[2].ParameterType == typeof(int) && parameters[3].ParameterType == typeof(bool) && parameters[4].ParameterType == typeof(bool) && parameters[5].ParameterType.IsArray && parameters[6].ParameterType.Name.Contains("CompoundItem") && parameters[7].ParameterType == typeof(int)) + { + _ued1aConstructor = constructorInfo; + ConsoleScreen.Log("Located the obfuscated constructor successfully."); + break; + } + } + if (_ued1aConstructor == null) + { + ConsoleScreen.Log("Failed to locate \ued6f constructor by matching parameter types."); + } + } + else + { + ConsoleScreen.Log("Failed to find \ued6f type."); + } + } + catch (Exception ex) + { + ConsoleScreen.Log("Error during LoadUed1aType: " + ex.Message); + } + } + + public static dynamic CreateGrid(string id, int gridWidth, int gridHeight, bool canStretchVertically, bool canStretchHorizontally, CompoundItem parentItem) + { + try + { + if (_ued1aConstructor != null) + { + ItemFilter[] array = new ItemFilter[0]; + ConsoleScreen.Log($"Attempting to create new grid with ID: {id}, Width: {gridWidth}, Height: {gridHeight}"); + return _ued1aConstructor.Invoke(new object[8] { id, gridWidth, gridHeight, canStretchVertically, canStretchHorizontally, array, parentItem, -1 }); + } + ConsoleScreen.Log("Failed to create new grid. Constructor is null."); + return null; + } + catch (Exception ex) + { + ConsoleScreen.Log("Error creating grid: " + ex.Message); + return null; + } + } + + public async void ReplaceGrid(dynamic item, int newGridWidth, int newGridHeight, string newGridID = null) + { + try + { + ConsoleScreen.Log("Starting grid replacement process..."); + dynamic val = new ItemFactory().CreateItem("5c0a794586f77461c458f892"); + if (val == null) + { + ConsoleScreen.Log("Failed to create boss container."); + return; + } + ConsoleScreen.Log("Boss container created successfully."); + dynamic val2 = val.Grids.FirstOrDefault(); + if (val2 == null) + { + ConsoleScreen.Log("Failed to retrieve the boss container's grid."); + return; + } + ConsoleScreen.Log($"Boss container grid found. Grid ID: {(object)val2.ID}"); + if (!(item.Grids[0]?.ParentItem is CompoundItem compoundItem)) + { + ConsoleScreen.Log("Failed to retrieve the original parent item."); + return; + } + ConsoleScreen.Log("Original parent item retrieved successfully."); + if (item.Grids != null && item.Grids.Length > 0) + { + dynamic val3 = item.Grids[0]; + ConsoleScreen.Log("Original grid found."); + string text = val3.ID; + string text2 = (string.IsNullOrEmpty(newGridID) ? text : newGridID); + ConsoleScreen.Log("Replacing original grid with Boss container grid. Final Grid ID: " + text2); + val2.ParentItem = compoundItem; + item.Grids[0] = val2; + ConsoleScreen.Log("Successfully replaced the grid with the boss container's grid."); + } + else + { + ConsoleScreen.Log("Item does not have any grids to replace."); + } + } + catch (Exception ex) + { + ConsoleScreen.Log("Error replacing grid: " + ex.Message + "\n" + ex.StackTrace); + } + } +} diff --git a/stoopid.raw/ItemData.cs b/stoopid.raw/ItemData.cs new file mode 100644 index 0000000..7a8fb1e --- /dev/null +++ b/stoopid.raw/ItemData.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; + +[Serializable] +public class ItemData +{ + public string Id { get; set; } + + public string ShortName { get; set; } + + public string Name { get; set; } + + public string NormalizedName { get; set; } + + public List Types { get; set; } + + public int BasePrice { get; set; } + + public int? avg24hPrice { get; set; } +} diff --git a/stoopid.raw/ItemFactory.cs b/stoopid.raw/ItemFactory.cs new file mode 100644 index 0000000..3269c69 --- /dev/null +++ b/stoopid.raw/ItemFactory.cs @@ -0,0 +1,258 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using Comfort.Common; +using EFT; +using EFT.InventoryLogic; +using UnityEngine; + +public class ItemFactory +{ + public class ContainerCollection + { + private static Type _containerCollectionType; + + private static PropertyInfo _containersProperty; + + private static MethodInfo _getContainerMethod; + + private static MethodInfo _tryFindItemMethod; + + public IEnumerable Containers + { + get + { + if (_containersProperty != null) + { + return (IEnumerable)_containersProperty.GetValue(this); + } + return null; + } + } + + static ContainerCollection() + { + LoadContainerCollectionType(); + } + + private static void LoadContainerCollectionType() + { + Assembly assembly = Assembly.Load("Assembly-CSharp"); + if (assembly == null) + { + Log("Log: Failed to load Assembly-CSharp."); + return; + } + Type[] types = assembly.GetTypes(); + foreach (Type type in types) + { + if (type.Name == "\uecea") + { + _containerCollectionType = type; + break; + } + } + if (!(_containerCollectionType == null)) + { + _containersProperty = _containerCollectionType.GetProperty("Containers", BindingFlags.Instance | BindingFlags.Public); + _getContainerMethod = _containerCollectionType.GetMethod("GetContainer", BindingFlags.Instance | BindingFlags.Public); + _tryFindItemMethod = _containerCollectionType.GetMethod("TryFindItem", BindingFlags.Instance | BindingFlags.Public); + } + } + + public IContainer GetContainer(string containerId) + { + if (_getContainerMethod != null) + { + return (IContainer)_getContainerMethod.Invoke(this, new object[1] { containerId }); + } + return null; + } + + public bool TryFindItem(string itemId, out Item item) + { + item = null; + if (_tryFindItemMethod != null) + { + object[] array = new object[2] { itemId, null }; + bool result = (bool)_tryFindItemMethod.Invoke(this, array); + item = (Item)array[1]; + return result; + } + return false; + } + + public static void Log(string message) + { + using StreamWriter streamWriter = new StreamWriter(Path.Combine(Application.persistentDataPath, "log.txt"), append: true); + streamWriter.WriteLine($"{DateTime.Now}: {message}"); + } + } + + public class GridHelper + { + public LocationInGrid FindFreeSpace(Item item, dynamic grid) + { + _E374 obj = item.CalculateCellSize(); + int x = obj.X; + int y = obj.Y; + int num = grid.GridWidth; + int num2 = grid.GridHeight; + dynamic val = grid.ItemCollection; + dynamic occupiedSpaces = GetOccupiedSpaces(val); + LocationInGrid locationInGrid = TryFindLocation(x, y, num, num2, occupiedSpaces); + if (locationInGrid == null && x != y) + { + locationInGrid = TryFindLocation(y, x, num, num2, occupiedSpaces); + } + if (locationInGrid == null) + { + locationInGrid = HandleStretching(x, y, grid, num, num2); + } + return locationInGrid; + } + + private Dictionary<(int, int), bool> GetOccupiedSpaces(dynamic itemCollection) + { + Dictionary<(int, int), bool> dictionary = new Dictionary<(int, int), bool>(); + foreach (dynamic item in itemCollection.Values) + { + dynamic val = item.Position; + dynamic val2 = item.CalculateCellSize(); + int num = val2.X; + int num2 = val2.Y; + for (int i = val.X; i < val.X + num; i++) + { + for (int j = val.Y; j < val.Y + num2; j++) + { + dictionary[(i, j)] = true; + } + } + } + return dictionary; + } + + private LocationInGrid TryFindLocation(int itemWidth, int itemHeight, int gridWidth, int gridHeight, Dictionary<(int, int), bool> occupiedSpaces) + { + for (int i = 0; i <= gridWidth - itemWidth; i++) + { + for (int j = 0; j <= gridHeight - itemHeight; j++) + { + if (IsSpaceAvailable(i, j, itemWidth, itemHeight, occupiedSpaces)) + { + return new LocationInGrid(i, j, ItemRotation.Horizontal); + } + } + } + return null; + } + + private bool IsSpaceAvailable(int startX, int startY, int itemWidth, int itemHeight, Dictionary<(int, int), bool> occupiedSpaces) + { + for (int i = startX; i < startX + itemWidth; i++) + { + for (int j = startY; j < startY + itemHeight; j++) + { + if (occupiedSpaces.ContainsKey((i, j))) + { + return false; + } + } + } + return true; + } + + private LocationInGrid HandleStretching(int itemWidth, int itemHeight, dynamic grid, int gridWidth, int gridHeight) + { + if (grid.CanStretchHorizontally && gridHeight >= gridWidth + itemWidth) + { + return new LocationInGrid(gridWidth, 0, ItemRotation.Horizontal); + } + if (grid.CanStretchVertically && (itemWidth <= gridWidth || grid.CanStretchHorizontally)) + { + return new LocationInGrid(0, gridHeight, ItemRotation.Vertical); + } + return null; + } + } + + private static string _logFilePath; + + private static Type _itemFactoryType; + + private static MethodInfo _createItemMethod; + + private static object _singletonInstance; + + static ItemFactory() + { + LoadItemFactoryType(); + } + + private static void LoadItemFactoryType() + { + Assembly assembly = Assembly.Load("Assembly-CSharp"); + if (assembly == null) + { + return; + } + Type[] types = assembly.GetTypes(); + foreach (Type type in types) + { + _createItemMethod = type.GetMethod("CreateItem", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (_createItemMethod != null) + { + _itemFactoryType = type; + break; + } + } + if (!(_itemFactoryType == null)) + { + PropertyInfo property = typeof(Singleton<>).MakeGenericType(_itemFactoryType).GetProperty("Instance", BindingFlags.Static | BindingFlags.Public); + if (property != null) + { + _singletonInstance = property.GetValue(null); + } + } + } + + public Item CreateItem(string id) + { + if (_createItemMethod == null || _singletonInstance == null) + { + return null; + } + string text = MongoID.Generate(); + object[] parameters = new object[3] { text, id, null }; + object obj = _createItemMethod.Invoke(_singletonInstance, parameters); + if (obj != null) + { + return (Item)obj; + } + return null; + } + + public Item CreateItemWithParent(string itemId, string parentId) + { + if (_createItemMethod == null || _singletonInstance == null) + { + return null; + } + string text = ((!string.IsNullOrEmpty(parentId)) ? parentId : ((string)MongoID.Generate())); + object[] parameters = new object[3] { text, itemId, null }; + object obj = _createItemMethod.Invoke(_singletonInstance, parameters); + if (obj != null) + { + return (Item)obj; + } + return null; + } + + public static void Log(string message) + { + _logFilePath = Path.Combine(Application.persistentDataPath, "log.txt"); + using StreamWriter streamWriter = new StreamWriter(_logFilePath, append: true); + streamWriter.WriteLine($"{DateTime.Now}: {message}"); + } +} diff --git a/stoopid.raw/Logger.cs b/stoopid.raw/Logger.cs new file mode 100644 index 0000000..488d1a2 --- /dev/null +++ b/stoopid.raw/Logger.cs @@ -0,0 +1,51 @@ +using System; +using System.IO; +using UnityEngine; + +public static class Logger +{ + public enum LogLevel + { + Info, + Warning, + Error + } + + private static readonly string logFilePath = Path.Combine(Application.persistentDataPath, "log3.txt"); + + public static void Log(string message, LogLevel level = LogLevel.Info) + { + try + { + WriteLogToFile(FormatLogMessage(message, level)); + } + catch (Exception ex) + { + Debug.LogError("Failed to log message: " + ex.Message); + } + } + + private static string FormatLogMessage(string message, LogLevel level) + { + string arg = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + return $"{arg} [{level}] {message}"; + } + + private static void WriteLogToFile(string message) + { + using StreamWriter streamWriter = new StreamWriter(logFilePath, append: true); + streamWriter.WriteLine(message); + } + + public static void ClearLog() + { + try + { + File.Delete(logFilePath); + } + catch (Exception ex) + { + Debug.LogError("Failed to clear log file: " + ex.Message); + } + } +} diff --git a/stoopid.raw/Menu2.cs b/stoopid.raw/Menu2.cs new file mode 100644 index 0000000..282ecd0 --- /dev/null +++ b/stoopid.raw/Menu2.cs @@ -0,0 +1,6283 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Threading.Tasks; +using Comfort.Common; +using EFT; +using EFT.Bots; +using EFT.Counters; +using EFT.Interactive; +using EFT.InventoryLogic; +using EFT.UI; +using EFT.Weather; +using Newtonsoft.Json; +using stupid.solutions; +using stupid.solutions.Data; +using stupid.solutions.Features; +using stupid.solutions.stupid.solutions.enums; +using stupid.solutions.Utils; +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +public class Menu2 : MonoBehaviour +{ + private enum SaveType + { + File, + List + } + + private enum KeybindType + { + ClearCache, + Skill, + Aimbot, + UnlockDoors, + teleportitem, + killall, + tpall, + instaheal, + speedhack, + flyhack + } + + public class SlotData + { + public string SlotName { get; set; } + + public string ContainedItemId { get; set; } + + public string ContainedItemName { get; set; } + + public string ContainedItemShortName { get; set; } + } + + public class BackpackItemData + { + public string ItemId { get; set; } + + public string ItemName { get; set; } + + public string ItemShortName { get; set; } + + public List Slots { get; set; } = new List(); + } + + public enum ColorCategory + { + ItemESP, + ESP, + Aimbot, + Chams + } + + [StructLayout(LayoutKind.Auto)] + [CompilerGenerated] + private struct _003CSpawnSelectedPreset_003Ed__388 : IAsyncStateMachine + { + private static class _003C_003Eo__388 + { + public static CallSite> _003C_003Ep__0; + + public static CallSite> _003C_003Ep__1; + + public static CallSite> _003C_003Ep__2; + + public static CallSite> _003C_003Ep__3; + } + + public int _003C_003E1__state; + + public AsyncTaskMethodBuilder _003C_003Et__builder; + + public Menu2 _003C_003E4__this; + + private Dictionary _003CslotsDictionary_003E5__2; + + private ItemFactory _003CitemFactory_003E5__3; + + private object _003Citem_003E5__4; + + private IEnumerator _003C_003E7__wrap4; + + private TaskAwaiter _003C_003Eu__1; + + private object _003C_003Eu__2; + + private void MoveNext() + { + int num = _003C_003E1__state; + Menu2 CS_0024_003C_003E8__locals6 = _003C_003E4__this; + try + { + if (num == 0) + { + goto IL_033e; + } + dynamic val; + if (num == 1) + { + val = _003C_003Eu__2; + _003C_003Eu__2 = null; + num = (_003C_003E1__state = -1); + goto IL_0726; + } + if (string.IsNullOrEmpty(CS_0024_003C_003E8__locals6.selectedPresetName) || CS_0024_003C_003E8__locals6.pullItemPresets == null || CS_0024_003C_003E8__locals6.pullItemPresets.templateList == null) + { + ConsoleScreen.Log("No preset selected or presets list is empty."); + } + else + { + TemplateData templateData = CS_0024_003C_003E8__locals6.pullItemPresets.templateList.FirstOrDefault((TemplateData template) => template.PresetName == CS_0024_003C_003E8__locals6.selectedPresetName); + if (templateData == null) + { + ConsoleScreen.Log("Selected preset not found in the list."); + } + else + { + ConsoleScreen.Log("Spawning preset: " + templateData.PresetName); + KeyValuePair keyValuePair = templateData.ItemTemplate.FirstOrDefault(); + if (keyValuePair.Value == null) + { + ConsoleScreen.Log("No item template found for the selected preset."); + } + else + { + string key = keyValuePair.Key; + _003CslotsDictionary_003E5__2 = keyValuePair.Value.Slots; + _003CitemFactory_003E5__3 = new ItemFactory(); + _003Citem_003E5__4 = _003CitemFactory_003E5__3.CreateItem(key); + if (!(((dynamic)_003Citem_003E5__4 == null) ? true : false)) + { + ((dynamic)_003Citem_003E5__4).SpawnedInSession = true; + dynamic val2 = ((dynamic)_003Citem_003E5__4).AllSlots; + if (val2 != null) + { + _003C_003E7__wrap4 = ((IEnumerable)val2).GetEnumerator(); + goto IL_033e; + } + ConsoleScreen.Log("No slots found for the main item."); + goto IL_0587; + } + ConsoleScreen.Log("Failed to create the main item from the template."); + } + } + } + goto end_IL_000e; + IL_0587: + val = CS_0024_003C_003E8__locals6.AddItemToBackpack((dynamic)_003Citem_003E5__4).GetAwaiter(); + if (!(bool)val.IsCompleted) + { + num = (_003C_003E1__state = 1); + _003C_003Eu__2 = val; + ICriticalNotifyCompletion awaiter = val as ICriticalNotifyCompletion; + if (awaiter == null) + { + INotifyCompletion awaiter2 = (INotifyCompletion)(object)val; + _003C_003Et__builder.AwaitOnCompleted(ref awaiter2, ref this); + awaiter2 = null; + } + else + { + _003C_003Et__builder.AwaitUnsafeOnCompleted(ref awaiter, ref this); + } + awaiter = null; + return; + } + goto IL_0726; + IL_0726: + val.GetResult(); + goto end_IL_000e; + IL_033e: + try + { + if (num != 0) + { + goto IL_0545; + } + TaskAwaiter awaiter3 = _003C_003Eu__1; + _003C_003Eu__1 = default(TaskAwaiter); + num = (_003C_003E1__state = -1); + goto IL_053e; + IL_053e: + awaiter3.GetResult(); + goto IL_0545; + IL_0545: + if (_003C_003E7__wrap4.MoveNext()) + { + dynamic current = _003C_003E7__wrap4.Current; + string text = current.FullId; + if (_003CslotsDictionary_003E5__2.TryGetValue(text, out var value)) + { + string itemId = value.ItemId; + Item item = _003CitemFactory_003E5__3.CreateItem(itemId); + item.SpawnedInSession = true; + if (item != null) + { + try + { + current.AddWithoutRestrictions(item); + ConsoleScreen.Log("Added component item " + itemId + " to slot '" + text + "'."); + } + catch (Exception ex) + { + ConsoleScreen.Log("Error adding component to slot '" + text + "': " + ex.Message); + } + } + else + { + ConsoleScreen.Log("Failed to create component item with ID " + itemId + "."); + } + } + awaiter3 = Task.Delay(10).GetAwaiter(); + if (!awaiter3.IsCompleted) + { + num = (_003C_003E1__state = 0); + _003C_003Eu__1 = awaiter3; + _003C_003Et__builder.AwaitUnsafeOnCompleted(ref awaiter3, ref this); + return; + } + goto IL_053e; + } + } + finally + { + if (num < 0 && _003C_003E7__wrap4 is IDisposable disposable) + { + disposable.Dispose(); + } + } + _003C_003E7__wrap4 = null; + goto IL_0587; + end_IL_000e:; + } + catch (Exception exception) + { + _003C_003E1__state = -2; + _003CslotsDictionary_003E5__2 = null; + _003CitemFactory_003E5__3 = null; + _003Citem_003E5__4 = null; + _003C_003Et__builder.SetException(exception); + return; + } + _003C_003E1__state = -2; + _003CslotsDictionary_003E5__2 = null; + _003CitemFactory_003E5__3 = null; + _003Citem_003E5__4 = null; + _003C_003Et__builder.SetResult(); + } + + void IAsyncStateMachine.MoveNext() + { + //ILSpy generated this explicit interface implementation from .override directive in MoveNext + this.MoveNext(); + } + + [DebuggerHidden] + private void SetStateMachine(IAsyncStateMachine stateMachine) + { + _003C_003Et__builder.SetStateMachine(stateMachine); + } + + void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine stateMachine) + { + //ILSpy generated this explicit interface implementation from .override directive in SetStateMachine + this.SetStateMachine(stateMachine); + } + } + + private QuestModule questModule; + + private AILister aILister; + + [SerializeField] + public GameObject menu; + + [SerializeField] + public GameObject menuBar; + + [SerializeField] + public GameObject watermark; + + [SerializeField] + public GameObject watermarkmagicbullet; + + [SerializeField] + public GameObject aimbotPanel; + + [SerializeField] + public GameObject playerESPPanel; + + [SerializeField] + public GameObject itemESPPanel; + + [SerializeField] + public GameObject miscOptionsPanel; + + [SerializeField] + public GameObject settingsPanel; + + [SerializeField] + public GameObject itemspawnpanel; + + [SerializeField] + public GameObject aispawnpanel; + + [SerializeField] + public Button aimbotButton; + + [SerializeField] + public Button playerESPButton; + + [SerializeField] + public Button itemESPButton; + + [SerializeField] + public Button miscOptionsButton; + + [SerializeField] + public Button settingsButton; + + [SerializeField] + public Toggle aimbotToggle; + + [SerializeField] + public TMP_Text aimbotSmoothLabel; + + [SerializeField] + public Slider aimbotSmoothSlider; + + [SerializeField] + public Toggle aimbotDrawFOVToggle; + + [SerializeField] + public TMP_Text aimbotFOVLabel; + + [SerializeField] + public Slider aimbotFOVSlider; + + [SerializeField] + public Toggle noRecoilToggle; + + [SerializeField] + public Toggle crosshairToggle; + + [SerializeField] + public Toggle silentAimToggle; + + [SerializeField] + public Toggle silentTargetLinesToggle; + + [SerializeField] + public Toggle instahitToggle; + + [SerializeField] + public Toggle ammodrawToggle; + + [SerializeField] + public TMP_Dropdown aimboneDropdown; + + [SerializeField] + public Toggle CheckVisibletoggle; + + [SerializeField] + public Toggle MagicBulletToggle; + + [SerializeField] + public Toggle infiniteammo; + + [SerializeField] + public Toggle tracers; + + [SerializeField] + public Toggle hitmarkers; + + [SerializeField] + public Toggle drawPlayersToggle; + + [SerializeField] + public Toggle drawPlayerBoxToggle; + + [SerializeField] + public Toggle drawPlayerNameToggle; + + [SerializeField] + public Toggle drawPlayerLineToggle; + + [SerializeField] + public Toggle drawPlayerHealthToggle; + + [SerializeField] + public Toggle drawWeaponToggle; + + [SerializeField] + public Toggle enableSkeletonToggle; + + [SerializeField] + public Toggle ChamsToggle; + + [SerializeField] + public Toggle drawRadarToggle; + + [SerializeField] + public Slider drawPlayersDistanceSlider; + + [SerializeField] + public TMP_Text drawplayerdistancelabel; + + [SerializeField] + public Toggle drawaimpostoggle; + + [SerializeField] + public Slider radardistanceslider; + + [SerializeField] + public TMP_Text radardistancelabel; + + [SerializeField] + public Toggle fullbright; + + [SerializeField] + public Toggle grenadeesp; + + [SerializeField] + public Toggle drawLootItemsToggle; + + [SerializeField] + public Slider drawLootItemsDistanceSlider; + + [SerializeField] + public TMP_Text drawlootitemsdistancelabel; + + [SerializeField] + public Toggle superRareItemsToggle; + + [SerializeField] + public Toggle kappaItemsToggle; + + [SerializeField] + public Toggle questItemsToggle; + + [SerializeField] + public Toggle commonItemsToggle; + + [SerializeField] + public Slider commonItemsDistanceSlider; + + [SerializeField] + public TMP_Text commonItemsdistancelabel; + + [SerializeField] + public Toggle drawLootableContainersToggle; + + [SerializeField] + public Slider drawLootableContainersDistanceSlider; + + [SerializeField] + public TMP_Text drawcontainerdistancelabel; + + [SerializeField] + public Toggle bodyESPToggle; + + [SerializeField] + public Toggle playerInventoryESPToggle; + + [SerializeField] + public Toggle searchItemToggle; + + [SerializeField] + public TMP_InputField searchItemInputField; + + [SerializeField] + public Toggle teleportItemsToggle; + + [SerializeField] + public Toggle drawExfiltrationPointsToggle; + + [SerializeField] + public Toggle flyhackToggle; + + [SerializeField] + public Toggle speedhackToggle; + + [SerializeField] + public Slider speedSlider; + + [SerializeField] + public Toggle maincamfovchanger; + + [SerializeField] + public Slider maincamfov; + + [SerializeField] + public Toggle infStaminaToggle; + + [SerializeField] + public Toggle instaHealToggle; + + [SerializeField] + public Toggle thermalVisionToggle; + + [SerializeField] + public Toggle godmodeToggle; + + [SerializeField] + public Toggle instaSearchToggle; + + [SerializeField] + public Toggle noVisorToggle; + + [SerializeField] + public Toggle flaresToggle; + + [SerializeField] + public Toggle noJamToggle; + + [SerializeField] + public Toggle fireRateToggle; + + [SerializeField] + public Toggle farreachtoggle; + + [SerializeField] + public Toggle invisibletoggle; + + [SerializeField] + public Toggle showitemspawnmenu; + + [SerializeField] + public Toggle weaponchams; + + [SerializeField] + public Button spawnitembutton; + + [SerializeField] + public Button spawnbossbutton; + + [SerializeField] + public Button addxpsessionbutton; + + [SerializeField] + public Button completequestbutton; + + [SerializeField] + public Slider xpslider; + + [SerializeField] + public TMP_Text xpsliderlabel; + + [SerializeField] + public Toggle tppmc; + + [SerializeField] + public Toggle tpboss; + + [SerializeField] + public Toggle alwayssurvived; + + public static string publicSearchString = "Grenade"; + + public static string itemidstring = ""; + + public static string spawnid = ""; + + [SerializeField] + public Button clearCacheKeyButton; + + [SerializeField] + public TMP_Text clearCacheKeyLabel; + + [SerializeField] + public Button skillKeyButton; + + [SerializeField] + public TMP_Text skillKeyLabel; + + [SerializeField] + public Button aimbotKeyButton; + + [SerializeField] + public TMP_Text aimbotKeyLabel; + + [SerializeField] + public Button unlockDoorsKeyButton; + + [SerializeField] + public TMP_Text unlockDoorsKeyLabel; + + [SerializeField] + public Button teleportitembutton; + + [SerializeField] + public TMP_Text teleportitemlabel; + + [SerializeField] + public Button killallbutton; + + [SerializeField] + public TMP_Text killalllabel; + + [SerializeField] + public Button tpallkeybutton; + + [SerializeField] + public TMP_Text tpallkeylabel; + + [SerializeField] + public Button instahealkeybutton; + + [SerializeField] + public TMP_Text instahealkeylabel; + + [SerializeField] + private GameObject itembuttontemplate; + + [SerializeField] + private Transform buttonContainer; + + [SerializeField] + private TMP_InputField searchInputField; + + [SerializeField] + private ScrollRect scrollRect; + + [SerializeField] + public TMP_Text iteminfotext; + + [SerializeField] + public Toggle sicc; + + [SerializeField] + public Toggle thicc; + + [SerializeField] + public Toggle ammobox; + + [SerializeField] + public Toggle fillraidbp; + + [SerializeField] + public Toggle bypassrestrictions; + + [SerializeField] + private Transform traderbuttonContainer; + + [SerializeField] + private ScrollRect traderscrollRect; + + [SerializeField] + private Slider traderreputationSlider; + + [SerializeField] + private Button applyTraderrepButton; + + [SerializeField] + public GameObject traderreppanel; + + [SerializeField] + public TMP_Text traderinfotext; + + [SerializeField] + public TMP_Text traderreptoaddvalue; + + [SerializeField] + private Transform skillButtonContainer; + + [SerializeField] + private ScrollRect skillScrollRect; + + [SerializeField] + private TMP_Text skillInfoText; + + [SerializeField] + private TMP_Text skillLevelToAddText; + + [SerializeField] + private Slider skillLevelSlider; + + [SerializeField] + private Button applySkillButton; + + [SerializeField] + public GameObject skillspanel; + + [SerializeField] + private Transform presetButtonContainer; + + [SerializeField] + private ScrollRect presetScrollRect; + + [SerializeField] + private TMP_Text presetInfoText; + + [SerializeField] + private Button spawnpresetitembutton; + + [SerializeField] + private GameObject presetsPanel; + + [SerializeField] + private TMP_InputField searchInputFieldTemplates; + + [SerializeField] + public GameObject updatepanel; + + [SerializeField] + private Button closeupdatebutton; + + [SerializeField] + private TMP_Text updateinfo; + + [SerializeField] + public Toggle stimsItemsToggle; + + [SerializeField] + public TMP_InputField TPItemInputField; + + [SerializeField] + public Toggle superrareTPToggle; + + [SerializeField] + public Toggle KappaTPToggle; + + [SerializeField] + public Toggle QuestTPToggle; + + [SerializeField] + public Toggle StimsTPToggle; + + [SerializeField] + public Toggle SearchTPToggle; + + [SerializeField] + private Button saveprimaryweapon; + + [SerializeField] + private Button loadfromfilebutton; + + [SerializeField] + public Toggle autofillslots; + + [SerializeField] + public GameObject aiButtonTemplate; + + [SerializeField] + public Transform aiButtonContainer; + + [SerializeField] + public TMP_Text aiInfoText; + + [SerializeField] + public TMP_InputField aiSearchBar; + + [SerializeField] + public ScrollRect aiScrollRect; + + [SerializeField] + public GameObject helppanel; + + [SerializeField] + private Button closehelpbutton; + + [SerializeField] + private Button openhelpbutton; + + [SerializeField] + public Toggle QuestESP; + + [SerializeField] + public Toggle QuestDescription; + + [SerializeField] + public Toggle SimplifiedStrings; + + [SerializeField] + public Toggle DrawOutline; + + [SerializeField] + public Toggle DrawTripWires; + + [SerializeField] + public Toggle Artillery; + + [SerializeField] + public Slider SkeletonUpdateSlider; + + [SerializeField] + public Slider FONTSIZE; + + [SerializeField] + public TMP_Text FONTSIZETXT; + + [SerializeField] + public TMP_Text SkeletonUpdateSliderText; + + [SerializeField] + public Toggle DrawWatermark; + + [SerializeField] + public Toggle DurabilityExploit; + + [SerializeField] + public Toggle DrawHideoutItems; + + [SerializeField] + public Toggle DrawWishlistItems; + + [SerializeField] + public Toggle DrawItemValue; + + [SerializeField] + public Toggle filtersuperrare; + + [SerializeField] + public Toggle filterkappa; + + [SerializeField] + public Toggle filterquest; + + [SerializeField] + public Toggle filterwishlist; + + [SerializeField] + public Toggle filterstim; + + [SerializeField] + public Toggle filterhideout; + + [SerializeField] + public Toggle filtervalue; + + [SerializeField] + public Slider filtervalueslider; + + [SerializeField] + public TMP_Text filtervalueslidertext; + + [SerializeField] + public Button addtowishlist; + + [SerializeField] + public Button Refresh; + + [SerializeField] + private GameObject MainColorSettingsMenu; + + [SerializeField] + private GameObject colorButtonTemplate; + + [SerializeField] + private Transform colorButtonContainer; + + [SerializeField] + private GameObject colorSettingMenu; + + [SerializeField] + private Slider redSlider; + + [SerializeField] + private Slider greenSlider; + + [SerializeField] + private Slider blueSlider; + + [SerializeField] + private Image colorPreview; + + [SerializeField] + private Button applyColorButton; + + [SerializeField] + private TMP_Text colorNameText; + + [SerializeField] + private TMP_Dropdown categoryDropdown; + + [SerializeField] + private Button CancelColorButton; + + [SerializeField] + public Slider ESPfiltervalueslider; + + [SerializeField] + public Toggle ESPfiltervalue; + + [SerializeField] + private TMP_Text ESPfiltervaluesliderlabel; + + [SerializeField] + public Toggle ShowColorMenu; + + [SerializeField] + public Button MaxWeaponSkills; + + [SerializeField] + public Toggle TPHideoutItems; + + [SerializeField] + public Toggle TPWishlistItems; + + [SerializeField] + public Toggle TPHVItems; + + [SerializeField] + public Toggle SpoofNicknameToggle; + + [SerializeField] + public Button speedhacktogglekeybutton1; + + [SerializeField] + public TMP_Text speedhacktogglekeylabel1; + + [SerializeField] + public Button flyhacktogglekeybutton1; + + [SerializeField] + public TMP_Text flyhacktogglekeylabel1; + + [SerializeField] + public Toggle disableallinputs; + + [SerializeField] + public TMP_Text bulletspershotLabel; + + [SerializeField] + public Toggle bulletspershottoggle; + + [SerializeField] + public Slider bulletspershot; + + [SerializeField] + public Toggle bigheadstoggle; + + [SerializeField] + public Slider ItemTPRadiusSlider; + + [SerializeField] + public TMP_Text ItemTPRadiusLabel; + + [SerializeField] + private GameObject TransitPanel; + + [SerializeField] + public GameObject transitButtonTemplate; + + [SerializeField] + public Transform transitButtonContainer; + + [SerializeField] + public ScrollRect transitScrollRect; + + [SerializeField] + public TMP_Text transitInfoText; + + [SerializeField] + public Button applyTransitButton; + + [SerializeField] + public Button senditemsTransitButton; + + [SerializeField] + public Button canceltransitbutton; + + [SerializeField] + public Toggle showraidsettingsmenu; + + [SerializeField] + private TMP_Text notransitstexttmp; + + [SerializeField] + private GameObject RaidSettingsPanel; + + [SerializeField] + private TMP_Dropdown botAmountDropdown; + + [SerializeField] + private TMP_Dropdown botDifficultyDropdown; + + [SerializeField] + private Toggle taggedAndCursedToggle; + + [SerializeField] + private Toggle scavwartoggle; + + [SerializeField] + private Toggle metabolismDisabledToggle; + + [SerializeField] + private TMP_Dropdown windTypeDropdown; + + [SerializeField] + private TMP_Dropdown timeFlowTypeDropdown; + + [SerializeField] + private TMP_Dropdown cloudinessTypeDropdown; + + [SerializeField] + private TMP_Dropdown rainTypeDropdown; + + [SerializeField] + public Toggle modifyraidsettingstoggle; + + [SerializeField] + private GameObject EntityPanel; + + [SerializeField] + private Transform entityButtonContainer; + + [SerializeField] + private GameObject entityButtonTemplate; + + [SerializeField] + private TMP_Text entityInfoText; + + [SerializeField] + private ScrollRect entityScrollRect; + + [SerializeField] + private Button killEntityButton; + + [SerializeField] + private Button healEntityButton; + + [SerializeField] + private Button tpEntityToCrosshairButton; + + [SerializeField] + private Button makebraindeadbutton; + + [SerializeField] + private Button GiveBotBlickyKit; + + [SerializeField] + private Button GiveAllBotsBlickyKitButton; + + [SerializeField] + private TMP_Text noentitiestexttmp; + + [SerializeField] + public Toggle makeallbotsfriendlytoggle; + + [Header("Main Advanced Item Spawning Stuff")] + [SerializeField] + private Button OpenADvancedItemSpawningButton; + + [SerializeField] + private GameObject advancedItemPanel; + + [SerializeField] + private Button spawnadvancedButton; + + [SerializeField] + private Button cancelButton; + + [SerializeField] + private Button refreshSlotsButton; + + [SerializeField] + private Button saveToFileButton; + + [SerializeField] + private Button saveToPresetListButton; + + [Header("Buff UI")] + [SerializeField] + private Transform buffListContainer; + + [SerializeField] + private GameObject buffButtonTemplate; + + [SerializeField] + private GameObject buffEditWindow; + + [SerializeField] + private Slider buffSlider; + + [SerializeField] + private TMP_Text buffNameText; + + [SerializeField] + private TMP_Text buffValueText; + + [SerializeField] + private Button applyBuffButton; + + [SerializeField] + private TMP_Dropdown buffTypeDropdown; + + [Header("Slot UI")] + [SerializeField] + private Transform slotListContainer; + + [SerializeField] + private GameObject slotButtonTemplate; + + [Header("Slot Item Selection UI")] + [SerializeField] + private GameObject slotItemWindow; + + [SerializeField] + private TMP_Text slotItemWindowTitle; + + [SerializeField] + private TMP_Text slotItemInfoText; + + [SerializeField] + private Transform slotCompatibleItemsContainer; + + [SerializeField] + private GameObject compatibleItemButtonTemplate; + + [SerializeField] + private Button cancelSlotButton; + + [SerializeField] + private Button applySlotButton; + + [Header("Item Save Window")] + [SerializeField] + private Button confirmSaveButton; + + [SerializeField] + private Button cancelSaveButton; + + [SerializeField] + private GameObject popupWindow; + + [SerializeField] + private TMP_InputField presetNameInput; + + private SaveType currentSaveType; + + private List cachedBuffs = new List(); + + private List<(string slotName, dynamic slotRef)> cachedSlots = new List<(string, object)>(); + + private BuffComponent currentEditingBuff; + + private string selectedSlotItemId; + + private dynamic currentEditingSlotRef; + + private string currentSlotName; + + private bool populatedTransits; + + private bool wasInGame; + + private int selectedTransitId = -1; + + private string selectedAIName; + + private string empty = ""; + + public static string TPItemInputstring = "Grenade"; + + private string selectedColorKey; + + private string selectedTraderId; + + private bool waitingForKey; + + private KeybindType currentKeybindType; + + private List ItemsList; + + public static Main main = new Main(); + + public static PullItemIDs pullItemIDs; + + private string selectedSkillName; + + private PullItemPresets pullItemPresets; + + private string selectedPresetName; + + private bool populatedtemplates; + + public static bool showmenu = false; + + public static bool closedupdate = false; + + public static bool showhelp = false; + + public bool hidspawnmenuforcolor; + + private static int entitylistcount = 0; + + private static float entitylistupdatedelay = 5f; + + private static float nextentitycachetime; + + private static string advanceditemidcache; + + private dynamic advanceditemcache; + + public bool updatep = true; + + private float debounceTime = 0.5f; + + private Coroutine debounceCoroutine; + + private float newDebounceTime = 0.5f; + + private Coroutine newDebounceCoroutine; + + private Coroutine spawnDebounceCoroutine; + + private Coroutine searchDebounceCoroutine; + + private Coroutine aisearchDebounceCoroutine; + + private Dictionary skillLevels = new Dictionary + { + { "Strength", 0 }, + { "StressResistance", 0 }, + { "MagDrills", 0 }, + { "Melee", 0 }, + { "HideoutManagement", 0 }, + { "Crafting", 0 }, + { "HeavyVests", 0 }, + { "LightVests", 0 }, + { "RecoilControl", 0 }, + { "LMG", 0 }, + { "Assault", 0 }, + { "Pistol", 0 }, + { "Perception", 0 }, + { "Sniper", 0 }, + { "Sniping", 0 }, + { "Endurance", 0 }, + { "Throwing", 0 }, + { "Charisma", 0 }, + { "BotReload", 0 }, + { "TroubleShooting", 0 }, + { "Health", 0 }, + { "Vitality", 0 }, + { "Metabolism", 0 }, + { "Immunity", 0 }, + { "Intellect", 0 }, + { "Attention", 0 }, + { "Shotgun", 0 }, + { "HMG", 0 }, + { "Launcher", 0 }, + { "DMR", 0 }, + { "AimDrills", 0 }, + { "Surgery", 0 }, + { "CovertMovement", 0 }, + { "Search", 0 }, + { "FieldMedicine", 0 }, + { "FirstAid", 0 }, + { "SMG", 0 }, + { "WeaponTreatment", 0 }, + { "Revolver", 0 }, + { "AttachedLauncher", 0 } + }; + + private Item item; + + private ItemPresetManager presetManager = new ItemPresetManager(); + + private bool saveFlag; + + private Item item12; + + private Dictionary traderIDs = new Dictionary + { + { "Prapor", "54cb50c76803fa8b248b4571" }, + { "Therapist", "54cb57776803fa99248b456e" }, + { "Fence", "579dc571d53a0658a154fbec" }, + { "Skier", "58330581ace78e27b8b10cee" }, + { "Peacekeeper", "5935c25fb3acc3127c3d8cd9" }, + { "Mechanic", "5a7c2eca46aef81a7ca2145d" }, + { "Ragman", "5ac3b934156ae10c4430e83c" }, + { "Jaeger", "5c0647fdd443bc2504c2d371" }, + { "Lighthouse Keeper", "638f541a29ffd1183d187f57" } + }; + + public static Dictionary getColor, Action setColor, string description, ColorCategory category)> ColorDictionary = new Dictionary, Action, string, ColorCategory)> + { + { + "SuperrareColor", + (() => Settings.SuperrareColor, delegate(Color value) + { + Settings.SuperrareColor = value; + }, "Super rare items Color", ColorCategory.ItemESP) + }, + { + "KappaColor", + (() => Settings.KappaColor, delegate(Color value) + { + Settings.KappaColor = value; + }, "Kappa items Color", ColorCategory.ItemESP) + }, + { + "QuestItemColor", + (() => Settings.QuestItemColor, delegate(Color value) + { + Settings.QuestItemColor = value; + }, "Quest items Color", ColorCategory.ItemESP) + }, + { + "StimItemColor", + (() => Settings.StimItemColor, delegate(Color value) + { + Settings.StimItemColor = value; + }, "Stim items Color", ColorCategory.ItemESP) + }, + { + "HideoutColor", + (() => Settings.HideoutColor, delegate(Color value) + { + Settings.HideoutColor = value; + }, "Hideout items Color", ColorCategory.ItemESP) + }, + { + "WishlistColor", + (() => Settings.WishlistColor, delegate(Color value) + { + Settings.WishlistColor = value; + }, "Wishlist items Color", ColorCategory.ItemESP) + }, + { + "SearchedColor", + (() => Settings.SearchedColor, delegate(Color value) + { + Settings.SearchedColor = value; + }, "Searched items Color", ColorCategory.ItemESP) + }, + { + "CommonItemColor", + (() => Settings.CommonItemColor, delegate(Color value) + { + Settings.CommonItemColor = value; + }, "Common items Color", ColorCategory.ItemESP) + }, + { + "USECColor", + (() => Settings.USECColor, delegate(Color value) + { + Settings.USECColor = value; + }, "USEC Color ", ColorCategory.ESP) + }, + { + "BEARColor", + (() => Settings.BEARColor, delegate(Color value) + { + Settings.BEARColor = value; + }, "BEAR Color", ColorCategory.ESP) + }, + { + "BossColor", + (() => Settings.BossandGuardColor, delegate(Color value) + { + Settings.BossandGuardColor = value; + }, "Bosses Color", ColorCategory.ESP) + }, + { + "GuardColor", + (() => Settings.GuardColor, delegate(Color value) + { + Settings.GuardColor = value; + }, "Guard Color", ColorCategory.ESP) + }, + { + "ScavColor", + (() => Settings.ScavColor, delegate(Color value) + { + Settings.ScavColor = value; + }, "Scav Color", ColorCategory.ESP) + }, + { + "ZombieColor", + (() => Settings.ZombieColor, delegate(Color value) + { + Settings.ZombieColor = value; + }, "Zombie Color", ColorCategory.ESP) + }, + { + "RogueColor", + (() => Settings.RogueColor, delegate(Color value) + { + Settings.RogueColor = value; + }, "Rogue Color", ColorCategory.ESP) + }, + { + "RaiderColor", + (() => Settings.RaiderColor, delegate(Color value) + { + Settings.RaiderColor = value; + }, "Raider Color", ColorCategory.ESP) + }, + { + "CultistColor", + (() => Settings.CultistColor, delegate(Color value) + { + Settings.CultistColor = value; + }, "Cultist Color", ColorCategory.ESP) + }, + { + "BTRColor", + (() => Settings.BTRColor, delegate(Color value) + { + Settings.BTRColor = value; + }, "BTR", ColorCategory.ESP) + }, + { + "ESPBoxColor", + (() => Settings.ESPBoxColor, delegate(Color value) + { + Settings.ESPBoxColor = value; + }, "Box ESP Hidden", ColorCategory.ESP) + }, + { + "ESPBoxVisColor", + (() => Settings.boxsightline, delegate(Color value) + { + Settings.boxsightline = value; + }, "Box ESP Visible", ColorCategory.ESP) + }, + { + "ESPLineColor", + (() => Settings.ESPLineColor, delegate(Color value) + { + Settings.ESPLineColor = value; + }, "Line ESP Hidden", ColorCategory.ESP) + }, + { + "ESPLineColorVisible", + (() => Settings.isvisibleline, delegate(Color value) + { + Settings.isvisibleline = value; + }, "Line ESP Visible", ColorCategory.ESP) + }, + { + "SkeletonColor", + (() => Settings.SkeletonColor, delegate(Color value) + { + Settings.SkeletonColor = value; + }, "Skeleton ESP Color", ColorCategory.ESP) + }, + { + "EnemyWeaponTextColor", + (() => Settings.EnemyWeaponTextColor, delegate(Color value) + { + Settings.EnemyWeaponTextColor = value; + }, "Enemy Weapon Text", ColorCategory.ESP) + }, + { + "EnemyWeaponAMMOTextColor", + (() => Settings.EnemyAmmoCounterColor, delegate(Color value) + { + Settings.EnemyAmmoCounterColor = value; + }, "Enemy Ammo Count", ColorCategory.ESP) + }, + { + "EnemyHealingTextColor", + (() => Settings.healingcolor, delegate(Color value) + { + Settings.healingcolor = value; + }, "Enemy Healing Indicator", ColorCategory.ESP) + }, + { + "TeammateColor", + (() => Settings.teammatecolor, delegate(Color value) + { + Settings.teammatecolor = value; + }, "Teammate Color", ColorCategory.ESP) + }, + { + "PlayerScavColor", + (() => Settings.playerscavcolor, delegate(Color value) + { + Settings.playerscavcolor = value; + }, "Player Scav Color", ColorCategory.ESP) + }, + { + "Selected Entity Color", + (() => Settings.SelectedEntityColor, delegate(Color value) + { + Settings.SelectedEntityColor = value; + }, "Selected Entity Color", ColorCategory.ESP) + }, + { + "CrosshairColor", + (() => Settings.CrosshairColor, delegate(Color value) + { + Settings.CrosshairColor = value; + }, "Crosshair Color", ColorCategory.Aimbot) + }, + { + "TargetSnaplineColor", + (() => Settings.TargetSnaplineColor, delegate(Color value) + { + Settings.TargetSnaplineColor = value; + }, "Aim Target snapline Color", ColorCategory.Aimbot) + }, + { + "AimFOVColor", + (() => Settings.AimFOVColor, delegate(Color value) + { + Settings.AimFOVColor = value; + }, "Aim FOV circle Color", ColorCategory.Aimbot) + }, + { + "AmmoCounterColor", + (() => Settings.AmmoCounterColor, delegate(Color value) + { + Settings.AmmoCounterColor = value; + }, "Ammo counter Color", ColorCategory.Aimbot) + }, + { + "TracerColor", + (() => Settings.TracerColor, delegate(Color value) + { + Settings.TracerColor = value; + }, "Tracers Color", ColorCategory.Aimbot) + }, + { + "HitmarkerHeadShotColor", + (() => Settings.HitmarkerHeadShotColor, delegate(Color value) + { + Settings.HitmarkerHeadShotColor = value; + }, "Hitmarker for headshots Color", ColorCategory.Aimbot) + }, + { + "HitmarkerHitColor", + (() => Settings.HitmarkerHitColor, delegate(Color value) + { + Settings.HitmarkerHitColor = value; + }, "Hitmarker for hits Color", ColorCategory.Aimbot) + }, + { + "ExfilColor", + (() => Settings.ExfilESPColor, delegate(Color value) + { + Settings.ExfilESPColor = value; + }, "Exfil Point Color", ColorCategory.ESP) + }, + { + "TransitColor", + (() => Settings.TransitPointColor, delegate(Color value) + { + Settings.TransitPointColor = value; + }, "Transit Point Color", ColorCategory.ESP) + }, + { + "PChamsHidden", + (() => Settings.PlayerChamsHidden, delegate(Color value) + { + Settings.PlayerChamsHidden = value; + }, "Player Chams Hidden", ColorCategory.Chams) + }, + { + "PChamsVisible", + (() => Settings.PlayerChamsVisible, delegate(Color value) + { + Settings.PlayerChamsVisible = value; + }, "Player Chams Visible", ColorCategory.Chams) + }, + { + "GChamsHidden", + (() => Settings.GrenadeHidden, delegate(Color value) + { + Settings.GrenadeHidden = value; + }, "Grenade Chams Hidden", ColorCategory.Chams) + }, + { + "GChamsVisible", + (() => Settings.GrenadeVisible, delegate(Color value) + { + Settings.GrenadeVisible = value; + }, "Grenade Chams Visible", ColorCategory.Chams) + }, + { + "TChamsHidden", + (() => Settings.TripwireHidden, delegate(Color value) + { + Settings.TripwireHidden = value; + }, "Tripwire Chams Hidden", ColorCategory.Chams) + }, + { + "TChamsVisible", + (() => Settings.TripwireVisible, delegate(Color value) + { + Settings.TripwireVisible = value; + }, "Tripwire Chams Visible", ColorCategory.Chams) + }, + { + "SChamsColor", + (() => Settings.SelfChamsColor, delegate(Color value) + { + Settings.SelfChamsColor = value; + }, "Self Chams Color", ColorCategory.Chams) + } + }; + + public static Player selectedEntity; + + private Dictionary activeEntityButtons = new Dictionary(); + + private void Start() + { + questModule = UnityEngine.Object.FindObjectOfType(); + aILister = UnityEngine.Object.FindObjectOfType(); + pullItemPresets = UnityEngine.Object.FindObjectOfType(); + pullItemIDs = UnityEngine.Object.FindObjectOfType(); + itembuttontemplate.SetActive(value: false); + PopulateRaidSettingsDropdowns(); + LoadSettings(); + Initialize(); + if (menu != null) + { + Canvas component = menu.GetComponent(); + if (component != null) + { + component.sortingOrder = 32767; + } + CanvasGroup component2 = menu.GetComponent(); + if (component2 != null) + { + component2.blocksRaycasts = component2.alpha > 0f; + component2.ignoreParentGroups = false; + component2.interactable = true; + } + menuBar.SetActive(value: false); + watermark.SetActive(value: false); + watermarkmagicbullet.SetActive(value: false); + helppanel.SetActive(value: false); + updatepanel.SetActive(value: true); + } + if (searchItemInputField != null) + { + searchItemInputField.onEndEdit.AddListener(OnSearchItemInputEndEdit); + searchItemInputField.onValueChanged.AddListener(OnSearchItemValueChanged); + } + if (TPItemInputField != null) + { + TPItemInputField.onEndEdit.AddListener(TPItemInputEndEdit); + TPItemInputField.onValueChanged.AddListener(TPItemValueChanged); + } + if (closeupdatebutton != null) + { + closeupdatebutton.onClick.AddListener(UpdateWindow); + } + if (openhelpbutton != null) + { + openhelpbutton.onClick.AddListener(ShowHelpPanel); + } + if (closehelpbutton != null) + { + closehelpbutton.onClick.AddListener(HideHelpPanel); + } + if (Refresh != null) + { + Refresh.onClick.AddListener(Refreshsearchupdate); + } + if (addtowishlist != null) + { + addtowishlist.onClick.AddListener(AddItemToWishList); + } + clearCacheKeyButton.onClick.AddListener(delegate + { + OnKeybindButtonClick(KeybindType.ClearCache); + }); + skillKeyButton.onClick.AddListener(delegate + { + OnKeybindButtonClick(KeybindType.Skill); + }); + aimbotKeyButton.onClick.AddListener(delegate + { + OnKeybindButtonClick(KeybindType.Aimbot); + }); + unlockDoorsKeyButton.onClick.AddListener(delegate + { + OnKeybindButtonClick(KeybindType.UnlockDoors); + }); + teleportitembutton.onClick.AddListener(delegate + { + OnKeybindButtonClick(KeybindType.teleportitem); + }); + killallbutton.onClick.AddListener(delegate + { + OnKeybindButtonClick(KeybindType.killall); + }); + tpallkeybutton.onClick.AddListener(delegate + { + OnKeybindButtonClick(KeybindType.tpall); + }); + instahealkeybutton.onClick.AddListener(delegate + { + OnKeybindButtonClick(KeybindType.instaheal); + }); + speedhacktogglekeybutton1.onClick.AddListener(delegate + { + OnKeybindButtonClick(KeybindType.speedhack); + }); + flyhacktogglekeybutton1.onClick.AddListener(delegate + { + OnKeybindButtonClick(KeybindType.flyhack); + }); + applyTraderrepButton.onClick.AddListener(OnApplyButtonClick); + applyTransitButton.onClick.AddListener(OnApplyTransitButtonClick); + senditemsTransitButton.onClick.AddListener(OnSendItemsTransitButtonClick); + canceltransitbutton.onClick.AddListener(OnCancelCountdownClick); + if (traderreputationSlider != null) + { + traderreputationSlider.value = Settings.reptoadd; + traderreputationSlider.onValueChanged.AddListener(OnSliderValueChanged); + } + MaxWeaponSkills.onClick.AddListener(MaxWeaponskill); + redSlider.onValueChanged.AddListener(OnColorSliderValueChanged); + blueSlider.onValueChanged.AddListener(OnColorSliderValueChanged); + greenSlider.onValueChanged.AddListener(OnColorSliderValueChanged); + InitializeColorSliders(); + categoryDropdown.ClearOptions(); + categoryDropdown.AddOptions(Enum.GetNames(typeof(ColorCategory)).ToList()); + categoryDropdown.onValueChanged.AddListener(delegate + { + OnCategoryDropdownChanged(); + }); + PopulateColorList(); + colorSettingMenu.SetActive(value: false); + CancelColorButton.onClick.AddListener(OnCancelColorChangeClick); + applyColorButton.onClick.AddListener(OnApplyColorButtonClick); + killEntityButton.onClick.AddListener(OnKillEntityClick); + tpEntityToCrosshairButton.onClick.AddListener(OnTeleportEntityClick); + healEntityButton.onClick.AddListener(OnHealEntityClick); + makebraindeadbutton.onClick.AddListener(onmakebraindeadclick); + GiveBotBlickyKit.onClick.AddListener(ongivebotblickykitclick); + GiveAllBotsBlickyKitButton.onClick.AddListener(ongiveallbotsblickykitclick); + PopulateTraderList(); + PopulateSkillList(); + PopulateAIMenu(); + skillLevelSlider.onValueChanged.AddListener(OnSkillLevelSliderValueChanged); + applySkillButton.onClick.AddListener(OnApplySkillButtonClick); + skillLevelSlider.value = 0f; + skillLevelToAddText.text = $"Level to Set: {skillLevelSlider.value:F0}"; + spawnpresetitembutton.onClick.AddListener(SpawnTemplateDelegate); + saveToFileButton.onClick.AddListener(delegate + { + OpenPopupSaveFile(); + }); + saveToPresetListButton.onClick.AddListener(delegate + { + OpenPopupSaveList(); + }); + confirmSaveButton.onClick.AddListener(OnConfirmSave); + cancelSaveButton.onClick.AddListener(delegate + { + popupWindow.SetActive(value: false); + }); + popupWindow.SetActive(value: false); + InitializeAimboneDropdown(); + UpdateAimbotSettingsUI(); + UpdatePlayerESPSettingsUI(); + UpdateItemESPSettingsUI(); + UpdateMiscOptionsSettingsUI(); + AddToggleListeners(); + AddSliderListeners(); + advancedItemPanel.SetActive(value: false); + OpenADvancedItemSpawningButton.onClick.AddListener(Spawnitemadvanced); + } + + private void LoadSettings() + { + UpdateAimbotSettingsUI(); + UpdatePlayerESPSettingsUI(); + UpdateItemESPSettingsUI(); + UpdateMiscOptionsSettingsUI(); + } + + private void SaveSettings() + { + Settings.SaveSettings(); + } + + public void Initialize() + { + if (aimbotButton != null) + { + aimbotButton.onClick.AddListener(ShowAimbotPanel); + } + if (playerESPButton != null) + { + playerESPButton.onClick.AddListener(ShowPlayerESPPanel); + } + if (itemESPButton != null) + { + itemESPButton.onClick.AddListener(ShowItemESPPanel); + } + if (miscOptionsButton != null) + { + miscOptionsButton.onClick.AddListener(ShowMiscOptionsPanel); + } + if (settingsButton != null) + { + settingsButton.onClick.AddListener(ShowSettingsPanel); + } + if (spawnitembutton != null) + { + spawnitembutton.onClick.AddListener(OnSpawnItemButtonClick); + } + if (saveprimaryweapon != null) + { + saveprimaryweapon.onClick.AddListener(SavePrimaryWeaponToJson); + } + if (loadfromfilebutton != null) + { + loadfromfilebutton.onClick.AddListener(LoadandSpawnitem); + } + if (spawnbossbutton != null) + { + spawnbossbutton.onClick.AddListener(SpawnBot); + } + if (addxpsessionbutton != null) + { + addxpsessionbutton.onClick.AddListener(XPAdder); + } + if (completequestbutton != null) + { + completequestbutton.onClick.AddListener(FinishQuestsWrapper); + } + if (searchInputField != null) + { + searchInputField.onEndEdit.AddListener(OnSearchTextChanged); + } + if (searchInputFieldTemplates != null) + { + searchInputFieldTemplates.onEndEdit.AddListener(OnTemplateSearchTextChanged); + } + if (aiSearchBar != null) + { + aiSearchBar.onEndEdit.AddListener(OnAISearchTextChanged); + } + HideAllPanels(); + UpdateKeybindLabels(); + } + + private void Update() + { + if (!updatep) + { + return; + } + try + { + if (!populatedTransits && LocationsFixerV2.transitPoints.Count > 0 && Main.GameWorld != null && transitButtonTemplate != null) + { + populatedTransits = true; + PopulateTransitList(); + } + if (populatedTransits && Main.GameWorld == null) + { + populatedTransits = false; + } + if (LocationsFixerV2.transitPoints.Count == 0 && transitButtonContainer.childCount >= 1 && transitButtonTemplate != null && transitButtonContainer != null) + { + PopulateTransitList(); + } + if (Main.GamePlayers.Count > 0 && entityButtonTemplate != null) + { + UpdateEntityList(); + } + if (Main.GamePlayers.Count == 0 && entityButtonContainer.childCount >= 1 && entityButtonTemplate != null && entityButtonContainer != null) + { + UpdateEntityList(); + } + if (closedupdate && watermark != null && watermarkmagicbullet != null) + { + if (Settings.MagicBullet && Settings.drawwatermark) + { + watermark.SetActive(value: false); + watermarkmagicbullet.SetActive(value: true); + } + else if (Settings.drawwatermark) + { + watermark.SetActive(value: true); + watermarkmagicbullet.SetActive(value: false); + } + else + { + watermark.SetActive(value: false); + watermarkmagicbullet.SetActive(value: false); + } + } + if (Input.GetKeyDown(KeyCode.Insert) && showmenu) + { + if (menuBar != null) + { + menuBar.SetActive(!menuBar.activeSelf); + } + ClearButtons(); + } + if (Settings.sicc) + { + Settings.ammobox = false; + } + if (Settings.ammobox) + { + Settings.sicc = false; + } + if (Settings.fillraidbp) + { + Settings.thicc = false; + } + if (Settings.thicc) + { + Settings.fillraidbp = false; + } + UpdateAimbotSettingsUI(); + UpdatePlayerESPSettingsUI(); + UpdateItemESPSettingsUI(); + UpdateMiscOptionsSettingsUI(); + if (showmenu) + { + if (itemspawnpanel != null && Settings.Itemspawnmenu) + { + if (Settings.showraidsettingsmenu) + { + Settings.showraidsettingsmenu = false; + itemspawnpanel.SetActive(value: true); + } + else + { + itemspawnpanel.SetActive(value: true); + } + } + else if (itemspawnpanel != null) + { + itemspawnpanel.SetActive(value: false); + } + if (aispawnpanel != null && Settings.Itemspawnmenu) + { + aispawnpanel.SetActive(value: true); + } + else if (aispawnpanel != null) + { + aispawnpanel.SetActive(value: false); + } + if (traderreppanel != null && Settings.Itemspawnmenu) + { + traderreppanel.SetActive(value: true); + } + else if (traderreppanel != null) + { + traderreppanel.SetActive(value: false); + } + if (skillspanel != null && Settings.Itemspawnmenu) + { + skillspanel.SetActive(value: true); + } + else if (skillspanel != null) + { + skillspanel.SetActive(value: false); + } + if (presetsPanel != null && Settings.Itemspawnmenu) + { + presetsPanel.SetActive(value: true); + } + else if (presetsPanel != null) + { + presetsPanel.SetActive(value: false); + } + if (MainColorSettingsMenu != null && Settings.ShowColorSettingsMenu) + { + MainColorSettingsMenu.SetActive(value: true); + if (Settings.Itemspawnmenu && !hidspawnmenuforcolor) + { + hidspawnmenuforcolor = true; + Settings.Itemspawnmenu = false; + } + } + else if (MainColorSettingsMenu != null) + { + MainColorSettingsMenu.SetActive(value: false); + if (!Settings.Itemspawnmenu && hidspawnmenuforcolor) + { + hidspawnmenuforcolor = false; + Settings.Itemspawnmenu = true; + } + } + if (TransitPanel != null && Settings.showraidsettingsmenu) + { + if (Settings.Itemspawnmenu) + { + Settings.Itemspawnmenu = false; + TransitPanel.SetActive(value: true); + RaidSettingsPanel.SetActive(value: true); + EntityPanel.SetActive(value: true); + } + else + { + TransitPanel.SetActive(value: true); + RaidSettingsPanel.SetActive(value: true); + EntityPanel.SetActive(value: true); + } + } + else if (TransitPanel != null) + { + TransitPanel.SetActive(value: false); + RaidSettingsPanel.SetActive(value: false); + EntityPanel.SetActive(value: false); + } + } + if (waitingForKey && Input.anyKeyDown) + { + foreach (KeyCode value in Enum.GetValues(typeof(KeyCode))) + { + if (Input.GetKeyDown(value)) + { + AssignKeybind(value); + break; + } + } + waitingForKey = false; + } + if (!populatedtemplates) + { + PopulateAllTemplates(); + } + if (Settings.modifyraidsettings) + { + ApplyRaidSettings(); + } + } + catch (Exception) + { + } + } + + public void UpdateWindow() + { + closedupdate = true; + updatepanel.SetActive(value: false); + menuBar.SetActive(value: true); + menu.SetActive(value: true); + aimbotPanel.SetActive(value: true); + if (Settings.MagicBullet) + { + watermarkmagicbullet.SetActive(value: true); + } + else + { + watermark.SetActive(value: true); + } + showmenu = true; + } + + public void ShowHelpPanel() + { + showhelp = true; + if (helppanel != null && showhelp) + { + menuBar.SetActive(value: false); + helppanel.SetActive(value: true); + } + } + + public void HideHelpPanel() + { + showhelp = false; + if (helppanel != null && !showhelp) + { + menuBar.SetActive(value: true); + helppanel.SetActive(value: false); + } + } + + public void XPAdder() + { + if (!(Main.GameWorld = null)) + { + int num = (int)Settings.expamount; + Main.LocalPlayer.Profile.EftStats.SessionCounters.SetLong(num, CounterTag.Exp); + ConsoleScreen.Log("patchedxp"); + } + } + + public void NullifyRiskyCounters() + { + long value = 0L; + Main.LocalPlayer.Profile.EftStats.SessionCounters.SetLong(value, CounterTag.Money, ECurrencyType.RUB); + Main.LocalPlayer.Profile.EftStats.SessionCounters.SetLong(value, CounterTag.Keys); + Main.LocalPlayer.Profile.EftStats.SessionCounters.SetLong(value, CounterTag.Money, ECurrencyType.EUR); + Main.LocalPlayer.Profile.EftStats.SessionCounters.SetLong(value, CounterTag.Money, ECurrencyType.USD); + } + + public void ShowAimbotPanel() + { + HideAllPanels(); + aimbotPanel.SetActive(value: true); + } + + public void ShowPlayerESPPanel() + { + HideAllPanels(); + playerESPPanel.SetActive(value: true); + } + + public void ShowItemESPPanel() + { + HideAllPanels(); + itemESPPanel.SetActive(value: true); + } + + public void ShowMiscOptionsPanel() + { + HideAllPanels(); + miscOptionsPanel.SetActive(value: true); + } + + private void FinishQuestsWrapper() + { + questModule.FinishQuests(); + } + + public void ShowSettingsPanel() + { + HideAllPanels(); + settingsPanel.SetActive(value: true); + } + + public void LoadandSpawnitem() + { + LoadAndSpawnItemFromJson(); + } + + private void OnSearchTextChanged(string searchTerm) + { + if (debounceCoroutine != null) + { + StopCoroutine(debounceCoroutine); + } + debounceCoroutine = StartCoroutine(DebounceUpdateSearchResults(searchTerm)); + } + + public void SpawnTemplateDelegate() + { + if (spawnDebounceCoroutine != null) + { + StopCoroutine(spawnDebounceCoroutine); + } + spawnDebounceCoroutine = StartCoroutine(DebounceSpawnSelectedPreset()); + } + + private IEnumerator DebounceSpawnSelectedPreset() + { + yield return new WaitForSeconds(0.1f); + SpawnSelectedPreset(); + } + + public void OnTemplateSearchTextChanged(string searchText) + { + if (searchDebounceCoroutine != null) + { + StopCoroutine(searchDebounceCoroutine); + } + searchDebounceCoroutine = StartCoroutine(DebounceUpdateSearchText(searchText)); + } + + public void OnAISearchTextChanged(string searchText) + { + if (aisearchDebounceCoroutine != null) + { + StopCoroutine(aisearchDebounceCoroutine); + } + aisearchDebounceCoroutine = StartCoroutine(DebounceAISearchText(searchText)); + } + + private IEnumerator DebounceUpdateSearchText(string searchTerm) + { + yield return new WaitForSeconds(0.1f); + UpdatePresetResults(searchTerm); + } + + private IEnumerator DebounceAISearchText(string searchTerm) + { + yield return new WaitForSeconds(0.1f); + UpdateAIResults(searchTerm); + } + + private void ClearButtons() + { + foreach (Transform item in buttonContainer) + { + UnityEngine.Object.Destroy(item.gameObject); + } + } + + private void ClearPresetButtons() + { + foreach (Transform item in presetButtonContainer) + { + UnityEngine.Object.Destroy(item.gameObject); + } + } + + private void OnSpawnItemButtonClick() + { + if (newDebounceCoroutine != null) + { + StopCoroutine(newDebounceCoroutine); + } + newDebounceCoroutine = StartCoroutine(HandleDebouncedEvent()); + } + + private IEnumerator HandleDebouncedEvent() + { + yield return new WaitForSeconds(newDebounceTime); + SpawnItemHelper(); + } + + private IEnumerator DebounceUpdateSearchResults(string searchTerm) + { + yield return new WaitForSeconds(debounceTime); + UpdateSearchResults(searchTerm); + } + + private void InitializeColorSliders() + { + redSlider.minValue = 0f; + redSlider.maxValue = 1f; + greenSlider.minValue = 0f; + greenSlider.maxValue = 1f; + blueSlider.minValue = 0f; + blueSlider.maxValue = 1f; + redSlider.onValueChanged.AddListener(OnColorSliderValueChanged); + greenSlider.onValueChanged.AddListener(OnColorSliderValueChanged); + blueSlider.onValueChanged.AddListener(OnColorSliderValueChanged); + } + + private void PopulateColorList() + { + foreach (Transform item2 in colorButtonContainer) + { + UnityEngine.Object.Destroy(item2.gameObject); + } + ColorCategory value = (ColorCategory)categoryDropdown.value; + foreach (KeyValuePair, Action, string, ColorCategory)> item3 in ColorDictionary) + { + string colorName = item3.Key; + Color color = item3.Value.Item1(); + string item = item3.Value.Item3; + if (item3.Value.Item4 != value) + { + continue; + } + GameObject gameObject = UnityEngine.Object.Instantiate(colorButtonTemplate, colorButtonContainer); + if (gameObject == null) + { + continue; + } + TMP_Text componentInChildren = gameObject.GetComponentInChildren(); + if (componentInChildren != null) + { + componentInChildren.text = item ?? ""; + } + Image componentInChildren2 = gameObject.GetComponentInChildren(); + if (componentInChildren2 != null) + { + componentInChildren2.color = color; + } + Button component = gameObject.GetComponent