├── .gitattributes ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── TemBot ├── App.config ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── Reflection.cs ├── ShinyFinder.cs ├── Steam.cs ├── TemBot.csproj ├── Temtems.cs ├── Temtems.json └── packages.config ├── TemCleaner ├── App.config ├── Program.cs ├── Properties │ └── AssemblyInfo.cs ├── TemCleaner.csproj └── packages.config ├── TemSharp.Loader ├── App.config ├── App.xaml ├── App.xaml.cs ├── Core │ ├── Compiler.cs │ └── Injector.cs ├── FodyWeavers.xml ├── FodyWeavers.xsd ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── TemSharp.Loader.csproj └── packages.config ├── TemSharp.sln └── TemSharp ├── Common ├── Deobfuscator.cs ├── Menu.cs ├── Reflection.cs └── SceneDebugger.cs ├── Init.cs ├── Mods ├── MonsterInfo.cs ├── Notice.cs ├── RemoveName.cs └── Zoom.cs ├── Properties └── AssemblyInfo.cs └── TemSharp.csproj /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Aa][Rr][Mm]/ 27 | [Aa][Rr][Mm]64/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Ll]og/ 32 | [Ll]ogs/ 33 | 34 | # Visual Studio 2015/2017 cache/options directory 35 | .vs/ 36 | # Uncomment if you have tasks that create the project's static files in wwwroot 37 | #wwwroot/ 38 | 39 | # Visual Studio 2017 auto generated files 40 | Generated\ Files/ 41 | 42 | # MSTest test Results 43 | [Tt]est[Rr]esult*/ 44 | [Bb]uild[Ll]og.* 45 | 46 | # NUnit 47 | *.VisualState.xml 48 | TestResult.xml 49 | nunit-*.xml 50 | 51 | # Build Results of an ATL Project 52 | [Dd]ebugPS/ 53 | [Rr]eleasePS/ 54 | dlldata.c 55 | 56 | # Benchmark Results 57 | BenchmarkDotNet.Artifacts/ 58 | 59 | # .NET Core 60 | project.lock.json 61 | project.fragment.lock.json 62 | artifacts/ 63 | 64 | # StyleCop 65 | StyleCopReport.xml 66 | 67 | # Files built by Visual Studio 68 | *_i.c 69 | *_p.c 70 | *_h.h 71 | *.ilk 72 | *.meta 73 | *.obj 74 | *.iobj 75 | *.pch 76 | *.pdb 77 | *.ipdb 78 | *.pgc 79 | *.pgd 80 | *.rsp 81 | *.sbr 82 | *.tlb 83 | *.tli 84 | *.tlh 85 | *.tmp 86 | *.tmp_proj 87 | *_wpftmp.csproj 88 | *.log 89 | *.vspscc 90 | *.vssscc 91 | .builds 92 | *.pidb 93 | *.svclog 94 | *.scc 95 | 96 | # Chutzpah Test files 97 | _Chutzpah* 98 | 99 | # Visual C++ cache files 100 | ipch/ 101 | *.aps 102 | *.ncb 103 | *.opendb 104 | *.opensdf 105 | *.sdf 106 | *.cachefile 107 | *.VC.db 108 | *.VC.VC.opendb 109 | 110 | # Visual Studio profiler 111 | *.psess 112 | *.vsp 113 | *.vspx 114 | *.sap 115 | 116 | # Visual Studio Trace Files 117 | *.e2e 118 | 119 | # TFS 2012 Local Workspace 120 | $tf/ 121 | 122 | # Guidance Automation Toolkit 123 | *.gpState 124 | 125 | # ReSharper is a .NET coding add-in 126 | _ReSharper*/ 127 | *.[Rr]e[Ss]harper 128 | *.DotSettings.user 129 | 130 | # JustCode is a .NET coding add-in 131 | .JustCode 132 | 133 | # TeamCity is a build add-in 134 | _TeamCity* 135 | 136 | # DotCover is a Code Coverage Tool 137 | *.dotCover 138 | 139 | # AxoCover is a Code Coverage Tool 140 | .axoCover/* 141 | !.axoCover/settings.json 142 | 143 | # Visual Studio code coverage results 144 | *.coverage 145 | *.coveragexml 146 | 147 | # NCrunch 148 | _NCrunch_* 149 | .*crunch*.local.xml 150 | nCrunchTemp_* 151 | 152 | # MightyMoose 153 | *.mm.* 154 | AutoTest.Net/ 155 | 156 | # Web workbench (sass) 157 | .sass-cache/ 158 | 159 | # Installshield output folder 160 | [Ee]xpress/ 161 | 162 | # DocProject is a documentation generator add-in 163 | DocProject/buildhelp/ 164 | DocProject/Help/*.HxT 165 | DocProject/Help/*.HxC 166 | DocProject/Help/*.hhc 167 | DocProject/Help/*.hhk 168 | DocProject/Help/*.hhp 169 | DocProject/Help/Html2 170 | DocProject/Help/html 171 | 172 | # Click-Once directory 173 | publish/ 174 | 175 | # Publish Web Output 176 | *.[Pp]ublish.xml 177 | *.azurePubxml 178 | # Note: Comment the next line if you want to checkin your web deploy settings, 179 | # but database connection strings (with potential passwords) will be unencrypted 180 | *.pubxml 181 | *.publishproj 182 | 183 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 184 | # checkin your Azure Web App publish settings, but sensitive information contained 185 | # in these scripts will be unencrypted 186 | PublishScripts/ 187 | 188 | # NuGet Packages 189 | *.nupkg 190 | # NuGet Symbol Packages 191 | *.snupkg 192 | # The packages folder can be ignored because of Package Restore 193 | **/[Pp]ackages/* 194 | # except build/, which is used as an MSBuild target. 195 | !**/[Pp]ackages/build/ 196 | # Uncomment if necessary however generally it will be regenerated when needed 197 | #!**/[Pp]ackages/repositories.config 198 | # NuGet v3's project.json files produces more ignorable files 199 | *.nuget.props 200 | *.nuget.targets 201 | 202 | # Microsoft Azure Build Output 203 | csx/ 204 | *.build.csdef 205 | 206 | # Microsoft Azure Emulator 207 | ecf/ 208 | rcf/ 209 | 210 | # Windows Store app package directories and files 211 | AppPackages/ 212 | BundleArtifacts/ 213 | Package.StoreAssociation.xml 214 | _pkginfo.txt 215 | *.appx 216 | *.appxbundle 217 | *.appxupload 218 | 219 | # Visual Studio cache files 220 | # files ending in .cache can be ignored 221 | *.[Cc]ache 222 | # but keep track of directories ending in .cache 223 | !?*.[Cc]ache/ 224 | 225 | # Others 226 | ClientBin/ 227 | ~$* 228 | *~ 229 | *.dbmdl 230 | *.dbproj.schemaview 231 | *.jfm 232 | *.pfx 233 | *.publishsettings 234 | orleans.codegen.cs 235 | 236 | # Including strong name files can present a security risk 237 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 238 | #*.snk 239 | 240 | # Since there are multiple workflows, uncomment next line to ignore bower_components 241 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 242 | #bower_components/ 243 | 244 | # RIA/Silverlight projects 245 | Generated_Code/ 246 | 247 | # Backup & report files from converting an old project file 248 | # to a newer Visual Studio version. Backup files are not needed, 249 | # because we have git ;-) 250 | _UpgradeReport_Files/ 251 | Backup*/ 252 | UpgradeLog*.XML 253 | UpgradeLog*.htm 254 | ServiceFabricBackup/ 255 | *.rptproj.bak 256 | 257 | # SQL Server files 258 | *.mdf 259 | *.ldf 260 | *.ndf 261 | 262 | # Business Intelligence projects 263 | *.rdl.data 264 | *.bim.layout 265 | *.bim_*.settings 266 | *.rptproj.rsuser 267 | *- [Bb]ackup.rdl 268 | *- [Bb]ackup ([0-9]).rdl 269 | *- [Bb]ackup ([0-9][0-9]).rdl 270 | 271 | # Microsoft Fakes 272 | FakesAssemblies/ 273 | 274 | # GhostDoc plugin setting file 275 | *.GhostDoc.xml 276 | 277 | # Node.js Tools for Visual Studio 278 | .ntvs_analysis.dat 279 | node_modules/ 280 | 281 | # Visual Studio 6 build log 282 | *.plg 283 | 284 | # Visual Studio 6 workspace options file 285 | *.opt 286 | 287 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 288 | *.vbw 289 | 290 | # Visual Studio LightSwitch build output 291 | **/*.HTMLClient/GeneratedArtifacts 292 | **/*.DesktopClient/GeneratedArtifacts 293 | **/*.DesktopClient/ModelManifest.xml 294 | **/*.Server/GeneratedArtifacts 295 | **/*.Server/ModelManifest.xml 296 | _Pvt_Extensions 297 | 298 | # Paket dependency manager 299 | .paket/paket.exe 300 | paket-files/ 301 | 302 | # FAKE - F# Make 303 | .fake/ 304 | 305 | # CodeRush personal settings 306 | .cr/personal 307 | 308 | # Python Tools for Visual Studio (PTVS) 309 | __pycache__/ 310 | *.pyc 311 | 312 | # Cake - Uncomment if you are using it 313 | # tools/** 314 | # !tools/packages.config 315 | 316 | # Tabs Studio 317 | *.tss 318 | 319 | # Telerik's JustMock configuration file 320 | *.jmconfig 321 | 322 | # BizTalk build output 323 | *.btp.cs 324 | *.btm.cs 325 | *.odx.cs 326 | *.xsd.cs 327 | 328 | # OpenCover UI analysis results 329 | OpenCover/ 330 | 331 | # Azure Stream Analytics local run output 332 | ASALocalRun/ 333 | 334 | # MSBuild Binary and Structured Log 335 | *.binlog 336 | 337 | # NVidia Nsight GPU debugger configuration file 338 | *.nvuser 339 | 340 | # MFractors (Xamarin productivity tool) working folder 341 | .mfractor/ 342 | 343 | # Local History for Visual Studio 344 | .localhistory/ 345 | 346 | # BeatPulse healthcheck temp database 347 | healthchecksdb 348 | 349 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 350 | MigrationBackup/ 351 | 352 | # Ionide (cross platform F# VS Code tools) working folder 353 | .ionide/ 354 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "SharpMonoInjector"] 2 | path = SharpMonoInjector 3 | url = https://github.com/warbler/SharpMonoInjector 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 shalzuth 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Don't run this as is 2 | You will get banned. There is new anti-cheat. My private closed-source platform (https://www.temsharp.com) bypasses this. 3 | 4 | ## How to Run 5 | - Download https://github.com/shalzuth/TemSharp/releases/download/beta/TemSharp.Loader.exe 6 | - Launch Game 7 | - Launch Exe, this will download https://github.com/shalzuth/TemSharp/tree/master/TemSharp and inject it 8 | - In game, when you have cursor (escape, tab, main menu, etc), you can enable/disable mods 9 | 10 | ## Available Mods 11 | - Disable Fights 12 | - Heal 13 | - Monster Info 14 | - Open Bank 15 | - Open Shop 16 | - Shiny Hunter 17 | - Speed 18 | - Teleporter 19 | - Zoom 20 | 21 | ## Disable Fights 22 | Only works in grass. Working on Trainer fight bypassing. 23 | 24 | ## Heal 25 | Heals your little guys up to full. 26 | 27 | ## Monster Info 28 | Shows SV info in battle. 29 | 30 | ## Open Bank 31 | Swap your Temtems on the fly. 32 | 33 | ## Open Shop 34 | Forget pokeballs? Buy them on the fly. 35 | 36 | ## Shiny Hunter 37 | Start mod in grass. 38 | Mod will: 39 | * Start fight 40 | * Fight or Flee 41 | * Repeat until a Shiny Pokeman is found, or minimum SV values are found 42 | Has option to disable graphics during battle. 43 | 44 | ## Speed 45 | Speeds up the game. Could be modified to make it go slower if there are requests. 46 | 47 | ## Teleporter 48 | Don't use in buildings/caverns 49 | Right Click on map to teleport to location 50 | Right Click on ground to teleport to mouse 51 | 52 | Using the numpad, 2, 4, 6, 8 will teleport you a couple blocks away. 53 | 54 | ## Zoom 55 | Pulls Mr Cameraman back a bit. And cleans up the blur effect. 56 | 57 | ## Remove Name 58 | Removes your name from appearing on the HUD. 59 | 60 | ## Extra 61 | I also left a clientless project in here. Goodluck getting it to work :) 62 | 63 | ## Donate coffee and/or beer 64 | I probably won't mix them. 65 | [![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=RZCNSSMSHTCE6) 66 | 67 | ## Legal stuff 68 | 69 | MIT License 70 | 71 | *Temsharp and Shalzuth aren't endorsed by CremaGames S.L., Crema and doesn’t reflect the views or opinions of CremaGames S.L., Crema or anyone officially involved in producing or managing CremaGames S.L., Crema. Game content and materials are trademarks and copyrights of CremaGames S.L., Crema* 72 | -------------------------------------------------------------------------------- /TemBot/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /TemBot/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Reflection; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using Sfs2X; 8 | using Sfs2X.Core; 9 | using Sfs2X.Entities.Data; 10 | using Sfs2X.Util; 11 | using Sfs2X.Protocol.Serialization; 12 | 13 | namespace TemBot 14 | { 15 | class Program 16 | { 17 | static void Main(string[] args) 18 | { 19 | typeof(Temtem.Network.NetworkLogic).SetField("dqnppqrrgeo", new SmartFox()); 20 | var q = typeof(Temtem.Network.NetworkLogic).GetField(); 21 | var monsters = typeof(Temtem.Battle.BattleClient).GetField(); 22 | while (true) 23 | { 24 | var client = new ShinyFinder(); 25 | while (client.SFClient.IsConnecting || client.SFClient.IsConnected || (client.fleeThread != null && client.fleeThread.IsAlive)) System.Threading.Thread.Sleep(1000); 26 | System.Threading.Thread.Sleep(1000); 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /TemBot/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("TemBot")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("TemBot")] 13 | [assembly: AssemblyCopyright("Copyright © 2020")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("ed617d8d-10d6-4504-8213-c024acbefad4")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /TemBot/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace TemBot.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TemBot.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized resource of type System.Byte[]. 65 | /// 66 | internal static byte[] Temtems { 67 | get { 68 | object obj = ResourceManager.GetObject("Temtems", resourceCulture); 69 | return ((byte[])(obj)); 70 | } 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /TemBot/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Temtems.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 123 | 124 | -------------------------------------------------------------------------------- /TemBot/Reflection.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Reflection; 5 | 6 | namespace TemBot 7 | { 8 | public static class Reflection 9 | { 10 | public static BindingFlags flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | 11 | BindingFlags.Static | BindingFlags.FlattenHierarchy; 12 | public static Dictionary fields = new Dictionary(); 13 | public static FieldInfo GetFieldFast(this Type type, String fieldName, String fieldType, String baseType) 14 | { 15 | var key = type.FullName + ":" + fieldName + "(" + fieldType + ")" + " " + baseType; 16 | if (fields.ContainsKey(key)) return fields[key]; 17 | //UnityEngine.Debug.Log(key); 18 | var field = type.GetField(fieldName, flags); 19 | //UnityEngine.Debug.Log(field); 20 | if (field == null || !field.FieldType.Name.Contains(fieldType) || !field.DeclaringType.Name.Contains(baseType)) 21 | field = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static).FirstOrDefault(f => 22 | (String.IsNullOrEmpty(fieldName) || f.Name == fieldName) 23 | && f.FieldType.ToString().Contains(fieldType) 24 | && f.DeclaringType.ToString().Contains(baseType)); 25 | if (field == null || !field.FieldType.Name.Contains(fieldType) || !field.DeclaringType.Name.Contains(baseType)) 26 | field = type.GetFields(flags).FirstOrDefault(f => 27 | (String.IsNullOrEmpty(fieldName) || f.Name == fieldName) 28 | && f.FieldType.ToString().Contains(fieldType) 29 | && f.DeclaringType.ToString().Contains(baseType)); 30 | if (field == null) field = type.GetField(fieldName, flags); 31 | if (field != null) fields[key] = field; 32 | return field; 33 | } 34 | public static Dictionary properties = new Dictionary(); 35 | public static PropertyInfo GetPropertyFast(this Type type, String propertyName, String propretyType, String baseType) 36 | { 37 | var key = type.FullName + "." + propertyName + "(" + propretyType + ")" + " " + baseType; 38 | if (properties.ContainsKey(key)) return properties[key]; 39 | var property = type.GetProperty(propertyName, flags); 40 | if (!property.PropertyType.Name.Contains(propretyType) || !property.DeclaringType.Name.Contains(baseType)) 41 | property = type.GetProperties(flags).FirstOrDefault(p => p.Name == propertyName 42 | && p.PropertyType.ToString().Contains(propretyType) 43 | && p.DeclaringType.ToString().Contains(baseType)); 44 | if (property != null) properties[key] = property; 45 | return property; 46 | } 47 | public static Object GetField(this Object obj, String fieldName) 48 | { 49 | return obj.GetField(fieldName, "", ""); 50 | } 51 | public static Object GetField(this Object obj, String fieldName, String fieldType, String baseType) 52 | { 53 | if (obj == null) return null; 54 | var objType = obj is Type ? (Type)obj : obj.GetType(); 55 | var field = objType.GetFieldFast(fieldName, fieldType, baseType); 56 | if (field != null) return obj is Type ? field.GetValue(null) : field.GetValue(obj); 57 | var property = objType.GetPropertyFast(fieldName, fieldType, baseType); 58 | if (property != null) return obj is Type ? property.GetValue(null, null) : property.GetValue(obj, null); 59 | return null; 60 | } 61 | public static T GetField(this Type obj) 62 | { 63 | return (T)obj.GetField("", typeof(T).Name, obj.Name); 64 | } 65 | public static T GetField(this Object obj, String fieldName) 66 | { 67 | return (T)obj.GetField(fieldName, "", ""); 68 | } 69 | public static Dictionary staticFields = new Dictionary(); 70 | public static T GetField(this Object obj, String fieldName, String fieldType, String baseType) 71 | { 72 | if (String.IsNullOrEmpty(fieldType)) fieldType = typeof(T).Name; 73 | if (String.IsNullOrEmpty(baseType)) baseType = obj is Type ? ((Type)obj).Name : obj.GetType().Name; 74 | return (T)GetField(obj, fieldName, fieldType, baseType); 75 | } 76 | public static void SetField(this Object obj, String fieldName, String fieldType, String baseType, T val) 77 | { 78 | if (obj == null) return; 79 | var objType = obj.GetType(); 80 | if (obj is Type) 81 | objType = (Type)obj; 82 | var field = objType.GetFieldFast(fieldName, fieldType, baseType); 83 | if (field != null) 84 | { 85 | field.SetValue(obj, val); 86 | return; 87 | } 88 | var property = objType.GetPropertyFast(fieldName, fieldType, baseType); 89 | if (property != null) property.SetValue(obj, val, null); 90 | } 91 | public static void SetField(this Object obj, String fieldName, T val) 92 | { 93 | obj.SetField(fieldName, val, "", ""); 94 | } 95 | public static void SetField(this Object obj, String fieldName, T val, String fieldType, String baseType) 96 | { 97 | if (String.IsNullOrEmpty(fieldType)) 98 | fieldType = typeof(T).Name; 99 | if (String.IsNullOrEmpty(baseType)) 100 | baseType = obj is Type ? ((Type)obj).Name : obj.GetType().Name; 101 | SetField(obj, fieldName, fieldType, baseType, val); 102 | } 103 | public static List GetList(this Object obj) 104 | { 105 | var methods = obj.GetType().GetMethods(flags); 106 | var obj_get_Item = methods.First(m => m.Name == "get_Item"); 107 | var obj_Count = obj.GetType().GetProperty("Count"); 108 | var count = (Int32)obj_Count.GetValue(obj, new Object[0]); 109 | var elements = new List(); 110 | for (Int32 i = 0; i < count; i++) 111 | elements.Add(obj_get_Item.Invoke(obj, new Object[] { i })); 112 | return elements; 113 | } 114 | public static Dictionary methods = new Dictionary(); 115 | public static MethodInfo GetMethodFast(this Type type, String methodName) 116 | { 117 | var key = type.FullName + "." + methodName; 118 | if (methods.ContainsKey(key)) return methods[key]; 119 | var method = type.GetMethod(methodName, flags); 120 | if (method != null) methods[key] = method; 121 | return method; 122 | } 123 | public static Object Invoke(this Object obj, String methodName, params Object[] paramArray) 124 | { 125 | var type = obj is Type ? (Type)obj : obj.GetType(); 126 | var method = GetMethodFast(type, methodName); 127 | return obj is Type ? method.Invoke(null, paramArray) : method.Invoke(obj, paramArray); 128 | } 129 | /*public static T CreateInstance(params Object[] paramArray) 130 | { 131 | return (T)Activator.CreateInstance(typeof(T), args: paramArray); 132 | }*/ 133 | } 134 | } -------------------------------------------------------------------------------- /TemBot/ShinyFinder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading; 6 | using System.Threading.Tasks; 7 | using System.Reflection; 8 | using Sfs2X; 9 | using Sfs2X.Core; 10 | using Sfs2X.Entities; 11 | using Sfs2X.Entities.Data; 12 | using Sfs2X.Requests; 13 | using Sfs2X.Util; 14 | using Sfs2X.Protocol.Serialization; 15 | using Steamworks; 16 | 17 | namespace TemBot 18 | { 19 | public class ShinyFinder 20 | { 21 | public SmartFox SFClient; 22 | Int32 LagValue; 23 | Boolean GameStarted = false; 24 | Boolean InBattle = false; 25 | String SessionTicket = ""; 26 | Single X; 27 | Single Y; 28 | Boolean LoadedGeneral = false; 29 | Boolean LoadedDialogues = false; 30 | ConfigData ConfigData = new ConfigData 31 | { 32 | Host = "51.161.14.64", 33 | Port = 9933, 34 | Zone = "2Lobby", 35 | UdpHost = "51.161.14.64", 36 | UdpPort = 9933 37 | }; 38 | public void InitSteam() 39 | { 40 | if (!String.IsNullOrEmpty(SessionTicket)) 41 | return; 42 | if (!System.IO.File.Exists("steam_appid.txt")) 43 | System.IO.File.WriteAllText("steam_appid.txt", "745920"); 44 | var steamInited = SteamAPI.Init(); 45 | System.IO.File.Delete("steam_appid.txt"); 46 | var rgubTicket = new byte[1024]; 47 | SteamUser.GetEncryptedAppTicket(rgubTicket, 1024, out UInt32 cubTicket); 48 | SessionTicket = Convert.ToBase64String(rgubTicket, 0, (Int32)cubTicket); 49 | } 50 | public ShinyFinder() 51 | { 52 | InitSteam(); 53 | if (DefaultSFSDataSerializer.RunningAssembly == null) 54 | DefaultSFSDataSerializer.RunningAssembly = Assembly.Load("Assembly-CSharp"); 55 | 56 | SFClient = new SmartFox(); 57 | SFClient.Log.LoggingLevel = Sfs2X.Logging.LogLevel.INFO; 58 | SFClient.ThreadSafeMode = false; 59 | //SFClient.RemoveAllEventListeners(); 60 | SFClient.AddEventListener(SFSEvent.EXTENSION_RESPONSE, new EventListenerDelegate(OnResponse)); 61 | SFClient.AddEventListener(SFSEvent.PING_PONG, new EventListenerDelegate(OnPing)); 62 | SFClient.AddEventListener(SFSEvent.CONNECTION_LOST, new EventListenerDelegate(OnDisconnect)); 63 | 64 | SFClient.AddEventListener(SFSEvent.CONNECTION, new EventListenerDelegate(OnConnect)); 65 | SFClient.AddEventListener(SFSEvent.LOGIN, new EventListenerDelegate(OnLogin)); 66 | SFClient.AddEventListener(SFSEvent.LOGOUT, new EventListenerDelegate(OnLogout)); 67 | SFClient.AddEventListener(SFSEvent.LOGIN_ERROR, new EventListenerDelegate(OnLoginError)); 68 | 69 | SFClient.AddEventListener(SFSEvent.USER_VARIABLES_UPDATE, new EventListenerDelegate(OnUserVarUpdate)); 70 | SFClient.AddEventListener(SFSEvent.PUBLIC_MESSAGE, new EventListenerDelegate(OnPublicMessage)); 71 | 72 | SFClient.AddEventListener(SFSEvent.USER_ENTER_ROOM, new EventListenerDelegate(Dummy)); 73 | SFClient.AddEventListener(SFSEvent.USER_EXIT_ROOM, new EventListenerDelegate(Dummy)); 74 | SFClient.AddEventListener(SFSEvent.ROOM_JOIN, new EventListenerDelegate(Dummy)); 75 | SFClient.AddEventListener(SFSEvent.ROOM_VARIABLES_UPDATE, new EventListenerDelegate(Dummy)); 76 | SFClient.Connect(ConfigData); 77 | } 78 | void OnPing(BaseEvent eventParam) 79 | { 80 | LagValue = (int)eventParam.Params["lagValue"]; 81 | } 82 | void OnDisconnect(BaseEvent eventParam) 83 | { 84 | if (false) 85 | { 86 | Console.WriteLine("OnDisconnect : " + eventParam.Type); 87 | foreach (var kvp in eventParam.Params) 88 | Console.WriteLine("\t" + kvp.Key + " : " + kvp.Value); 89 | //Console.WriteLine(eventParam.Params["reason"]); 90 | } 91 | } 92 | void OnLogout(BaseEvent eventParam) 93 | { 94 | if (false) 95 | { 96 | Console.WriteLine("OnLogout : " + eventParam.Type); 97 | foreach (var kvp in eventParam.Params) 98 | Console.WriteLine("\t" + kvp.Key + " : " + kvp.Value); 99 | } 100 | Task.Run(() => { Login(); }); 101 | //Console.WriteLine(eventParam.Params["reason"]); 102 | } 103 | void Dummy(BaseEvent eventParam) 104 | { 105 | //Console.WriteLine(eventParam); 106 | } 107 | void OnLoginError(BaseEvent eventParam) 108 | { 109 | Console.WriteLine(eventParam.Params["reason"]); 110 | } 111 | void OnConnect(BaseEvent eventParam) 112 | { 113 | if (false) 114 | { 115 | Console.WriteLine("OnConnect : " + eventParam.Type); 116 | foreach (var kvp in eventParam.Params) 117 | Console.WriteLine("\t" + kvp.Key + " : " + kvp.Value); 118 | } 119 | if ((Boolean)eventParam.Params["success"]) 120 | { 121 | Login(); 122 | } 123 | } 124 | void Login() 125 | { 126 | var zoneName = !GameStarted ? "2Lobby" : InBattle ? "1BattleZone" : "3Game"; 127 | var isfsobject = new SFSObject(); 128 | isfsobject.PutByte("LT", 0); 129 | isfsobject.PutUtfString("authSessionTicket", SessionTicket); 130 | isfsobject.PutShort("v", 30); 131 | //Thread.Sleep(4000); 132 | SFClient.Send(new LoginRequest(SteamUser.GetSteamID().m_SteamID.ToString(), string.Empty, zoneName, isfsobject)); 133 | } 134 | void OnLogin(BaseEvent eventParam) 135 | { 136 | Task.Run(() => 137 | { 138 | if (false) 139 | { 140 | Console.WriteLine("OnLogin : " + eventParam.Type); 141 | foreach (var kvp in eventParam.Params) 142 | Console.WriteLine("\t" + kvp.Key + " : " + kvp.Value); 143 | } 144 | if (!SFClient.UdpInited) 145 | { 146 | SFClient.AddEventListener(SFSEvent.UDP_INIT, new EventListenerDelegate(OnUdpInit)); 147 | SFClient.InitUDP(); 148 | return; 149 | } 150 | if (eventParam.Params["zone"].ToString() == "1BattleZone") 151 | { 152 | //System.Threading.Thread.Sleep(8000); 153 | //Login(); 154 | //System.Threading.Thread.Sleep(1000); 155 | SFClient.Send(new ExtensionRequest("joinRoom", new SFSObject())); 156 | } 157 | 158 | if (!InBattle) 159 | { 160 | var isfsobject = new SFSObject(); 161 | isfsobject.PutShort("sid", 0); 162 | isfsobject.PutBool("sst", true); 163 | var isfsarray = new SFSArray(); 164 | isfsarray.AddFloat(X); 165 | isfsarray.AddFloat(0.0f); 166 | isfsarray.AddFloat(Y); 167 | isfsobject.PutSFSArray("pos", isfsarray); 168 | SFClient.Send(new ExtensionRequest("joinRoom", isfsobject)); 169 | 170 | isfsobject = new SFSObject(); 171 | isfsobject.PutShort("sid", 1); 172 | SFClient.Send(new ExtensionRequest("joinRoom", isfsobject)); 173 | 174 | isfsobject = new SFSObject(); 175 | isfsobject.PutShort("sid", 8); 176 | SFClient.Send(new ExtensionRequest("joinRoom", isfsobject)); 177 | 178 | 179 | InBattle = true; 180 | isfsobject = new SFSObject(); 181 | isfsobject.PutShort("sid", 1); 182 | isfsobject.PutShort("spid", 0); 183 | SFClient.Send(new ExtensionRequest("spawnMonster", isfsobject)); 184 | 185 | 186 | } 187 | }); 188 | } 189 | void OnUdpInit(BaseEvent eventParam) 190 | { 191 | if (false) 192 | { 193 | Console.WriteLine("OnUdpInit : " + eventParam.Type); 194 | foreach (var kvp in eventParam.Params) 195 | Console.WriteLine("\t" + kvp.Key + " : " + kvp.Value); 196 | } 197 | if (!(Boolean)eventParam.Params["success"]) 198 | throw new Exception(""); 199 | Task.Run(() => 200 | { 201 | if (!GameStarted) 202 | { 203 | var isfsobject = new SFSObject(); 204 | isfsobject.PutInt("tmpdV", 0);// hjjfkrmqrjc.inqinlfoilq); 205 | SFClient.Send(new ExtensionRequest("gameStart", isfsobject)); 206 | } 207 | }); 208 | } 209 | void OnUserVarUpdate(BaseEvent eventParam) 210 | { 211 | if (false) 212 | { 213 | Console.WriteLine("OnUserVarUpdate : " + eventParam.Type); 214 | foreach (var kvp in eventParam.Params) 215 | Console.WriteLine("\t" + kvp.Key + " : " + kvp.Value); 216 | } 217 | if (!LoadedGeneral) 218 | { 219 | LoadedGeneral = true; 220 | var isfsobject = new SFSObject(); 221 | isfsobject.PutInt("v", 4); 222 | //SFClient.Send(new ExtensionRequest("loadSave.General", isfsobject)); 223 | } 224 | if (!LoadedDialogues) 225 | { 226 | LoadedDialogues = true; 227 | var isfsobject = new SFSObject(); 228 | isfsobject.PutInt("v", 10); 229 | //SFClient.Send(new ExtensionRequest("loadSave.Dialogues", isfsobject)); 230 | 231 | //SFClient.Send(new ExtensionRequest("temtemWelfare.GetPlayerData", new SFSObject())); 232 | 233 | 234 | } 235 | } 236 | void OnPublicMessage(BaseEvent hqhciklmlhl) 237 | { 238 | var room = (Room)hqhciklmlhl.Params["room"]; 239 | for (int i = 0; i < room.UserList.Count; i++) 240 | { 241 | var user = room.UserList[i]; 242 | if (!user.IsItMe && user.ContainsVariable("v")) 243 | { 244 | var val = user.GetVariable("v").GetSFSArrayValue().GetInt(0); 245 | //this.epkjhcinpik[val] = user; 246 | } 247 | } 248 | } 249 | Boolean trigger = false; 250 | Boolean fleed = false; 251 | Boolean fleeBug = false; 252 | public Thread fleeThread; 253 | List battleTicks = new List { Environment.TickCount }; 254 | List battleTimes = new List(); 255 | void OnResponse(BaseEvent eventParam) 256 | { 257 | if (false) 258 | { 259 | Console.WriteLine("OnResponse : " + eventParam.Type); 260 | foreach (var kvp in eventParam.Params) 261 | Console.WriteLine("\t" + kvp.Key + " : " + kvp.Value); 262 | } 263 | var varst = (SFSObject)eventParam.Params["params"]; 264 | //Console.WriteLine(varst.GetDump()); 265 | 266 | Task.Run(() => 267 | { 268 | var vars = (SFSObject)eventParam.Params["params"]; 269 | var array = eventParam.Params["cmd"].ToString().Split('.'); 270 | var text = array[0]; 271 | if (text == "Chat") 272 | Console.WriteLine(text); 273 | else if (text == "TemtemWelfare") 274 | Console.WriteLine(text); 275 | else if (text == "PA") 276 | Console.WriteLine(text); 277 | else if (text == "GameStart") 278 | { 279 | if (vars.ContainsKey("inbattle")) 280 | InBattle = vars.GetBool("inbattle"); 281 | GameStarted = true; 282 | X = vars.GetFloat("x"); 283 | Y = vars.GetFloat("z"); 284 | //Thread.Sleep(700); 285 | SFClient.Send(new LogoutRequest()); 286 | //Task.Run(() => { SFClient.Send(new LogoutRequest()); }); 287 | } 288 | else if (text == "Monsters") 289 | Console.WriteLine(text); 290 | else if (text == "PickAndBan") 291 | Console.WriteLine(text); 292 | else if (text == "Notifications") 293 | Console.WriteLine(text); 294 | else if (text == "UCP") 295 | Console.WriteLine(text); 296 | else if (text == "Coop") 297 | Console.WriteLine(text); 298 | else if (text == "Friends") 299 | Console.WriteLine(text); 300 | else if (text == "Gameplay") 301 | { 302 | //Console.WriteLine(text); 303 | } 304 | else if (text == "Battle") 305 | { 306 | if (array.Length > 1) 307 | { 308 | if (array[1] == "CurrentState") 309 | { 310 | var enemies = vars.GetSFSArray("aiMon"); 311 | var count = 0; 312 | 313 | foreach (temtem.networkserialized.NetworkMonster monster in enemies) 314 | { 315 | if (monster == null) 316 | continue; 317 | count++; 318 | } 319 | 320 | if (!fleed) 321 | { 322 | battleTicks.Add(Environment.TickCount); 323 | battleTimes.Add(battleTicks.Last() - battleTicks[battleTicks.Count - 2]); 324 | Console.WriteLine(DateTime.Now + " : new battle, last battle time " + (battleTimes.Last() / 1000.0f) + ", average time " + battleTimes.Average() / 1000.0f); 325 | fleed = true; 326 | while (fleeBug) { } 327 | fleeBug = true; 328 | fleeThread = new Thread(() => 329 | { 330 | 331 | while (fleeBug) 332 | { 333 | if (!SFClient.IsConnected) 334 | { 335 | SFClient.KillConnection(); 336 | Console.WriteLine("reseting"); 337 | Thread.Sleep(2000); 338 | return; 339 | } 340 | var actype4 = new SFSObject(); 341 | actype4.PutByte("actype", 4); 342 | SFClient.Send(new ExtensionRequest("battle", actype4)); 343 | SFClient.Send(new ExtensionRequest("battle", actype4)); 344 | 345 | var aioArray = new SFSArray(); 346 | for (Byte i = 0; i < count; i++) 347 | { 348 | var aioObj = new SFSObject(); 349 | aioObj.PutByte("slot", (Byte)(64 + i)); 350 | aioObj.PutByte("techI", i); 351 | aioObj.PutByte("actype", 0); 352 | aioArray.AddSFSObject(aioObj); 353 | } 354 | var aio = new SFSObject(); 355 | aio.PutSFSArray("aiO", aioArray); 356 | Thread.Sleep(2500); 357 | if (fleeBug) 358 | SFClient.Send(new ExtensionRequest("battle", aio)); 359 | Thread.Sleep(1000); 360 | } 361 | }); 362 | fleeThread.Start(); 363 | } 364 | foreach (temtem.networkserialized.NetworkMonster monster in enemies) 365 | { 366 | if (monster == null) 367 | continue; 368 | var monsterCache = Temtems.AllTemtems[monster.monsterNumber]; 369 | Console.WriteLine(" " + monsterCache.name + " (lvl" + monster.level + ") : " + (monster.luma ? "Shiny" : "Normal") + " : " + (monster.gender ? "Female" : "Male")); 370 | 371 | } 372 | } 373 | if (array[1] == "BattleFinished") 374 | { 375 | fleeBug = false; 376 | InBattle = false; 377 | fleed = false; 378 | //Thread.Sleep(2000); 379 | SFClient.Send(new LogoutRequest()); 380 | } 381 | if (array[1] == "BattleTurnResult") 382 | { 383 | if (vars.ContainsKey("result")) 384 | { 385 | var result = vars.GetSFSArray("result"); 386 | foreach (SFSObject r in result) 387 | { 388 | if (r.GetBool("runres")) 389 | { 390 | //Console.WriteLine("run success"); 391 | } 392 | //Console.WriteLine("run fail"); 393 | } 394 | } 395 | else 396 | Console.WriteLine("no result"); 397 | } 398 | } 399 | } 400 | else if (text == "Inventory") 401 | Console.WriteLine(text); 402 | else if (text == "PromoCode") 403 | Console.WriteLine(text); 404 | else if (text == "UPP") 405 | { 406 | //Console.WriteLine(text); 407 | } 408 | else if (text == "Movement") 409 | Console.WriteLine(text); 410 | else if (text == "Breeding") 411 | Console.WriteLine(text); 412 | else if (text == "World") 413 | { 414 | if (!trigger) 415 | { 416 | trigger = true; 417 | /*Task.Run(() => 418 | { 419 | System.Threading.Thread.Sleep(1000); 420 | Login(); 421 | }); 422 | Task.Run(() => 423 | { 424 | System.Threading.Thread.Sleep(2000); 425 | SFClient.Send(new ExtensionRequest("joinRoom", new SFSObject())); 426 | });*/ 427 | } 428 | Console.WriteLine(text); 429 | } 430 | else if (text == "SetNickname") 431 | Console.WriteLine(text); 432 | else if (text == "Trade") 433 | Console.WriteLine(text); 434 | else if (text == "PCControl") 435 | Console.WriteLine(text); 436 | else 437 | Console.WriteLine("unk : " + text); 438 | }); 439 | } 440 | static uint ComputeFNVHash(string s) 441 | { 442 | var num = 0x811C9DC5u; 443 | for (var i = 0; i < s.Length; i++) 444 | num = (s[i] ^ num) * 0x10000193u; 445 | return num; 446 | } 447 | } 448 | } 449 | -------------------------------------------------------------------------------- /TemBot/Steam.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using Steamworks; 7 | 8 | namespace TemBot 9 | { 10 | public static class Steam 11 | { 12 | public static String SessionTicket = ""; 13 | public static void InitSteam() 14 | { 15 | if (!String.IsNullOrEmpty(SessionTicket)) 16 | return; 17 | if (!System.IO.File.Exists("steam_appid.txt")) 18 | System.IO.File.WriteAllText("steam_appid.txt", "745920"); 19 | var steamInited = SteamAPI.Init(); 20 | System.IO.File.Delete("steam_appid.txt"); 21 | var rgubTicket = new byte[1024]; 22 | SteamUser.GetEncryptedAppTicket(rgubTicket, 1024, out UInt32 cubTicket); 23 | SessionTicket = Convert.ToBase64String(rgubTicket, 0, (Int32)cubTicket); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /TemBot/TemBot.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {ED617D8D-10D6-4504-8213-C024ACBEFAD4} 8 | Exe 9 | TemBot 10 | TemBot 11 | v4.7.2 12 | 512 13 | true 14 | true 15 | 16 | 17 | true 18 | bin\x64\Debug\ 19 | DEBUG;TRACE 20 | full 21 | x64 22 | 7.3 23 | prompt 24 | MinimumRecommendedRules.ruleset 25 | true 26 | 27 | 28 | bin\x64\Release\ 29 | TRACE 30 | true 31 | pdbonly 32 | x64 33 | 7.3 34 | prompt 35 | MinimumRecommendedRules.ruleset 36 | true 37 | 38 | 39 | 40 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\Assembly-CSharp.dll 41 | 42 | 43 | False 44 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\Assembly-CSharp-firstpass.dll 45 | 46 | 47 | ..\packages\Microsoft.Bcl.AsyncInterfaces.1.1.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll 48 | 49 | 50 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\SmartFox2X.dll 51 | 52 | 53 | 54 | ..\packages\System.Buffers.4.5.0\lib\netstandard2.0\System.Buffers.dll 55 | 56 | 57 | 58 | ..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll 59 | 60 | 61 | 62 | ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll 63 | 64 | 65 | ..\packages\System.Runtime.CompilerServices.Unsafe.4.7.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll 66 | 67 | 68 | 69 | ..\packages\System.Text.Encodings.Web.4.7.0\lib\netstandard2.0\System.Text.Encodings.Web.dll 70 | 71 | 72 | ..\packages\System.Text.Json.4.7.0\lib\net461\System.Text.Json.dll 73 | 74 | 75 | ..\packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll 76 | 77 | 78 | ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | True 92 | True 93 | Resources.resx 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | ResXFileCodeGenerator 108 | Resources.Designer.cs 109 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /TemBot/Temtems.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Text.Json; 7 | using System.Text.Json.Serialization; 8 | 9 | namespace TemBot 10 | { 11 | public static class Temtems 12 | { 13 | static Dictionary _allTemtems; 14 | public static Dictionary AllTemtems 15 | { 16 | get 17 | { 18 | if (_allTemtems == null) 19 | { 20 | var temtems = JsonSerializer.Deserialize>(Properties.Resources.Temtems); 21 | _allTemtems = new Dictionary(); 22 | foreach (var temtem in temtems) 23 | { 24 | _allTemtems.Add(temtem.id, temtem); 25 | } 26 | } 27 | return _allTemtems; 28 | } 29 | } 30 | } 31 | public class Passive 32 | { 33 | public int id { get; set; } 34 | public string name { get; set; } 35 | public string description { get; set; } 36 | } 37 | 38 | public class TemtemInfo 39 | { 40 | public int id { get; set; } 41 | public string name { get; set; } 42 | public string description { get; set; } 43 | public int baseAttack { get; set; } 44 | public int baseDefense { get; set; } 45 | public int baseHp { get; set; } 46 | public int baseSpAttack { get; set; } 47 | public int baseSpDefense { get; set; } 48 | public int baseSpeed { get; set; } 49 | public int baseStamina { get; set; } 50 | public string elementalType1 { get; set; } 51 | public string elementalType2 { get; set; } 52 | public double weight { get; set; } 53 | public int height { get; set; } 54 | public int catchRate { get; set; } 55 | public int defeatedExperienceGroup { get; set; } 56 | public bool hasGender { get; set; } 57 | public int maleRate { get; set; } 58 | public bool publicTempedia { get; set; } 59 | public bool lumaAvailable { get; set; } 60 | public int tvAttack { get; set; } 61 | public int tvDefense { get; set; } 62 | public int tvHp { get; set; } 63 | public int tvSpAttack { get; set; } 64 | public int tvSpDefense { get; set; } 65 | public int tvSpeed { get; set; } 66 | public int tvStamina { get; set; } 67 | public List passives { get; set; } 68 | public List techniques { get; set; } 69 | public List coursesTechniques { get; set; } 70 | public List eggTechniques { get; set; } 71 | public List evolutions { get; set; } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /TemBot/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /TemCleaner/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /TemCleaner/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using Mono.Cecil; 7 | 8 | namespace TemCleaner 9 | { 10 | class Program 11 | { 12 | static void Main(string[] args) 13 | { 14 | foreach (var methodInfo in typeof(Temtem.Core.WildMonstersLogic).GetMethods(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).Where(x => 15 | x.ReturnType == typeof(void) && 16 | x.GetParameters().Length == 1 && 17 | x.GetParameters()[0].ParameterType == typeof(Temtem.World.SpawnZoneDefinition) 18 | ).ToArray()) 19 | { 20 | Console.WriteLine(methodInfo.Name); 21 | } 22 | 23 | 24 | var asm = AssemblyDefinition.ReadAssembly(@"E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\Assembly-CSharp.dll"); 25 | 26 | var roFields = typeof(Temtem.Network.oejjngkeoec).GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static); 27 | foreach (TypeDefinition t in asm.MainModule.Types) 28 | { 29 | if (t.Name == "oejjngkeoec") 30 | { 31 | foreach (FieldDefinition f in t.Fields) 32 | { 33 | if (f.Constant != null) 34 | f.Name = f.Constant.ToString(); 35 | else 36 | { 37 | var field = roFields.First(f2 => f2.Name == f.Name); 38 | f.Name = field.GetValue(null).ToString(); 39 | } 40 | 41 | } 42 | t.Name = "NetworkStrings"; 43 | } 44 | } 45 | foreach (TypeDefinition t in asm.MainModule.Types) 46 | { 47 | if (t.Name == "NetworkLogic" || t.Name == "BattleClient" || t.Name == "WildMonstersLogic" || t.Name == "NPCInteract") 48 | { 49 | foreach (MethodDefinition m in t.Methods) 50 | { 51 | var ins = m.Body.Instructions; 52 | var name = ins.LastOrDefault(i => i.Operand != null && i.Operand.ToString().Contains("NetworkStrings")); 53 | if (name == null) 54 | continue; 55 | var operand = name.Operand.ToString(); 56 | if (operand.Contains("Trp")) 57 | Console.WriteLine(""); 58 | m.Name = "Send" + operand.Replace("System.String Temtem.Network.NetworkStrings::", "").Replace(".", ""); 59 | 60 | } 61 | } 62 | } 63 | asm.Write(@"E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\Assembly-CSharp2.dll"); 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /TemCleaner/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("TemCleaner")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("TemCleaner")] 13 | [assembly: AssemblyCopyright("Copyright © 2020")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("b92016e8-ed1f-4cf1-a6d4-270dacfd56d4")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /TemCleaner/TemCleaner.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {B92016E8-ED1F-4CF1-A6D4-270DACFD56D4} 8 | Exe 9 | TemCleaner 10 | TemCleaner 11 | v4.7.2 12 | 512 13 | true 14 | true 15 | 16 | 17 | true 18 | bin\x64\Debug\ 19 | DEBUG;TRACE 20 | full 21 | x64 22 | 7.3 23 | prompt 24 | MinimumRecommendedRules.ruleset 25 | true 26 | 27 | 28 | bin\x64\Release\ 29 | TRACE 30 | true 31 | pdbonly 32 | x64 33 | 7.3 34 | prompt 35 | MinimumRecommendedRules.ruleset 36 | true 37 | 38 | 39 | 40 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\Assembly-CSharp.dll 41 | 42 | 43 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\DOTween.dll 44 | 45 | 46 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\DOTweenPro.dll 47 | 48 | 49 | ..\packages\Mono.Cecil.0.11.1\lib\net40\Mono.Cecil.dll 50 | 51 | 52 | ..\packages\Mono.Cecil.0.11.1\lib\net40\Mono.Cecil.Mdb.dll 53 | 54 | 55 | ..\packages\Mono.Cecil.0.11.1\lib\net40\Mono.Cecil.Pdb.dll 56 | 57 | 58 | ..\packages\Mono.Cecil.0.11.1\lib\net40\Mono.Cecil.Rocks.dll 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /TemCleaner/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /TemSharp.Loader/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /TemSharp.Loader/App.xaml: -------------------------------------------------------------------------------- 1 |  6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /TemSharp.Loader/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Configuration; 4 | using System.Data; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | 9 | namespace TemSharp.Loader 10 | { 11 | /// 12 | /// Interaction logic for App.xaml 13 | /// 14 | public partial class App : Application 15 | { 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /TemSharp.Loader/Core/Compiler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.CodeDom.Compiler; 3 | using System.Collections.Generic; 4 | using System.IO; 5 | using System.IO.Compression; 6 | using System.Linq; 7 | using System.Text; 8 | using Microsoft.CSharp; 9 | 10 | namespace TemSharp.Loader.Core 11 | { 12 | public class Compiler 13 | { 14 | public static String ProjName { get; } = typeof(Compiler).Namespace.Split('.').First(); 15 | public static String UnityDllPath = ""; 16 | public static Boolean UpdateSources() 17 | { 18 | if (Directory.Exists($@"..\..\..\..\{ProjName}")) 19 | return false; 20 | Console.WriteLine("Getting latest version info from Github"); 21 | System.Net.WebClient wc = new System.Net.WebClient(); 22 | String hash = wc.DownloadString($"https://github.com/shalzuth/{ProjName}/tree/master/{ProjName}"); 23 | String hashSearch = $"src=\"/shalzuth/{ProjName}/tree-commit/"; 24 | hash = hash.Substring(hash.IndexOf(hashSearch) + hashSearch.Length, 7); 25 | String hashFile = $@".\{ProjName}-master\hash.txt"; 26 | if (File.Exists(hashFile)) 27 | { 28 | if (hash != File.ReadAllText(hashFile)) 29 | { 30 | Console.WriteLine("Later version exists, removing existing version"); 31 | Directory.Delete($@".\{ProjName}-master", true); 32 | } 33 | } 34 | if (!File.Exists(hashFile)) 35 | { 36 | Console.WriteLine("Downloading latest version"); 37 | wc.DownloadFile($"https://github.com/shalzuth/{ProjName}/archive/master.zip", $"{ProjName}.zip"); 38 | using (var archive = ZipFile.OpenRead($"{ProjName}.zip")) 39 | { 40 | archive.ExtractToDirectory(@".\"); 41 | } 42 | File.WriteAllText(hashFile, hash); 43 | return true; 44 | } 45 | return false; 46 | } 47 | public static Byte[] CompileDll(String randString) 48 | { 49 | var options = new Dictionary();// { { "CompilerVersion", "v3.5" } };// { { "CompilerVersion", "v4.0" } }; 50 | CSharpCodeProvider codeProvider = new CSharpCodeProvider(options); 51 | //CodeDomProvider codeProvider2 = new Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider(); 52 | CompilerParameters compilerParameters = new CompilerParameters 53 | { 54 | GenerateExecutable = false, 55 | #if DEBUG 56 | IncludeDebugInformation = true, 57 | #endif 58 | GenerateInMemory = false, 59 | OutputAssembly = randString + ".dll", 60 | CompilerOptions = "/unsafe" 61 | }; 62 | compilerParameters.ReferencedAssemblies.Clear(); 63 | //compilerParameters.ReferencedAssemblies.Add("mscorlib.dll"); 64 | var dlls = Directory.GetFiles(UnityDllPath, "*.dll", SearchOption.AllDirectories); 65 | foreach (var dll in dlls) 66 | if (!dll.Contains("mscorlib")) 67 | compilerParameters.ReferencedAssemblies.Add(dll); 68 | /*compilerParameters.ReferencedAssemblies.Add(UnityDllPath + "System.dll"); 69 | compilerParameters.ReferencedAssemblies.Add(UnityDllPath + "System.Core.dll"); // not sure which to use... prefer Linq... 70 | compilerParameters.ReferencedAssemblies.Add(UnityDllPath + "netstandard.dll"); 71 | //compilerParameters.ReferencedAssemblies.Add(gamePath + "System.Drawing.dll"); 72 | //compilerParameters.ReferencedAssemblies.Add(gamePath + "System.Windows.Forms.dll"); 73 | compilerParameters.ReferencedAssemblies.Add(UnityDllPath + "Assembly-CSharp.dll"); 74 | compilerParameters.ReferencedAssemblies.Add(UnityDllPath + "UnityEngine.dll"); 75 | compilerParameters.ReferencedAssemblies.Add(UnityDllPath + "UnityEngine.UI.dll"); 76 | compilerParameters.ReferencedAssemblies.Add(UnityDllPath + "UnityEngine.UIElementsModule.dll"); 77 | compilerParameters.ReferencedAssemblies.Add(UnityDllPath + "UnityEngine.UIModule.dll"); 78 | compilerParameters.ReferencedAssemblies.Add(UnityDllPath + "UnityEngine.Networking.dll"); 79 | compilerParameters.ReferencedAssemblies.Add(UnityDllPath + "UnityEngine.CoreModule.dll"); 80 | compilerParameters.ReferencedAssemblies.Add(UnityDllPath + "UnityEngine.IMGUIModule.dll"); 81 | //compilerParameters.ReferencedAssemblies.Add(gamePath + "TextMeshPro-1.0.55.2017.1.0b11.dll");*/ 82 | 83 | string[] sourceFiles; 84 | if (Directory.Exists($@"..\..\..\..\{ProjName}")) 85 | sourceFiles = Directory.GetFiles($@"..\..\..\..\{ProjName}", "*.cs", SearchOption.AllDirectories); 86 | else 87 | sourceFiles = Directory.GetFiles($@"{ProjName}-master\{ProjName}\", "*.cs", SearchOption.AllDirectories); 88 | var sources = new List(); 89 | foreach (var sourceFile in sourceFiles) 90 | { 91 | if (sourceFile.Contains(@"obj\\")) 92 | continue; 93 | var source = File.ReadAllText(sourceFile); 94 | source = source.Replace(ProjName, randString); 95 | sources.Add(source); 96 | } 97 | //var result = codeProvider.CompileAssemblyFromFile(compilerParameters, sourceFiles); 98 | var result = codeProvider.CompileAssemblyFromSource(compilerParameters, sources.ToArray()); 99 | if (result.Errors.Count > 0) 100 | { 101 | var sb = new StringBuilder(); 102 | foreach (CompilerError error in result.Errors) 103 | sb.AppendLine(error.ToString()); 104 | throw new Exception(sb.ToString()); 105 | } 106 | var dllBytes = File.ReadAllBytes(randString + ".dll"); 107 | File.Delete(randString + ".dll"); 108 | if (File.Exists(randString + ".pdb")) 109 | File.Delete(randString + ".pdb"); 110 | return dllBytes; 111 | /*using (MemoryStream stream = new MemoryStream()) 112 | { 113 | var formatter = new BinaryFormatter(); 114 | formatter.Serialize(stream, result.CompiledAssembly); 115 | return stream.ToArray(); 116 | }*/ 117 | } 118 | } 119 | } -------------------------------------------------------------------------------- /TemSharp.Loader/Core/Injector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace TemSharp.Loader.Core 4 | { 5 | public static class Injector 6 | { 7 | public static void Inject(String GameName, Byte[] Assembly, String Namespace, String Class, String Method) 8 | { 9 | var injector = new SharpMonoInjector.Injector(GameName); 10 | injector.Inject(Assembly, Namespace, Class, Method); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /TemSharp.Loader/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | -------------------------------------------------------------------------------- /TemSharp.Loader/FodyWeavers.xsd: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks 13 | 14 | 15 | 16 | 17 | A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks. 18 | 19 | 20 | 21 | 22 | A list of unmanaged 32 bit assembly names to include, delimited with line breaks. 23 | 24 | 25 | 26 | 27 | A list of unmanaged 64 bit assembly names to include, delimited with line breaks. 28 | 29 | 30 | 31 | 32 | The order of preloaded assemblies, delimited with line breaks. 33 | 34 | 35 | 36 | 37 | 38 | This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file. 39 | 40 | 41 | 42 | 43 | Controls if .pdbs for reference assemblies are also embedded. 44 | 45 | 46 | 47 | 48 | Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option. 49 | 50 | 51 | 52 | 53 | As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off. 54 | 55 | 56 | 57 | 58 | Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code. 59 | 60 | 61 | 62 | 63 | Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior. 64 | 65 | 66 | 67 | 68 | A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with | 69 | 70 | 71 | 72 | 73 | A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |. 74 | 75 | 76 | 77 | 78 | A list of unmanaged 32 bit assembly names to include, delimited with |. 79 | 80 | 81 | 82 | 83 | A list of unmanaged 64 bit assembly names to include, delimited with |. 84 | 85 | 86 | 87 | 88 | The order of preloaded assemblies, delimited with |. 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. 97 | 98 | 99 | 100 | 101 | A comma-separated list of error codes that can be safely ignored in assembly verification. 102 | 103 | 104 | 105 | 106 | 'false' to turn off automatic generation of the XML Schema file. 107 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /TemSharp.Loader/MainWindow.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 12 | 13 | -------------------------------------------------------------------------------- /TemSharp.Loader/MainWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | using System.Threading.Tasks; 4 | using System.Windows; 5 | using TemSharp.Loader.Core; 6 | 7 | namespace TemSharp.Loader 8 | { 9 | public class Status 10 | { 11 | private static String _text; 12 | public static String Text 13 | { 14 | get { return _text; } 15 | set 16 | { 17 | _text = value; 18 | OnTextChanged(EventArgs.Empty); 19 | } 20 | } 21 | public static event EventHandler TextChanged; 22 | protected static void OnTextChanged(EventArgs e) 23 | { 24 | TextChanged?.Invoke(null, e); 25 | } 26 | static Status() 27 | { 28 | TextChanged += (sender, e) => { return; }; 29 | } 30 | } 31 | /// 32 | /// Interaction logic for MainWindow.xaml 33 | /// 34 | public partial class MainWindow : Window 35 | { 36 | public MainWindow() 37 | { 38 | InitializeComponent(); 39 | Task.Run(() => { Init(); }); 40 | } 41 | public void Init() 42 | { 43 | var gameProcName = "Temtem"; 44 | var waitingFor = "Waiting for " + gameProcName + " to open"; 45 | Status.Text = waitingFor; 46 | var gameProc = System.Diagnostics.Process.GetProcessesByName(gameProcName); 47 | if (gameProc.Length == 0) 48 | Console.WriteLine(waitingFor); 49 | while (gameProc.Length == 0) 50 | { 51 | Console.WriteLine(waitingFor); 52 | Thread.Sleep(5000); 53 | gameProc = System.Diagnostics.Process.GetProcessesByName(gameProcName); 54 | } 55 | Status.Text = "Game Open - Injecting"; 56 | try 57 | { 58 | String randString = "aa" + Guid.NewGuid().ToString().Substring(0, 8); 59 | var q = gameProc[0].MainModule; 60 | var gameDir = System.IO.Path.GetDirectoryName(gameProc[0].MainModule.FileName); 61 | var gameName = System.IO.Path.GetFileName(gameDir); 62 | var unityDllPath = gameDir + @"\" + gameName + @"_Data\Managed\"; 63 | if (!System.IO.Directory.Exists(unityDllPath)) 64 | unityDllPath = gameDir + @"\" + gameProcName + @"_Data\Managed\"; 65 | Compiler.UnityDllPath = unityDllPath; 66 | Status.Text = "Injecting - Game @ " + unityDllPath; 67 | Compiler.UpdateSources(); 68 | Injector.Inject(gameProcName, Compiler.CompileDll(randString), randString, "Init", "Load"); 69 | Status.Text = "Injected, closing app shortly"; 70 | //Thread.Sleep(10000); 71 | Environment.Exit(0); 72 | } 73 | catch (Exception e) 74 | { 75 | Status.Text = e.Message; 76 | } 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /TemSharp.Loader/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Resources; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | using System.Windows; 6 | 7 | // General Information about an assembly is controlled through the following 8 | // set of attributes. Change these attribute values to modify the information 9 | // associated with an assembly. 10 | [assembly: AssemblyTitle("TemSharp.Loader")] 11 | [assembly: AssemblyDescription("")] 12 | [assembly: AssemblyConfiguration("")] 13 | [assembly: AssemblyCompany("")] 14 | [assembly: AssemblyProduct("TemSharp.Loader")] 15 | [assembly: AssemblyCopyright("Copyright © 2020")] 16 | [assembly: AssemblyTrademark("")] 17 | [assembly: AssemblyCulture("")] 18 | 19 | // Setting ComVisible to false makes the types in this assembly not visible 20 | // to COM components. If you need to access a type in this assembly from 21 | // COM, set the ComVisible attribute to true on that type. 22 | [assembly: ComVisible(false)] 23 | 24 | //In order to begin building localizable applications, set 25 | //CultureYouAreCodingWith in your .csproj file 26 | //inside a . For example, if you are using US english 27 | //in your source files, set the to en-US. Then uncomment 28 | //the NeutralResourceLanguage attribute below. Update the "en-US" in 29 | //the line below to match the UICulture setting in the project file. 30 | 31 | //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] 32 | 33 | 34 | [assembly: ThemeInfo( 35 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 36 | //(used if a resource is not found in the page, 37 | // or application resource dictionaries) 38 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 39 | //(used if a resource is not found in the page, 40 | // app, or any theme specific resource dictionaries) 41 | )] 42 | 43 | 44 | // Version information for an assembly consists of the following four values: 45 | // 46 | // Major Version 47 | // Minor Version 48 | // Build Number 49 | // Revision 50 | // 51 | // You can specify all the values or you can default the Build and Revision Numbers 52 | // by using the '*' as shown below: 53 | // [assembly: AssemblyVersion("1.0.*")] 54 | [assembly: AssemblyVersion("1.0.0.0")] 55 | [assembly: AssemblyFileVersion("1.0.0.0")] 56 | -------------------------------------------------------------------------------- /TemSharp.Loader/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace TemSharp.Loader.Properties 12 | { 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources 26 | { 27 | 28 | private static global::System.Resources.ResourceManager resourceMan; 29 | 30 | private static global::System.Globalization.CultureInfo resourceCulture; 31 | 32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 33 | internal Resources() 34 | { 35 | } 36 | 37 | /// 38 | /// Returns the cached ResourceManager instance used by this class. 39 | /// 40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 41 | internal static global::System.Resources.ResourceManager ResourceManager 42 | { 43 | get 44 | { 45 | if ((resourceMan == null)) 46 | { 47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TemSharp.Loader.Properties.Resources", typeof(Resources).Assembly); 48 | resourceMan = temp; 49 | } 50 | return resourceMan; 51 | } 52 | } 53 | 54 | /// 55 | /// Overrides the current thread's CurrentUICulture property for all 56 | /// resource lookups using this strongly typed resource class. 57 | /// 58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 59 | internal static global::System.Globalization.CultureInfo Culture 60 | { 61 | get 62 | { 63 | return resourceCulture; 64 | } 65 | set 66 | { 67 | resourceCulture = value; 68 | } 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /TemSharp.Loader/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /TemSharp.Loader/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace TemSharp.Loader.Properties 12 | { 13 | 14 | 15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 18 | { 19 | 20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 21 | 22 | public static Settings Default 23 | { 24 | get 25 | { 26 | return defaultInstance; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /TemSharp.Loader/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /TemSharp.Loader/TemSharp.Loader.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Debug 7 | AnyCPU 8 | {0F80D276-805D-4AA6-8D46-BE6333553960} 9 | WinExe 10 | TemSharp.Loader 11 | TemSharp.Loader 12 | v4.7.2 13 | 512 14 | {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15 | 4 16 | true 17 | true 18 | 19 | 20 | 21 | 22 | true 23 | bin\x64\Debug\ 24 | DEBUG;TRACE 25 | full 26 | x64 27 | 7.3 28 | prompt 29 | MinimumRecommendedRules.ruleset 30 | true 31 | 32 | 33 | bin\x64\Release\ 34 | TRACE 35 | true 36 | pdbonly 37 | x64 38 | 7.3 39 | prompt 40 | MinimumRecommendedRules.ruleset 41 | true 42 | 43 | 44 | 45 | ..\packages\Costura.Fody.4.1.0\lib\net40\Costura.dll 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 4.0 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | MSBuild:Compile 67 | Designer 68 | 69 | 70 | MSBuild:Compile 71 | Designer 72 | 73 | 74 | App.xaml 75 | Code 76 | 77 | 78 | 79 | 80 | MainWindow.xaml 81 | Code 82 | 83 | 84 | 85 | 86 | Code 87 | 88 | 89 | True 90 | True 91 | Resources.resx 92 | 93 | 94 | True 95 | Settings.settings 96 | True 97 | 98 | 99 | ResXFileCodeGenerator 100 | Resources.Designer.cs 101 | 102 | 103 | 104 | SettingsSingleFileGenerator 105 | Settings.Designer.cs 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | {67ceba58-22e8-4b2b-88ce-73b7733a0536} 114 | SharpMonoInjector 115 | 116 | 117 | {2f633f85-985c-4e5c-9358-94371f449c3c} 118 | TemSharp 119 | 120 | 121 | 122 | 123 | 124 | 125 | This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 126 | 127 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /TemSharp.Loader/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /TemSharp.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.29613.14 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TemSharp", "TemSharp\TemSharp.csproj", "{2F633F85-985C-4E5C-9358-94371F449C3C}" 7 | EndProject 8 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpMonoInjector", "SharpMonoInjector\src\SharpMonoInjector\SharpMonoInjector.csproj", "{67CEBA58-22E8-4B2B-88CE-73B7733A0536}" 9 | EndProject 10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TemSharp.Loader", "TemSharp.Loader\TemSharp.Loader.csproj", "{0F80D276-805D-4AA6-8D46-BE6333553960}" 11 | EndProject 12 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TemBot", "TemBot\TemBot.csproj", "{ED617D8D-10D6-4504-8213-C024ACBEFAD4}" 13 | EndProject 14 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TemCleaner", "TemCleaner\TemCleaner.csproj", "{B92016E8-ED1F-4CF1-A6D4-270DACFD56D4}" 15 | EndProject 16 | Global 17 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 18 | Debug|x64 = Debug|x64 19 | Release|x64 = Release|x64 20 | EndGlobalSection 21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 22 | {2F633F85-985C-4E5C-9358-94371F449C3C}.Debug|x64.ActiveCfg = Debug|x64 23 | {2F633F85-985C-4E5C-9358-94371F449C3C}.Debug|x64.Build.0 = Debug|x64 24 | {2F633F85-985C-4E5C-9358-94371F449C3C}.Release|x64.ActiveCfg = Release|x64 25 | {2F633F85-985C-4E5C-9358-94371F449C3C}.Release|x64.Build.0 = Release|x64 26 | {67CEBA58-22E8-4B2B-88CE-73B7733A0536}.Debug|x64.ActiveCfg = Debug|Any CPU 27 | {67CEBA58-22E8-4B2B-88CE-73B7733A0536}.Debug|x64.Build.0 = Debug|Any CPU 28 | {67CEBA58-22E8-4B2B-88CE-73B7733A0536}.Release|x64.ActiveCfg = Release|Any CPU 29 | {67CEBA58-22E8-4B2B-88CE-73B7733A0536}.Release|x64.Build.0 = Release|Any CPU 30 | {0F80D276-805D-4AA6-8D46-BE6333553960}.Debug|x64.ActiveCfg = Debug|x64 31 | {0F80D276-805D-4AA6-8D46-BE6333553960}.Debug|x64.Build.0 = Debug|x64 32 | {0F80D276-805D-4AA6-8D46-BE6333553960}.Release|x64.ActiveCfg = Release|x64 33 | {0F80D276-805D-4AA6-8D46-BE6333553960}.Release|x64.Build.0 = Release|x64 34 | {ED617D8D-10D6-4504-8213-C024ACBEFAD4}.Debug|x64.ActiveCfg = Debug|x64 35 | {ED617D8D-10D6-4504-8213-C024ACBEFAD4}.Debug|x64.Build.0 = Debug|x64 36 | {ED617D8D-10D6-4504-8213-C024ACBEFAD4}.Release|x64.ActiveCfg = Release|x64 37 | {ED617D8D-10D6-4504-8213-C024ACBEFAD4}.Release|x64.Build.0 = Release|x64 38 | {B92016E8-ED1F-4CF1-A6D4-270DACFD56D4}.Debug|x64.ActiveCfg = Debug|x64 39 | {B92016E8-ED1F-4CF1-A6D4-270DACFD56D4}.Debug|x64.Build.0 = Debug|x64 40 | {B92016E8-ED1F-4CF1-A6D4-270DACFD56D4}.Release|x64.ActiveCfg = Release|x64 41 | {B92016E8-ED1F-4CF1-A6D4-270DACFD56D4}.Release|x64.Build.0 = Release|x64 42 | EndGlobalSection 43 | GlobalSection(SolutionProperties) = preSolution 44 | HideSolutionNode = FALSE 45 | EndGlobalSection 46 | GlobalSection(ExtensibilityGlobals) = postSolution 47 | SolutionGuid = {A6F907B1-F0AE-4FF7-8161-4DEE96194E90} 48 | EndGlobalSection 49 | EndGlobal 50 | -------------------------------------------------------------------------------- /TemSharp/Common/Deobfuscator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace TemSharp.Common 8 | { 9 | class Deobfuscator 10 | { 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /TemSharp/Common/Menu.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Reflection; 4 | using UnityEngine; 5 | 6 | namespace TemSharp 7 | { 8 | public class Menu : MonoBehaviour 9 | { 10 | static Int32 Margin = 5; 11 | static Int32 MenuWidth = 150; 12 | Int32 MenuId; 13 | Rect MenuWindow = new Rect(Margin, Margin, MenuWidth, 50); 14 | void Awake() 15 | { 16 | MenuId = GetHashCode(); 17 | } 18 | void OnGUI() 19 | { 20 | if (Cursor.visible) 21 | { 22 | #if DEBUG 23 | MenuWindow = GUILayout.Window(MenuId, MenuWindow, MenuMethod, "shalzuth : " + GetType().Namespace, GUILayout.ExpandHeight(true)); 24 | #else 25 | MenuWindow = GUILayout.Window(MenuId, MenuWindow, MenuMethod, "temsharp by shalzuth " + Assembly.GetExecutingAssembly().GetName().Version, GUILayout.ExpandHeight(true)); 26 | #endif 27 | } 28 | } 29 | public static List ScalingOptions = new List(); 30 | void MenuMethod(Int32 id) 31 | { 32 | foreach (var mono in Init.BaseObject.GetComponents()) 33 | { 34 | if (mono.GetType() == GetType()) continue; 35 | mono.enabled = GUILayout.Toggle(mono.enabled, mono.GetType().Name); 36 | if (ScalingOptions.Contains(mono.GetType())) 37 | mono.SetField("ScalingValue", GUILayout.HorizontalScrollbar(mono.GetField("ScalingValue"), 1.0f, mono.GetField("MinValue"), mono.GetField("MaxValue"))); 38 | } 39 | var unload = GUILayout.Toggle(false, "Unload"); 40 | if (unload) Destroy(Init.BaseObject); 41 | GUI.DragWindow(); 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /TemSharp/Common/Reflection.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Reflection; 5 | 6 | namespace TemSharp 7 | { 8 | public static class Reflection 9 | { 10 | public static BindingFlags flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | 11 | BindingFlags.Static | BindingFlags.FlattenHierarchy; 12 | public static Dictionary fields = new Dictionary(); 13 | public static FieldInfo GetFieldFast(this Type type, String fieldName, String fieldType, String baseType) 14 | { 15 | var key = type.FullName + ":" + fieldName + "(" + fieldType + ")" + " " + baseType; 16 | if (fields.ContainsKey(key)) return fields[key]; 17 | //UnityEngine.Debug.Log(key); 18 | var field = type.GetField(fieldName, flags); 19 | //UnityEngine.Debug.Log(field); 20 | if (field == null || !field.FieldType.Name.Contains(fieldType) || !field.DeclaringType.Name.Contains(baseType)) 21 | field = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static).FirstOrDefault(f => 22 | (String.IsNullOrEmpty(fieldName) || f.Name == fieldName) 23 | && f.FieldType.ToString().Contains(fieldType) 24 | && f.DeclaringType.ToString().Contains(baseType)); 25 | if (field == null || !field.FieldType.Name.Contains(fieldType) || !field.DeclaringType.Name.Contains(baseType)) 26 | field = type.GetFields(flags).FirstOrDefault(f => 27 | (String.IsNullOrEmpty(fieldName) || f.Name == fieldName) 28 | && f.FieldType.ToString().Contains(fieldType) 29 | && f.DeclaringType.ToString().Contains(baseType)); 30 | if (field == null) field = type.GetField(fieldName, flags); 31 | if (field != null) fields[key] = field; 32 | return field; 33 | } 34 | public static Dictionary properties = new Dictionary(); 35 | public static PropertyInfo GetPropertyFast(this Type type, String propertyName, String propretyType, String baseType) 36 | { 37 | var key = type.FullName + "." + propertyName + "(" + propretyType + ")" + " " + baseType; 38 | if (properties.ContainsKey(key)) return properties[key]; 39 | var property = type.GetProperty(propertyName, flags); 40 | if (!property.PropertyType.Name.Contains(propretyType) || !property.DeclaringType.Name.Contains(baseType)) 41 | property = type.GetProperties(flags).FirstOrDefault(p => p.Name == propertyName 42 | && p.PropertyType.ToString().Contains(propretyType) 43 | && p.DeclaringType.ToString().Contains(baseType)); 44 | if (property != null) properties[key] = property; 45 | return property; 46 | } 47 | public static Object GetField(this Object obj, String fieldName) 48 | { 49 | return obj.GetField(fieldName, "", ""); 50 | } 51 | public static Object GetField(this Object obj, String fieldName, String fieldType, String baseType) 52 | { 53 | if (obj == null) return null; 54 | var objType = obj is Type ? (Type)obj : obj.GetType(); 55 | var field = objType.GetFieldFast(fieldName, fieldType, baseType); 56 | if (field != null) return field.IsStatic ? field.GetValue(null) : field.GetValue(obj); 57 | //if (field != null) return obj is Type ? field.GetValue(null) : field.GetValue(obj); 58 | var property = objType.GetPropertyFast(fieldName, fieldType, baseType); 59 | if (property != null) return obj is Type ? property.GetValue(null, null) : property.GetValue(obj, null); 60 | return null; 61 | } 62 | public static T GetField(this Object obj) 63 | { 64 | return obj.GetField("", "", ""); 65 | } 66 | public static T GetField(this Object obj, String fieldName) 67 | { 68 | return obj.GetField(fieldName, "", ""); 69 | } 70 | public static Dictionary staticFields = new Dictionary(); 71 | public static T GetField(this Object obj, String fieldName, String fieldType, String baseType) 72 | { 73 | if (String.IsNullOrEmpty(fieldType)) fieldType = typeof(T).Name; 74 | if (String.IsNullOrEmpty(baseType)) baseType = obj is Type ? ((Type)obj).Name : obj.GetType().Name; 75 | return (T)GetField(obj, fieldName, fieldType, baseType); 76 | } 77 | public static void SetField(this Object obj, String fieldName, String fieldType, String baseType, T val) 78 | { 79 | if (obj == null) return; 80 | var objType = obj.GetType(); 81 | if (obj is Type) 82 | objType = (Type)obj; 83 | var field = objType.GetFieldFast(fieldName, fieldType, baseType); 84 | if (field != null) 85 | { 86 | field.SetValue(obj, val); 87 | return; 88 | } 89 | var property = objType.GetPropertyFast(fieldName, fieldType, baseType); 90 | if (property != null) property.SetValue(obj, val, null); 91 | } 92 | public static void SetField(this Object obj, String fieldName, T val) 93 | { 94 | obj.SetField(fieldName, val, "", ""); 95 | } 96 | public static void SetField(this Object obj, String fieldName, T val, String fieldType, String baseType) 97 | { 98 | if (String.IsNullOrEmpty(fieldType)) 99 | fieldType = typeof(T).Name; 100 | if (String.IsNullOrEmpty(baseType)) 101 | baseType = obj is Type ? ((Type)obj).Name : obj.GetType().Name; 102 | SetField(obj, fieldName, fieldType, baseType, val); 103 | } 104 | public static List GetList(this Object obj) 105 | { 106 | var methods = obj.GetType().GetMethods(flags); 107 | var obj_get_Item = methods.First(m => m.Name == "get_Item"); 108 | var obj_Count = obj.GetType().GetProperty("Count"); 109 | var count = (Int32)obj_Count.GetValue(obj, new Object[0]); 110 | var elements = new List(); 111 | for (Int32 i = 0; i < count; i++) 112 | elements.Add(obj_get_Item.Invoke(obj, new Object[] { i })); 113 | return elements; 114 | } 115 | public static Dictionary methods = new Dictionary(); 116 | public static MethodInfo GetMethodFast(this Type type, String methodName) 117 | { 118 | var key = type.FullName + "." + methodName; 119 | if (methods.ContainsKey(key)) return methods[key]; 120 | var method = type.GetMethod(methodName, flags); 121 | if (method != null) methods[key] = method; 122 | return method; 123 | } 124 | public static Object Invoke(this Object obj, String methodName, params Object[] paramArray) 125 | { 126 | var type = obj is Type ? (Type)obj : obj.GetType(); 127 | var method = GetMethodFast(type, methodName); 128 | return obj is Type ? method.Invoke(null, paramArray) : method.Invoke(obj, paramArray); 129 | } 130 | /*public static T CreateInstance(params Object[] paramArray) 131 | { 132 | return (T)Activator.CreateInstance(typeof(T), args: paramArray); 133 | }*/ 134 | } 135 | } -------------------------------------------------------------------------------- /TemSharp/Common/SceneDebugger.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Concurrent; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Reflection; 6 | using UnityEngine; 7 | 8 | namespace TemSharp 9 | { 10 | public class SceneDebugger : MonoBehaviour 11 | { 12 | Int32 Margin = 5; 13 | Int32 HierarchyWindowId; 14 | Int32 ProjectWindowId { get { return HierarchyWindowId + 1; } } 15 | Int32 InspectorWindowId { get { return ProjectWindowId + 1; } } 16 | 17 | Rect HierarchyWindow; 18 | Int32 HierarchyWidth = 400; 19 | Vector2 HierarchyScrollPos; 20 | String SearchText = ""; 21 | Vector2 PropertiesScrollPos; 22 | Transform SelectedGameObject; 23 | HashSet ExpandedObjs = new HashSet(); 24 | 25 | Rect ProjectWindow; 26 | Int32 ProjectWidth = 400; 27 | Vector2 ProjectScrollPos; 28 | ConcurrentDictionary ExpandedObjects = new ConcurrentDictionary(); 29 | 30 | Rect InspectorWindow; 31 | Int32 InspectorWidth = 350; 32 | void Start() 33 | { 34 | HierarchyWindowId = GetHashCode(); 35 | 36 | HierarchyWindow = new Rect(Screen.width - HierarchyWidth - Margin, Margin, HierarchyWidth, Screen.height - Margin * 2); 37 | ProjectWindow = new Rect(HierarchyWindow.x - Margin - ProjectWidth, Margin, ProjectWidth, Screen.height - Margin * 2); 38 | InspectorWindow = new Rect(ProjectWindow.x - Margin - InspectorWidth, Margin, InspectorWidth, Screen.height - Margin * 2); 39 | } 40 | void LateUpdate() 41 | { 42 | Cursor.visible = true; 43 | } 44 | void OnGUI() 45 | { 46 | HierarchyWindow = GUILayout.Window(HierarchyWindowId, HierarchyWindow, HierarchyWindowMethod, "Hierarchy"); 47 | ProjectWindow = GUILayout.Window(ProjectWindowId, ProjectWindow, ProjectWindowMethod, "Project"); 48 | } 49 | #region Hierarchy GUI 50 | void DisplayGameObject(GameObject gameObj, Int32 level) 51 | { 52 | GUILayout.BeginHorizontal(); 53 | { 54 | GUILayout.Space(level * 20); 55 | var color = GUI.color; 56 | if (SelectedGameObject == gameObj.transform) 57 | GUI.color = Color.green; 58 | if (!gameObj.activeSelf && gameObj.transform.childCount == 0) 59 | GUI.color = Color.magenta; 60 | else if (gameObj.transform.childCount == 0) 61 | GUI.color = Color.yellow; 62 | else if (!gameObj.activeSelf) 63 | GUI.color = Color.red; 64 | if (GUILayout.Toggle(ExpandedObjs.Contains(gameObj), gameObj.name, GUILayout.ExpandWidth(false))) 65 | { 66 | if (!ExpandedObjs.Contains(gameObj)) 67 | { 68 | ExpandedObjs.Add(gameObj); 69 | SelectedGameObject = gameObj.transform; 70 | } 71 | } 72 | else 73 | { 74 | if (ExpandedObjs.Contains(gameObj)) 75 | { 76 | ExpandedObjs.Remove(gameObj); 77 | SelectedGameObject = gameObj.transform; 78 | } 79 | } 80 | GUI.color = color; 81 | } 82 | GUILayout.EndHorizontal(); 83 | if (ExpandedObjs.Contains(gameObj)) 84 | for (var i = 0; i < gameObj.transform.childCount; ++i) 85 | DisplayGameObject(gameObj.transform.GetChild(i).gameObject, level + 1); 86 | } 87 | void HierarchyWindowMethod(Int32 id) 88 | { 89 | GUILayout.BeginVertical(GUI.skin.box); 90 | { 91 | GUILayout.BeginHorizontal(); 92 | { 93 | SearchText = GUILayout.TextField(SearchText, GUILayout.ExpandWidth(true)); 94 | if (GUILayout.Button("Search", GUILayout.ExpandWidth(false))) 95 | { } 96 | } 97 | GUILayout.EndHorizontal(); 98 | var rootObjects = new List(); 99 | foreach (Transform xform in GameObject.FindObjectsOfType()) 100 | if (xform.parent == null) 101 | rootObjects.Add(xform.gameObject); 102 | //var rootObjects = UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects(); 103 | if (SelectedGameObject == null) 104 | SelectedGameObject = rootObjects.First().transform; 105 | HierarchyScrollPos = GUILayout.BeginScrollView(HierarchyScrollPos, GUILayout.Height(HierarchyWindow.height / 3), GUILayout.ExpandWidth(true)); 106 | { 107 | foreach (var rootObject in rootObjects) 108 | DisplayGameObject(rootObject, 0); 109 | } 110 | GUILayout.EndScrollView(); 111 | } 112 | GUILayout.EndVertical(); 113 | GUILayout.BeginVertical(GUI.skin.box); 114 | { 115 | PropertiesScrollPos = GUILayout.BeginScrollView(PropertiesScrollPos, GUI.skin.box); 116 | { 117 | var fullName = SelectedGameObject.name; 118 | var parentTransform = SelectedGameObject.parent; 119 | while (parentTransform != null) 120 | { 121 | fullName = parentTransform.name + "/" + fullName; 122 | parentTransform = parentTransform.parent; 123 | } 124 | GUILayout.Label(fullName); 125 | GUILayout.BeginHorizontal(); 126 | { 127 | GUILayout.Label(SelectedGameObject.gameObject.layer + " : " + LayerMask.LayerToName(SelectedGameObject.gameObject.layer)); 128 | GUILayout.FlexibleSpace(); 129 | SelectedGameObject.gameObject.SetActive(GUILayout.Toggle(SelectedGameObject.gameObject.activeSelf, "Active", GUILayout.ExpandWidth(false))); 130 | if (GUILayout.Button("?")) 131 | Console.WriteLine("?"); 132 | if (GUILayout.Button("X")) 133 | Destroy(SelectedGameObject.gameObject); 134 | } 135 | GUILayout.EndHorizontal(); 136 | foreach (var component in SelectedGameObject.GetComponents()) 137 | { 138 | GUILayout.BeginHorizontal(GUI.skin.box); 139 | { 140 | 141 | if (component is Behaviour) 142 | (component as Behaviour).enabled = GUILayout.Toggle((component as Behaviour).enabled, "", GUILayout.ExpandWidth(false)); 143 | 144 | GUILayout.Label(component.GetType().Name + " : " + component.GetType().Namespace); 145 | GUILayout.FlexibleSpace(); 146 | if (GUILayout.Button("?")) 147 | Console.WriteLine("?"); 148 | if (!(component is Transform)) 149 | if (GUILayout.Button("X")) 150 | Destroy(component); 151 | } 152 | GUILayout.EndHorizontal(); 153 | } 154 | } 155 | GUILayout.EndScrollView(); 156 | } 157 | GUILayout.EndVertical(); 158 | GUI.DragWindow(); 159 | } 160 | #endregion 161 | #region Project GUI 162 | void ProjectWindowMethod(Int32 id) 163 | { 164 | GUILayout.BeginVertical(GUI.skin.box); 165 | { 166 | ProjectScrollPos = GUILayout.BeginScrollView(ProjectScrollPos, GUILayout.Height(ProjectWindow.height / 3), GUILayout.ExpandWidth(true)); 167 | { 168 | var assemblies = AppDomain.CurrentDomain.GetAssemblies(); 169 | foreach (var assembly in assemblies) 170 | { 171 | ExpandedObjects[assembly] = GUILayout.Toggle(ExpandedObjects.ContainsKey(assembly) ? ExpandedObjects[assembly] : false, assembly.GetName().Name, GUILayout.ExpandWidth(false)); 172 | if (ExpandedObjects[assembly]) 173 | { 174 | var types = assembly.GetTypes().Where(t => t.IsClass && !t.IsAbstract && !t.ContainsGenericParameters).ToList(); 175 | foreach (var type in types) 176 | { 177 | var staticfields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy).Count(f => f.Name != "OffsetOfInstanceIDInCPlusPlusObject"); 178 | if (staticfields == 0) 179 | continue; 180 | GUILayout.BeginHorizontal(); 181 | { 182 | var color = GUI.color; 183 | GUILayout.Space(20); 184 | ExpandedObjects[type] = GUILayout.Toggle(ExpandedObjects.ContainsKey(type) ? ExpandedObjects[type] : false, type.Name, GUILayout.ExpandWidth(false)); 185 | GUI.color = color; 186 | } 187 | GUILayout.EndHorizontal(); 188 | if (ExpandedObjects[type]) 189 | { 190 | var fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy); 191 | foreach (var field in fields) 192 | { 193 | if (field.Name == "OffsetOfInstanceIDInCPlusPlusObject") continue; 194 | //var val = field.GetValue(null); 195 | GUILayout.BeginHorizontal(); 196 | { 197 | GUILayout.Space(40); 198 | ExpandedObjects[field] = GUILayout.Toggle(ExpandedObjects.ContainsKey(field) ? ExpandedObjects[field] : false, field.Name + " : " + field.FieldType, GUI.skin.label, GUILayout.ExpandWidth(false)); 199 | } 200 | GUILayout.EndHorizontal(); 201 | } 202 | } 203 | } 204 | } 205 | } 206 | } 207 | GUILayout.EndScrollView(); 208 | } 209 | GUILayout.EndVertical(); 210 | GUI.DragWindow(); 211 | } 212 | #endregion 213 | } 214 | } -------------------------------------------------------------------------------- /TemSharp/Init.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Linq; 3 | namespace TemSharp 4 | { 5 | public class Init 6 | { 7 | public static UnityEngine.GameObject BaseObject; 8 | public static void DisableAnticheat() 9 | { 10 | UnityEngine.Object.DestroyImmediate(UnityEngine.Object.FindObjectOfType()); 11 | UnityEngine.Object.DestroyImmediate(UnityEngine.Object.FindObjectOfType()); 12 | UnityEngine.Object.DestroyImmediate(UnityEngine.Object.FindObjectOfType()); 13 | UnityEngine.Object.DestroyImmediate(UnityEngine.Object.FindObjectOfType()); 14 | UnityEngine.Object.DestroyImmediate(UnityEngine.Object.FindObjectOfType()); 15 | } 16 | public static void Load() 17 | { 18 | DisableAnticheat(); 19 | while (BaseObject = UnityEngine.GameObject.Find("TemSharp")) 20 | UnityEngine.Object.Destroy(BaseObject); 21 | BaseObject = new UnityEngine.GameObject("TemSharp"); 22 | UnityEngine.Object.DontDestroyOnLoad(BaseObject); 23 | BaseObject.SetActive(false); 24 | var types = Assembly.GetExecutingAssembly().GetTypes().ToList().Where(t => t.BaseType == typeof(UnityEngine.MonoBehaviour) && !t.IsNested); 25 | foreach (var type in types) 26 | { 27 | var component = (UnityEngine.MonoBehaviour)BaseObject.AddComponent(type); 28 | component.enabled = false; 29 | } 30 | BaseObject.GetComponent().enabled = true; 31 | BaseObject.GetComponent().enabled = true; 32 | BaseObject.SetActive(true); 33 | } 34 | 35 | public static void Unload() 36 | { 37 | UnityEngine.Object.Destroy(BaseObject); 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /TemSharp/Mods/MonsterInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using UnityEngine; 5 | using UnityEngine.EventSystems; 6 | using Temtem.Core; 7 | using Temtem.UI; 8 | using Temtem.World; 9 | using Sfs2X; 10 | using Sfs2X.Entities.Data; 11 | using Sfs2X.Requests; 12 | namespace TemSharp 13 | { 14 | public class MonsterInfo : MonoBehaviour 15 | { 16 | static Int32 Margin = 5; 17 | static Int32 WindowWidth = 150; 18 | Int32 WindowId; 19 | Rect Window = new Rect(Margin + WindowWidth + Margin, Margin, WindowWidth, 50); 20 | void Awake() 21 | { 22 | WindowId = GetHashCode(); 23 | } 24 | void OnGUI() 25 | { 26 | if (Cursor.visible) 27 | { 28 | Window = GUILayout.Window(WindowId, Window, WindowMethod, "monsters info", GUILayout.ExpandHeight(true)); 29 | } 30 | } 31 | void WindowMethod(Int32 id) 32 | { 33 | var monsters = typeof(Temtem.Battle.BattleClient).GetField().GetField("jhfmqrkmgep"); 34 | var detailMonsters = typeof(Temtem.Battle.BattleClient).GetField().GetField("jrnfkcppiql"); 35 | 36 | GUILayout.Label("fighting"); 37 | for (var i = 0; i < monsters.Count(); i++) 38 | { 39 | var monster = monsters[i]; 40 | if (monster == null) continue; 41 | GUILayout.Label(monster.Nickname + " (lvl " + monster.level + ")"); 42 | var detailedInfo = detailMonsters[i]; 43 | GUILayout.Label("sv_hp : " + detailedInfo.GetField("hqoqompkoko")); 44 | GUILayout.Label("sv_stam : " + detailedInfo.GetField("lkfqjncqjlh")); 45 | GUILayout.Label("sv_atk : " + detailedInfo.GetField("feefnfjirce")); 46 | GUILayout.Label("sv_def : " + detailedInfo.GetField("kgddimqgcgl")); 47 | GUILayout.Label("sv_spatk : " + detailedInfo.GetField("qmnfcgkfkje")); 48 | GUILayout.Label("sv_spdef : " + detailedInfo.GetField("foqcikgkjfi")); 49 | GUILayout.Label("sv_speed : " + detailedInfo.GetField("ljpogjmlrhd")); 50 | } 51 | GUI.DragWindow(); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /TemSharp/Mods/Notice.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | namespace TemSharp 4 | { 5 | public class Notice : MonoBehaviour 6 | { 7 | Int32 Width = 200; 8 | Int32 Height = 200; 9 | Int32 WindowId; 10 | Rect WindowRect; 11 | GUIStyle labelStyle; 12 | void Awake() 13 | { 14 | Width = Screen.width * 3 / 4; 15 | Height = Screen.height * 3 / 4; 16 | WindowRect = new Rect(Screen.width / 2 - Width / 2, Screen.height / 2 - Height / 2, Width, Height); 17 | WindowId = GetHashCode(); 18 | labelStyle = new GUIStyle("label"); 19 | labelStyle.alignment = TextAnchor.MiddleCenter; 20 | labelStyle.fontSize = 18; 21 | if (Environment.UserName == "shalzuth") enabled = false; 22 | } 23 | void OnGUI() 24 | { 25 | GUI.color = Color.black; 26 | WindowRect = GUILayout.Window(WindowId, WindowRect, WindowMethod, "shalzuth's news"); 27 | } 28 | 29 | void WindowMethod(Int32 id) 30 | { 31 | GUILayout.Label("Tem" + "Sharp by shalzuth", labelStyle); 32 | GUILayout.Label("THIS IS FREE AND OPEN SOURCE SOFTWARE", labelStyle); 33 | GUILayout.Label("If you paid for this mod, you got scammed", labelStyle); 34 | GUILayout.Label("If you downloaded this from anywhere but https://github.com/shalzuth/Tem" + "Sharp/releases/download/beta/Tem" + "Sharp.Loader.exe, you probably have a virus.", labelStyle); 35 | GUILayout.Label("Disabled hacks due to ban wave. Monster Info and Zoom only now.", labelStyle); 36 | if (GUILayout.Button("Close Notice")) 37 | enabled = false; 38 | if (GUILayout.Button("GitHub Page")) 39 | Application.OpenURL("https://github.com/shalzuth/Tem" + "Sharp"); 40 | if (GUILayout.Button("Discord Server (for learning and community, not support)")) 41 | Application.OpenURL("https://discord.gg/799qSNR"); 42 | GUI.DragWindow(); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /TemSharp/Mods/RemoveName.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using UnityEngine; 5 | namespace TemSharp 6 | { 7 | public class RemoveName : MonoBehaviour 8 | { 9 | void OnEnable() 10 | { 11 | typeof(Temtem.UI.InGameMenuUI).GetField().GetField("versionLabel").text = ""; 12 | typeof(Temtem.UI.MonsterBattleStatsUI).GetField().GetField("versionLabel").text = ""; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /TemSharp/Mods/Zoom.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | 4 | namespace TemSharp 5 | { 6 | public class Zoom : MonoBehaviour 7 | { 8 | Single MinValue = 2; 9 | Single MaxValue = 40; 10 | Single ScalingValue = 7; 11 | void OnEnable() 12 | { 13 | Camera.allCameras[0].GetComponent().enabled = false; 14 | Camera.allCameras[0].GetComponent().enabled = false; 15 | Camera.allCameras[0].GetComponent().enabled = false; 16 | Menu.ScalingOptions.Add(GetType()); 17 | } 18 | void Update() 19 | { 20 | // fix minimap zooming... 21 | //var minimap = Temtem.UI.InGameMenuUI.nkqrjhelndm.GetField("fcmdqepnjgl").GetComponent(); 22 | //RectTransform component = Temtem.UI.InGameMenuUI.nkqrjhelndm.GetField("fcmdqepnjgl").GetComponent(); 23 | //component.anchoredPosition = mreneodkfed; 24 | //component.localEulerAngles = new Vector3(781f, 2f, 0f); 25 | //component.localEulerAngles = new Vector3(0, 0f, 0f); 26 | //component.anchoredPosition = vector; 27 | //component.sizeDelta = new Vector2(100, 100); 28 | typeof(Temtem.Configuration.VisualSettings).SetField("cameraDistance", ScalingValue); 29 | } 30 | void OnDisable() 31 | { 32 | typeof(Temtem.Configuration.VisualSettings).SetField("cameraDistance", 7); 33 | Camera.allCameras[0].GetComponent().enabled = true; 34 | Camera.allCameras[0].GetComponent().enabled = true; 35 | Camera.allCameras[0].GetComponent().enabled = true; 36 | Menu.ScalingOptions.Remove(GetType()); 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /TemSharp/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("TemSharp")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("TemSharp")] 13 | [assembly: AssemblyCopyright("Copyright © 2020")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("2f633f85-985c-4e5c-9358-94371f449c3c")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /TemSharp/TemSharp.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {2F633F85-985C-4E5C-9358-94371F449C3C} 8 | Library 9 | Properties 10 | TemSharp 11 | TemSharp 12 | v4.7.2 13 | 512 14 | true 15 | 16 | 17 | true 18 | bin\x64\Debug\ 19 | DEBUG;TRACE 20 | full 21 | x64 22 | 7.3 23 | prompt 24 | MinimumRecommendedRules.ruleset 25 | true 26 | 27 | 28 | bin\x64\Release\ 29 | TRACE 30 | true 31 | pdbonly 32 | x64 33 | 7.3 34 | prompt 35 | MinimumRecommendedRules.ruleset 36 | true 37 | 38 | 39 | 40 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\Assembly-CSharp.dll 41 | 42 | 43 | False 44 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\Assembly-CSharp-firstpass.dll 45 | 46 | 47 | False 48 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\com.unity.postprocessing.Runtime.dll 49 | 50 | 51 | False 52 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\SmartFox2X.dll 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | False 64 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\Unity.TextMeshPro.dll 65 | 66 | 67 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\UnityEngine.dll 68 | 69 | 70 | False 71 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\UnityEngine.AIModule.dll 72 | 73 | 74 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\UnityEngine.CoreModule.dll 75 | 76 | 77 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\UnityEngine.IMGUIModule.dll 78 | 79 | 80 | False 81 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\UnityEngine.PhysicsModule.dll 82 | 83 | 84 | False 85 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\UnityEngine.TextRenderingModule.dll 86 | 87 | 88 | False 89 | E:\SteamLibrary\steamapps\common\Temtem\Temtem_Data\Managed\UnityEngine.UI.dll 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | --------------------------------------------------------------------------------