├── .gitattributes ├── .gitignore ├── README.md ├── WatyBotInjector ├── WatyBotInjector.vcxproj ├── WatyBotInjector.vcxproj.filters └── main.cpp ├── WatyBotManager ├── GeneralSettings.h ├── MainForm.cpp ├── MainForm.h ├── MainForm.resx ├── Tab.cpp ├── Tab.h ├── WatyBotManager.vcxproj ├── WatyBotManager.vcxproj.filters └── main.cpp ├── WatyBotRevamp.sln ├── WatyBotRevamp ├── Addys.h ├── AutoSkill.cpp ├── AutoSkill.h ├── ChangeChannel.cpp ├── ChangeChannel.h ├── HackAddys.h ├── Hacks.cpp ├── Hacks.h ├── Hooks.cpp ├── Log.cpp ├── Log.h ├── MainDll.cpp ├── MainForm.cpp ├── MainForm.h ├── MainForm.resx ├── MapleStory.cpp ├── MapleStory.h ├── Memory.cpp ├── Memory.h ├── PacketDialog.h ├── PacketDialog.resx ├── PacketSender.cpp ├── PacketSender.h ├── SPControl.cpp ├── SPControl.h ├── SPControlDialog.cpp ├── SPControlDialog.h ├── SPControlDialog.resx ├── Settings.cpp ├── Settings.h ├── StopWatch.h ├── WatyBotRevamp.vcxproj ├── WatyBotRevamp.vcxproj.filters ├── detours.lib ├── noncopyable.h └── syelog.lib └── WatyBotUpdater ├── AOBs.xml ├── Address.h ├── MainDLL.cpp ├── MyForm.cpp ├── MyForm.h ├── MyForm.resx ├── PatternFind.cpp ├── PatternFind.h ├── WatyBotUpdater.vcxproj └── WatyBotUpdater.vcxproj.filters /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ################# 2 | ## Eclipse 3 | ################# 4 | 5 | *.pydevproject 6 | .project 7 | .metadata 8 | bin/ 9 | tmp/ 10 | *.tmp 11 | *.bak 12 | *.swp 13 | *~.nib 14 | local.properties 15 | .classpath 16 | .settings/ 17 | .loadpath 18 | 19 | # External tool builders 20 | .externalToolBuilders/ 21 | 22 | # Locally stored "Eclipse launch configurations" 23 | *.launch 24 | 25 | # CDT-specific 26 | .cproject 27 | 28 | # PDT-specific 29 | .buildpath 30 | 31 | 32 | ################# 33 | ## Visual Studio 34 | ################# 35 | 36 | ## Ignore Visual Studio temporary files, build results, and 37 | ## files generated by popular Visual Studio add-ons. 38 | 39 | # User-specific files 40 | *.suo 41 | *.user 42 | *.sln.docstates 43 | 44 | # Build results 45 | 46 | [Dd]ebug/ 47 | [Rr]elease/ 48 | x64/ 49 | build/ 50 | [Bb]in/ 51 | [Oo]bj/ 52 | 53 | # MSTest test Results 54 | [Tt]est[Rr]esult*/ 55 | [Bb]uild[Ll]og.* 56 | 57 | *_i.c 58 | *_p.c 59 | *.ilk 60 | *.meta 61 | *.obj 62 | *.pch 63 | *.pdb 64 | *.pgc 65 | *.pgd 66 | *.rsp 67 | *.sbr 68 | *.tlb 69 | *.tli 70 | *.tlh 71 | *.tmp 72 | *.tmp_proj 73 | *.log 74 | *.vspscc 75 | *.vssscc 76 | .builds 77 | *.pidb 78 | *.log 79 | *.scc 80 | 81 | # Visual C++ cache files 82 | ipch/ 83 | *.aps 84 | *.ncb 85 | *.opensdf 86 | *.sdf 87 | *.cachefile 88 | 89 | # Visual Studio profiler 90 | *.psess 91 | *.vsp 92 | *.vspx 93 | 94 | # Guidance Automation Toolkit 95 | *.gpState 96 | 97 | # ReSharper is a .NET coding add-in 98 | _ReSharper*/ 99 | *.[Rr]e[Ss]harper 100 | 101 | # TeamCity is a build add-in 102 | _TeamCity* 103 | 104 | # DotCover is a Code Coverage Tool 105 | *.dotCover 106 | 107 | # NCrunch 108 | *.ncrunch* 109 | .*crunch*.local.xml 110 | 111 | # Installshield output folder 112 | [Ee]xpress/ 113 | 114 | # DocProject is a documentation generator add-in 115 | DocProject/buildhelp/ 116 | DocProject/Help/*.HxT 117 | DocProject/Help/*.HxC 118 | DocProject/Help/*.hhc 119 | DocProject/Help/*.hhk 120 | DocProject/Help/*.hhp 121 | DocProject/Help/Html2 122 | DocProject/Help/html 123 | 124 | # Click-Once directory 125 | publish/ 126 | 127 | # Publish Web Output 128 | *.Publish.xml 129 | *.pubxml 130 | 131 | # NuGet Packages Directory 132 | ## TODO: If you have NuGet Package Restore enabled, uncomment the next line 133 | #packages/ 134 | 135 | # Windows Azure Build Output 136 | csx 137 | *.build.csdef 138 | 139 | # Windows Store app package directory 140 | AppPackages/ 141 | 142 | # Others 143 | sql/ 144 | *.Cache 145 | ClientBin/ 146 | [Ss]tyle[Cc]op.* 147 | ~$* 148 | *~ 149 | *.dbmdl 150 | *.[Pp]ublish.xml 151 | *.pfx 152 | *.publishsettings 153 | 154 | # RIA/Silverlight projects 155 | Generated_Code/ 156 | 157 | # Backup & report files from converting an old project file to a newer 158 | # Visual Studio version. Backup files are not needed, because we have git ;-) 159 | _UpgradeReport_Files/ 160 | Backup*/ 161 | UpgradeLog*.XML 162 | UpgradeLog*.htm 163 | 164 | # SQL Server files 165 | App_Data/*.mdf 166 | App_Data/*.ldf 167 | 168 | ############# 169 | ## Windows detritus 170 | ############# 171 | 172 | # Windows image file caches 173 | Thumbs.db 174 | ehthumbs.db 175 | 176 | # Folder config file 177 | Desktop.ini 178 | 179 | # Recycle Bin used on file shares 180 | $RECYCLE.BIN/ 181 | 182 | # Mac crap 183 | .DS_Store 184 | 185 | 186 | ############# 187 | ## Python 188 | ############# 189 | 190 | *.py[co] 191 | 192 | # Packages 193 | *.egg 194 | *.egg-info 195 | dist/ 196 | build/ 197 | eggs/ 198 | parts/ 199 | var/ 200 | sdist/ 201 | develop-eggs/ 202 | .installed.cfg 203 | 204 | # Installer logs 205 | pip-log.txt 206 | 207 | # Unit test / coverage reports 208 | .coverage 209 | .tox 210 | 211 | #Translations 212 | *.mo 213 | 214 | #Mr Developer 215 | .mr.developer.cfg 216 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Welcome to WatyBot on Github! 2 | 3 | ### WatyBot is a small project of me 4 | 5 | ### Compiling WatyBot: 6 | If you want to compile WatyBot yourself, you need to have the folowing: 7 | * Visual Studio (2012) 8 | 9 | 10 | Just open the project, change the build directorys and compile :) 11 | -------------------------------------------------------------------------------- /WatyBotInjector/WatyBotInjector.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release Tazz 10 | Win32 11 | 12 | 13 | Release 14 | Win32 15 | 16 | 17 | 18 | {26B0D4D4-27B8-4A92-B453-732E7D44348A} 19 | Win32Proj 20 | WatyBotInjector 21 | 22 | 23 | 24 | Application 25 | true 26 | v120 27 | MultiByte 28 | 29 | 30 | Application 31 | false 32 | v120 33 | false 34 | MultiByte 35 | true 36 | 37 | 38 | Application 39 | false 40 | v120 41 | true 42 | MultiByte 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | true 59 | 60 | 61 | false 62 | D:\Program Files (x86)\NEXON\Europe MapleStory\ 63 | 64 | 65 | false 66 | D:\Europe MapleStory for Vista\ 67 | 68 | 69 | 70 | 71 | 72 | Level3 73 | Disabled 74 | WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) 75 | ProgramDatabase 76 | 77 | 78 | Console 79 | true 80 | 81 | 82 | 83 | 84 | Level3 85 | 86 | 87 | MaxSpeed 88 | true 89 | true 90 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 91 | 92 | 93 | Console 94 | true 95 | true 96 | true 97 | RequireAdministrator 98 | 99 | 100 | 101 | 102 | Level3 103 | 104 | 105 | MaxSpeed 106 | true 107 | true 108 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 109 | 110 | 111 | Console 112 | true 113 | true 114 | true 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /WatyBotInjector/WatyBotInjector.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Source Files 20 | 21 | 22 | -------------------------------------------------------------------------------- /WatyBotInjector/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | using namespace msclr::interop; 6 | using namespace System::Diagnostics; 7 | using namespace System::IO; 8 | using namespace System; 9 | using namespace System::Windows::Forms; 10 | using namespace std; 11 | 12 | HANDLE hProcess = NULL; 13 | DWORD dwProcessId = 0; 14 | HWND hProcesswnd = NULL; 15 | 16 | 17 | bool inject(std::string fileName, DWORD pID) 18 | { 19 | if (!pID) return false; 20 | 21 | HANDLE Proc; 22 | LPVOID RemoteString, LoadLibAddy; 23 | Proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID); 24 | if (!Proc) 25 | { 26 | MessageBox::Show("OpenProcess() failed: " + GetLastError()); 27 | return false; 28 | } 29 | LoadLibAddy = (LPVOID) GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA"); 30 | // Allocate space in the process for our DLL 31 | RemoteString = (LPVOID) VirtualAllocEx(Proc, NULL, fileName.length(), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); 32 | // Write the string name of our DLL in the memory allocated 33 | WriteProcessMemory(Proc, (LPVOID)RemoteString, fileName.c_str(), fileName.length(), NULL); 34 | // Load our DLL 35 | CreateRemoteThread(Proc, NULL, NULL, (LPTHREAD_START_ROUTINE) LoadLibAddy, (LPVOID) RemoteString, NULL, NULL); 36 | CloseHandle(Proc); 37 | return true; 38 | } 39 | 40 | int main() 41 | { 42 | cout << "WatyBotInjector 2.2 Beta WindowsXP Support:" << endl; 43 | cout << "You need to have WatyBot.dll and this program in the Maplestory folder!!!!" << endl; 44 | cout << "Full credits to \"TheFox\"" << endl << endl; 45 | 46 | if (File::Exists(Directory::GetCurrentDirectory() + "\\MapleStory.exe")) cout << "Found MapleStory.exe!" << endl; 47 | else 48 | { 49 | cout << "Couldn't find MapleStory.exe!"; 50 | system("pause"); 51 | return false; 52 | } 53 | 54 | if (File::Exists(Directory::GetCurrentDirectory() + "\\WatyBot.dll")) cout << "Found WatyBot.dll!" << endl; 55 | else 56 | { 57 | cout << "Couldn't find WatyBot.dll!"; 58 | system("pause"); 59 | return false; 60 | } 61 | 62 | cout << "Creating a new Process..." << endl; 63 | Process^ procMS = gcnew Process(); 64 | procMS->StartInfo->FileName = Directory::GetCurrentDirectory() + "\\MapleStory.exe"; 65 | 66 | cout << "Trying to start MS..." << endl; 67 | if (procMS->Start()) cout << "Started MS succesfull!" << endl; 68 | else 69 | { 70 | cout << "Failed in starting MS :(" << endl; 71 | system("pause"); 72 | return false; 73 | } 74 | 75 | cout << "Waiting for MS..." << endl; 76 | WaitForInputIdle((HANDLE) procMS->Handle.ToPointer(), INFINITE); 77 | Sleep(1000); 78 | 79 | if (procMS->CloseMainWindow()) cout << "Closed the Play screen..." << endl; 80 | else 81 | { 82 | cout << "A Error occured while trying to close the Play screen..." << endl; 83 | system("pause"); 84 | return false; 85 | } 86 | 87 | cout << "Trying to inject WatyBot..." << endl; 88 | if (inject(marshal_as(Directory::GetCurrentDirectory() + "\\WatyBot.dll"), procMS->Id)) cout << "Injected WatyBot :)" << endl; 89 | else 90 | { 91 | cout << "Failed in injecting WatyBot :(" << endl; 92 | system("pause"); 93 | return false; 94 | } 95 | 96 | if (File::Exists(Directory::GetCurrentDirectory() + "\\WatyBotUpdater.dll")) inject(marshal_as(Directory::GetCurrentDirectory() + "\\WatyBotUpdater.dll"), procMS->Id); 97 | if (File::Exists(Directory::GetCurrentDirectory() + "\\MSCRC.dll")) inject(marshal_as(Directory::GetCurrentDirectory() + "\\MSCRC.dll"), procMS->Id); 98 | 99 | return true; 100 | } 101 | -------------------------------------------------------------------------------- /WatyBotManager/GeneralSettings.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | public ref class GeneralSettings 3 | { 4 | public: 5 | GeneralSettings(void) 6 | { 7 | WatyBotFileName = ""; 8 | MSFileName = ""; 9 | SelectedTabIndex = -1; 10 | } 11 | 12 | ~GeneralSettings(void) 13 | { 14 | 15 | } 16 | 17 | property System::String^ WatyBotFileName; 18 | property System::String^ MSFileName; 19 | property int SelectedTabIndex; 20 | }; 21 | 22 | -------------------------------------------------------------------------------- /WatyBotManager/MainForm.cpp: -------------------------------------------------------------------------------- 1 | #include "MainForm.h" 2 | #include "Tab.h" 3 | using namespace WatyBotManager; 4 | using namespace Xml::Serialization; 5 | #define ConfigFile Environment::GetFolderPath(Environment::SpecialFolder::ApplicationData) + "\\Waty\\WatyBotManager.xml" 6 | BOOL IsElevated( ) { 7 | BOOL fRet = FALSE; 8 | HANDLE hToken = NULL; 9 | if( OpenProcessToken( GetCurrentProcess( ),TOKEN_QUERY,&hToken ) ) { 10 | TOKEN_ELEVATION Elevation; 11 | DWORD cbSize = sizeof( TOKEN_ELEVATION ); 12 | if( GetTokenInformation( hToken, TokenElevation, &Elevation, sizeof( Elevation ), &cbSize ) ) { 13 | fRet = Elevation.TokenIsElevated; 14 | } 15 | } 16 | if( hToken ) { 17 | CloseHandle( hToken ); 18 | } 19 | return fRet; 20 | } 21 | 22 | gcroot Settings; 23 | 24 | void Main() 25 | { 26 | Application::EnableVisualStyles(); 27 | Application::SetCompatibleTextRenderingDefault(false); 28 | if(IsElevated()) Application::Run(gcnew MainForm); 29 | else MessageBox::Show("Run as administrator!"); 30 | Application::Exit(); 31 | } 32 | void StartThread() 33 | { 34 | Threading::Thread^ tMain = gcnew Threading::Thread(gcnew Threading::ThreadStart(Main)); 35 | tMain->SetApartmentState(Threading::ApartmentState::STA); 36 | tMain->Start(); 37 | } 38 | void MainForm::MainForm_Load(System::Object^ sender, System::EventArgs^ e) 39 | { 40 | Tabs = gcnew ArrayList; 41 | 42 | if(File::Exists(ConfigFile)) 43 | { 44 | TextReader^ reader = gcnew StreamReader(ConfigFile); 45 | XmlSerializer^ s = gcnew XmlSerializer(GeneralSettings::typeid); 46 | try 47 | { 48 | Settings = safe_cast(s->Deserialize(reader)); 49 | return; 50 | } 51 | catch(Exception^){} 52 | reader->Close(); 53 | } 54 | Settings = gcnew GeneralSettings; 55 | } 56 | 57 | void MainForm::menuToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) 58 | { 59 | if(!File::Exists(Settings->MSFileName)) 60 | ShowInfo("You forgot to set the MapleStory Location, you can find the option under the menu 'Settings'."); 61 | else if(!File::Exists(Settings->WatyBotFileName)) 62 | ShowInfo("You forgot to set the WatyBot Location, you can find the option under the menu 'Settings'."); 63 | else 64 | { 65 | //Initialize vars 66 | Panel^ pMS = gcnew Panel; 67 | Panel^ pWatyBot = gcnew Panel; 68 | 69 | //initialize a new TabPage 70 | TabPage^ tabPage = gcnew TabPage; 71 | tabPage->Controls->Add(pMS); 72 | tabPage->Controls->Add(pWatyBot); 73 | tabPage->Location = Point(4, 22); 74 | tabPage->Padding = Windows::Forms::Padding(3); 75 | tabPage->Size = Drawing::Size(1375, 783); 76 | tabPage->TabIndex = tabControl1->TabCount; 77 | tabPage->UseVisualStyleBackColor = true; 78 | tabPage->Text = "Tab " + (tabControl1->TabCount + 1); 79 | 80 | //Initialize the Panel to embed MS in 81 | pMS->BorderStyle = BorderStyle::FixedSingle; 82 | pMS->Location = Point(6, 8); 83 | pMS->Size = Drawing::Size(1026, 770); 84 | 85 | //Initialize the Panel to embed WatyBot in 86 | pWatyBot->BorderStyle = BorderStyle::FixedSingle; 87 | pWatyBot->Location = Point(1031, 8); 88 | pWatyBot->Size = Drawing::Size(336, 770); 89 | 90 | //Add it to the TabControl 91 | tabControl1->TabPages->Add(tabPage); 92 | 93 | //That's how easy it now is to add a new tab :) 94 | Tab^ tab = gcnew Tab(tabPage, pMS, pWatyBot); 95 | Tabs->Add(tab); 96 | } 97 | } 98 | void MainForm::MainForm_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) 99 | { 100 | //Stop all running tabs 101 | for each(Tab^ tab in Tabs) tab->Stop(); 102 | 103 | //Save the settings 104 | TextWriter^ writer = gcnew StreamWriter(ConfigFile); 105 | try 106 | { 107 | XmlSerializer^ serializer = gcnew XmlSerializer(GeneralSettings::typeid); 108 | serializer->Serialize(writer, Settings); 109 | } 110 | catch(System::Exception^){} 111 | writer->Close(); 112 | } 113 | void MainForm::mapleStoryLocationToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) 114 | { 115 | dlgSelectMS->ShowDialog(); 116 | Settings->MSFileName = dlgSelectMS->FileName; 117 | } 118 | void MainForm::watyBotLocationToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) 119 | { 120 | dlgSelectWatyBot->ShowDialog(); 121 | Settings->WatyBotFileName = dlgSelectWatyBot->FileName; 122 | } 123 | void MainForm::tabControl1_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) 124 | { 125 | if(e->Button == ::MouseButtons::Right) 126 | { 127 | for(int i = 0; i < tabControl1->TabCount; i++) 128 | { 129 | Drawing::Rectangle r = tabControl1->GetTabRect(i); 130 | if(r.Contains(e->Location)) 131 | { 132 | contextMenuStrip1->Show(tabControl1, e->X, e->Y); 133 | Settings->SelectedTabIndex = i; 134 | } 135 | } 136 | } 137 | } 138 | void MainForm::removeTabToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) 139 | { 140 | safe_cast(Tabs[Settings->SelectedTabIndex])->Stop(); 141 | tabControl1->TabPages->RemoveAt(Settings->SelectedTabIndex); 142 | } 143 | -------------------------------------------------------------------------------- /WatyBotManager/MainForm.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include "GeneralSettings.h" 5 | 6 | using namespace std; 7 | using namespace msclr::interop; 8 | 9 | using namespace System; 10 | using namespace System::ComponentModel; 11 | using namespace System::Collections; 12 | using namespace System::Data; 13 | using namespace System::Drawing; 14 | using namespace System::Diagnostics; 15 | using namespace System::IO; 16 | using namespace System::Windows::Forms; 17 | 18 | #define ShowInfo(Message) MessageBox::Show(Message, "Information", MessageBoxButtons::OK, MessageBoxIcon::Information) 19 | #define ShowError(Message) MessageBox::Show(Message, "Error", MessageBoxButtons::OK, MessageBoxIcon::Error) 20 | #define ShowWarning(Message) MessageBox::Show(Message, "Warning", MessageBoxButtons::OK, MessageBoxIcon::Warning) 21 | 22 | namespace WatyBotManager { 23 | 24 | /// 25 | /// Summary for MainForm 26 | /// 27 | public ref class MainForm : public System::Windows::Forms::Form 28 | { 29 | public: 30 | MainForm(void) 31 | { 32 | InitializeComponent(); 33 | // 34 | //TODO: Add the constructor code here 35 | // 36 | } 37 | 38 | protected: 39 | /// 40 | /// Clean up any resources being used. 41 | /// 42 | ~MainForm() 43 | { 44 | if (components) 45 | { 46 | delete components; 47 | } 48 | } 49 | 50 | private: System::Windows::Forms::TabControl^ tabControl1; 51 | private: System::Windows::Forms::MenuStrip^ menuStrip1; 52 | private: System::Windows::Forms::ToolStripMenuItem^ menuToolStripMenuItem; 53 | private: System::Windows::Forms::ToolStripMenuItem^ settingsToolStripMenuItem; 54 | private: System::Windows::Forms::ToolStripMenuItem^ mapleStoryLocationToolStripMenuItem; 55 | private: System::Windows::Forms::ToolStripMenuItem^ watyBotLocationToolStripMenuItem; 56 | private: System::Windows::Forms::OpenFileDialog^ dlgSelectMS; 57 | private: System::Windows::Forms::OpenFileDialog^ dlgSelectWatyBot; 58 | private: System::Windows::Forms::ContextMenuStrip^ contextMenuStrip1; 59 | private: System::Windows::Forms::ToolStripMenuItem^ removeTabToolStripMenuItem; 60 | private: System::ComponentModel::IContainer^ components; 61 | 62 | private: 63 | /// 64 | /// Required designer variable. 65 | /// 66 | 67 | 68 | #pragma region Windows Form Designer generated code 69 | /// 70 | /// Required method for Designer support - do not modify 71 | /// the contents of this method with the code editor. 72 | /// 73 | void InitializeComponent(void) 74 | { 75 | this->components = (gcnew System::ComponentModel::Container()); 76 | this->tabControl1 = (gcnew System::Windows::Forms::TabControl()); 77 | this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip()); 78 | this->settingsToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); 79 | this->mapleStoryLocationToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); 80 | this->watyBotLocationToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); 81 | this->menuToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); 82 | this->dlgSelectMS = (gcnew System::Windows::Forms::OpenFileDialog()); 83 | this->dlgSelectWatyBot = (gcnew System::Windows::Forms::OpenFileDialog()); 84 | this->contextMenuStrip1 = (gcnew System::Windows::Forms::ContextMenuStrip(this->components)); 85 | this->removeTabToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem()); 86 | this->menuStrip1->SuspendLayout(); 87 | this->contextMenuStrip1->SuspendLayout(); 88 | this->SuspendLayout(); 89 | // 90 | // tabControl1 91 | // 92 | this->tabControl1->Location = System::Drawing::Point(3, 22); 93 | this->tabControl1->Name = L"tabControl1"; 94 | this->tabControl1->SelectedIndex = 0; 95 | this->tabControl1->Size = System::Drawing::Size(1383, 809); 96 | this->tabControl1->TabIndex = 0; 97 | this->tabControl1->MouseClick += gcnew System::Windows::Forms::MouseEventHandler(this, &MainForm::tabControl1_MouseClick); 98 | // 99 | // menuStrip1 100 | // 101 | this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->settingsToolStripMenuItem, 102 | this->menuToolStripMenuItem}); 103 | this->menuStrip1->Location = System::Drawing::Point(0, 0); 104 | this->menuStrip1->Name = L"menuStrip1"; 105 | this->menuStrip1->RenderMode = System::Windows::Forms::ToolStripRenderMode::System; 106 | this->menuStrip1->Size = System::Drawing::Size(1387, 24); 107 | this->menuStrip1->TabIndex = 1; 108 | this->menuStrip1->Text = L"menuStrip1"; 109 | // 110 | // settingsToolStripMenuItem 111 | // 112 | this->settingsToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->mapleStoryLocationToolStripMenuItem, 113 | this->watyBotLocationToolStripMenuItem}); 114 | this->settingsToolStripMenuItem->Name = L"settingsToolStripMenuItem"; 115 | this->settingsToolStripMenuItem->Size = System::Drawing::Size(61, 20); 116 | this->settingsToolStripMenuItem->Text = L"Settings"; 117 | // 118 | // mapleStoryLocationToolStripMenuItem 119 | // 120 | this->mapleStoryLocationToolStripMenuItem->Name = L"mapleStoryLocationToolStripMenuItem"; 121 | this->mapleStoryLocationToolStripMenuItem->Size = System::Drawing::Size(183, 22); 122 | this->mapleStoryLocationToolStripMenuItem->Text = L"MapleStory Location"; 123 | this->mapleStoryLocationToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainForm::mapleStoryLocationToolStripMenuItem_Click); 124 | // 125 | // watyBotLocationToolStripMenuItem 126 | // 127 | this->watyBotLocationToolStripMenuItem->Name = L"watyBotLocationToolStripMenuItem"; 128 | this->watyBotLocationToolStripMenuItem->Size = System::Drawing::Size(183, 22); 129 | this->watyBotLocationToolStripMenuItem->Text = L"WatyBot Location"; 130 | this->watyBotLocationToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainForm::watyBotLocationToolStripMenuItem_Click); 131 | // 132 | // menuToolStripMenuItem 133 | // 134 | this->menuToolStripMenuItem->Name = L"menuToolStripMenuItem"; 135 | this->menuToolStripMenuItem->Size = System::Drawing::Size(88, 20); 136 | this->menuToolStripMenuItem->Text = L"Start new MS"; 137 | this->menuToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainForm::menuToolStripMenuItem_Click); 138 | // 139 | // dlgSelectMS 140 | // 141 | this->dlgSelectMS->DefaultExt = L"exe"; 142 | this->dlgSelectMS->FileName = L"MapleStory.exe"; 143 | this->dlgSelectMS->Filter = L"MapleStory|MapleStory.exe"; 144 | this->dlgSelectMS->RestoreDirectory = true; 145 | // 146 | // dlgSelectWatyBot 147 | // 148 | this->dlgSelectWatyBot->DefaultExt = L"dll"; 149 | this->dlgSelectWatyBot->FileName = L"WatyBot.dll"; 150 | this->dlgSelectWatyBot->Filter = L"WatyBot|WatyBot.dll"; 151 | this->dlgSelectWatyBot->RestoreDirectory = true; 152 | // 153 | // contextMenuStrip1 154 | // 155 | this->contextMenuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(1) {this->removeTabToolStripMenuItem}); 156 | this->contextMenuStrip1->Name = L"contextMenuStrip1"; 157 | this->contextMenuStrip1->Size = System::Drawing::Size(141, 26); 158 | // 159 | // removeTabToolStripMenuItem 160 | // 161 | this->removeTabToolStripMenuItem->Name = L"removeTabToolStripMenuItem"; 162 | this->removeTabToolStripMenuItem->Size = System::Drawing::Size(140, 22); 163 | this->removeTabToolStripMenuItem->Text = L"Remove Tab"; 164 | this->removeTabToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainForm::removeTabToolStripMenuItem_Click); 165 | // 166 | // MainForm 167 | // 168 | this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); 169 | this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; 170 | this->ClientSize = System::Drawing::Size(1387, 833); 171 | this->Controls->Add(this->tabControl1); 172 | this->Controls->Add(this->menuStrip1); 173 | this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedSingle; 174 | this->MainMenuStrip = this->menuStrip1; 175 | this->MaximizeBox = false; 176 | this->Name = L"MainForm"; 177 | this->ShowIcon = false; 178 | this->Text = L"WatyBotManager"; 179 | this->FormClosing += gcnew System::Windows::Forms::FormClosingEventHandler(this, &MainForm::MainForm_FormClosing); 180 | this->Load += gcnew System::EventHandler(this, &MainForm::MainForm_Load); 181 | this->menuStrip1->ResumeLayout(false); 182 | this->menuStrip1->PerformLayout(); 183 | this->contextMenuStrip1->ResumeLayout(false); 184 | this->ResumeLayout(false); 185 | this->PerformLayout(); 186 | 187 | } 188 | #pragma endregion 189 | public: ArrayList^ Tabs; 190 | private: 191 | System::Void MainForm_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e); 192 | System::Void menuToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e); 193 | System::Void mapleStoryLocationToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e); 194 | System::Void watyBotLocationToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e); 195 | System::Void tabControl1_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e); 196 | System::Void removeTabToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e); 197 | System::Void MainForm_Load(System::Object^ sender, System::EventArgs^ e); 198 | }; 199 | } 200 | -------------------------------------------------------------------------------- /WatyBotManager/MainForm.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 | 17, 17 122 | 123 | 124 | 132, 17 125 | 126 | 127 | 272, 17 128 | 129 | 130 | 420, 17 131 | 132 | 133 | 37 134 | 135 | -------------------------------------------------------------------------------- /WatyBotManager/Tab.cpp: -------------------------------------------------------------------------------- 1 | #include "Tab.h" 2 | #include "MainForm.h" 3 | #include 4 | #include "GeneralSettings.h" 5 | using namespace WatyBotManager; 6 | extern gcroot Settings; 7 | Tab::Tab(TabPage^ tabPage, Panel^ pMS, Panel^ pWatyBot) 8 | { 9 | //Start the maintenance timer 10 | timer = gcnew Timer; 11 | timer->Tick += gcnew System::EventHandler(this, &Tab::timer_tick); 12 | timer->Interval = 60000; 13 | timer->Enabled = true; 14 | 15 | this->tabPage = tabPage; 16 | this->pMS = pMS; 17 | this->pWatyBot = pWatyBot; 18 | 19 | //Start maplestory and close the Launcher 20 | this->procMS = gcnew Process(); 21 | procMS->StartInfo->FileName = Settings->MSFileName; 22 | procMS->Start(); 23 | WaitForInputIdle((HANDLE) procMS->Handle.ToPointer(), INFINITE); 24 | procMS->CloseMainWindow(); 25 | 26 | //Sleep while MS is not found 27 | while(FindProcessWindow(procMS->Id) == NULL); 28 | //Set the variables for embedding 29 | HWND hMS = FindProcessWindow(procMS->Id); 30 | //Embed MS 31 | Embed(hMS, (HWND) pMS->Handle.ToPointer()); 32 | 33 | inject(procMS->Id); 34 | 35 | //Sleep while WatyBot is not found 36 | while(FindWatyBotHWND(procMS->Id) == NULL); 37 | //Set the variables for embedding 38 | HWND hWatyBot = FindWatyBotHWND(procMS->Id); 39 | //Sleep 2,5 seconds to make sure WatyBot has got the correct window 40 | Sleep(2500); 41 | //Embed WatyBot 42 | Embed(hWatyBot, (HWND) pWatyBot->Handle.ToPointer()); 43 | } 44 | 45 | Tab::~Tab(void) 46 | { 47 | TerminateProcess(procMS->Handle.ToPointer(), 0); 48 | } 49 | 50 | void Tab::Embed(HWND child, HWND newParent) 51 | { 52 | HANDLE hParent; 53 | hParent = SetParent(child, newParent); 54 | if(hParent) 55 | SetWindowPos(child, 0, -3, -26, 0, 0, SWP_NOSIZE | SWP_NOZORDER); 56 | } 57 | 58 | bool Tab::inject(DWORD pID) 59 | { 60 | if(!File::Exists(Settings->WatyBotFileName)) 61 | { 62 | MessageBox::Show("File not found!"); 63 | return false; 64 | } 65 | 66 | string dllloc = marshal_as(Settings->WatyBotFileName); 67 | 68 | if(!pID) 69 | return false; 70 | 71 | HANDLE Proc; 72 | LPVOID RemoteString, LoadLibAddy; 73 | Proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID); 74 | if(!Proc) 75 | { 76 | MessageBox::Show("OpenProcess() failed: " + GetLastError()); 77 | return false; 78 | } 79 | LoadLibAddy = (LPVOID)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA"); 80 | // Allocate space in the process for our DLl 81 | RemoteString = (LPVOID)VirtualAllocEx(Proc, NULL, strlen(dllloc.c_str()), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); 82 | // Write the string name of our DLL in the memory allocated 83 | WriteProcessMemory(Proc, (LPVOID)RemoteString, dllloc.c_str(), strlen(dllloc.c_str()), NULL); 84 | // Load our DLL 85 | CreateRemoteThread(Proc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddy, (LPVOID)RemoteString, NULL, NULL); 86 | CloseHandle(Proc); 87 | return true; 88 | } 89 | 90 | HWND Tab::FindProcessWindow(int pID) 91 | { 92 | TCHAR szBuffer[200]; 93 | DWORD dwTemp; 94 | 95 | for (HWND hWnd = GetTopWindow(NULL); hWnd != NULL; hWnd = GetNextWindow(hWnd, GW_HWNDNEXT)) 96 | { 97 | GetWindowThreadProcessId(hWnd, &dwTemp); 98 | 99 | if (dwTemp != pID) 100 | continue; 101 | 102 | if (!GetClassName(hWnd, szBuffer, sizeof(szBuffer) / sizeof(TCHAR))) 103 | continue; 104 | 105 | if (!wcscmp(szBuffer, L"MapleStoryClass")) 106 | return hWnd; 107 | } 108 | return NULL; 109 | } 110 | 111 | HWND Tab::FindWatyBotHWND(int pID) 112 | { 113 | TCHAR szBuffer[200]; 114 | DWORD dwTemp; 115 | 116 | for (HWND hWnd = GetTopWindow(NULL); hWnd != NULL; hWnd = GetNextWindow(hWnd, GW_HWNDNEXT)) 117 | { 118 | GetWindowThreadProcessId(hWnd, &dwTemp); 119 | 120 | if (dwTemp != pID) 121 | continue; 122 | 123 | if (!GetWindowText(hWnd, szBuffer, sizeof(szBuffer) / sizeof(TCHAR))) 124 | continue; 125 | 126 | if (StrStr(szBuffer, L"Waty")) 127 | return hWnd; 128 | } 129 | return NULL; 130 | } 131 | 132 | void Tab::Stop() 133 | { 134 | try 135 | { 136 | this->procMS->Kill(); 137 | } 138 | catch(Exception^ /*ex*/) 139 | { 140 | } 141 | } 142 | 143 | void Tab::timer_tick(System::Object^ sender, System::EventArgs^ e) 144 | { 145 | //TODO: Add code decreasing MS working size + checks to see if MS is still running 146 | } 147 | -------------------------------------------------------------------------------- /WatyBotManager/Tab.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include "MainForm.h" 4 | 5 | using namespace WatyBotManager; 6 | 7 | public ref class Tab 8 | { 9 | public: 10 | Tab(TabPage^ , Panel^, Panel^); 11 | void Stop(); 12 | ~Tab(void); 13 | 14 | private: 15 | void Embed(HWND child, HWND newParent); 16 | bool inject(DWORD pID); 17 | HWND FindProcessWindow(int pID); 18 | HWND FindWatyBotHWND(int pID); 19 | 20 | Process^ procMS; 21 | TabPage^ tabPage; 22 | Panel^ pMS; 23 | Panel^ pWatyBot; 24 | 25 | Timer^ timer; 26 | void timer_tick(System::Object^ sender, System::EventArgs^ e); 27 | }; 28 | -------------------------------------------------------------------------------- /WatyBotManager/WatyBotManager.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release Tazz 10 | Win32 11 | 12 | 13 | Release 14 | Win32 15 | 16 | 17 | 18 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5} 19 | Win32Proj 20 | WatyBotManager 21 | 22 | 23 | 24 | Application 25 | true 26 | v120 27 | Unicode 28 | 29 | 30 | Application 31 | false 32 | v120 33 | false 34 | Unicode 35 | true 36 | 37 | 38 | Application 39 | false 40 | v120 41 | true 42 | Unicode 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | true 59 | 60 | 61 | false 62 | D:\Program Files (x86)\NEXON\Europe MapleStory\ 63 | 64 | 65 | false 66 | D:\Europe MapleStory for Vista\ 67 | 68 | 69 | 70 | 71 | 72 | Level3 73 | Disabled 74 | WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) 75 | ProgramDatabase 76 | 77 | 78 | Windows 79 | true 80 | 81 | 82 | 83 | 84 | Level3 85 | 86 | 87 | MaxSpeed 88 | true 89 | true 90 | WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) 91 | 92 | 93 | Windows 94 | true 95 | true 96 | true 97 | Shlwapi.lib;%(AdditionalDependencies) 98 | RequireAdministrator 99 | 100 | 101 | 102 | 103 | Level3 104 | 105 | 106 | MaxSpeed 107 | true 108 | true 109 | WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) 110 | 111 | 112 | Windows 113 | true 114 | true 115 | true 116 | Shlwapi.lib;%(AdditionalDependencies) 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | true 130 | 131 | 132 | false 133 | Default 134 | ProgramDatabase 135 | Async 136 | true 137 | true 138 | 139 | 140 | 141 | 142 | false 143 | false 144 | Default 145 | Default 146 | ProgramDatabase 147 | ProgramDatabase 148 | Async 149 | Async 150 | 151 | 152 | 153 | 154 | 155 | 156 | CppForm 157 | 158 | 159 | 160 | 161 | 162 | MainForm.h 163 | 164 | 165 | 166 | 167 | 168 | -------------------------------------------------------------------------------- /WatyBotManager/WatyBotManager.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Header Files 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | 29 | 30 | Source Files 31 | 32 | 33 | Source Files 34 | 35 | 36 | Source Files 37 | 38 | 39 | 40 | 41 | Resource Files 42 | 43 | 44 | -------------------------------------------------------------------------------- /WatyBotManager/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | extern void StartThread(void); 3 | 4 | int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 5 | { 6 | StartThread(); 7 | } 8 | 9 | /*LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM) 10 | { 11 | 12 | } 13 | */ -------------------------------------------------------------------------------- /WatyBotRevamp.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2012 4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WatyBotRevamp", "WatyBotRevamp\WatyBotRevamp.vcxproj", "{E5812690-3792-4563-90DD-CABC4B18A6DB}" 5 | ProjectSection(ProjectDependencies) = postProject 6 | {79C2A55C-464A-477D-914C-C70073F49335} = {79C2A55C-464A-477D-914C-C70073F49335} 7 | {26B0D4D4-27B8-4A92-B453-732E7D44348A} = {26B0D4D4-27B8-4A92-B453-732E7D44348A} 8 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5} = {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5} 9 | EndProjectSection 10 | EndProject 11 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WatyBotInjector", "WatyBotInjector\WatyBotInjector.vcxproj", "{26B0D4D4-27B8-4A92-B453-732E7D44348A}" 12 | EndProject 13 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WatyBotUpdater", "WatyBotUpdater\WatyBotUpdater.vcxproj", "{79C2A55C-464A-477D-914C-C70073F49335}" 14 | EndProject 15 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WatyBotManager", "WatyBotManager\WatyBotManager.vcxproj", "{2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}" 16 | EndProject 17 | Global 18 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 19 | Debug|Any CPU = Debug|Any CPU 20 | Debug|Mixed Platforms = Debug|Mixed Platforms 21 | Debug|Win32 = Debug|Win32 22 | Release Tazz|Any CPU = Release Tazz|Any CPU 23 | Release Tazz|Mixed Platforms = Release Tazz|Mixed Platforms 24 | Release Tazz|Win32 = Release Tazz|Win32 25 | Release|Any CPU = Release|Any CPU 26 | Release|Mixed Platforms = Release|Mixed Platforms 27 | Release|Win32 = Release|Win32 28 | EndGlobalSection 29 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 30 | {E5812690-3792-4563-90DD-CABC4B18A6DB}.Debug|Any CPU.ActiveCfg = Debug|Win32 31 | {E5812690-3792-4563-90DD-CABC4B18A6DB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 32 | {E5812690-3792-4563-90DD-CABC4B18A6DB}.Debug|Mixed Platforms.Build.0 = Debug|Win32 33 | {E5812690-3792-4563-90DD-CABC4B18A6DB}.Debug|Win32.ActiveCfg = Debug|Win32 34 | {E5812690-3792-4563-90DD-CABC4B18A6DB}.Debug|Win32.Build.0 = Debug|Win32 35 | {E5812690-3792-4563-90DD-CABC4B18A6DB}.Release Tazz|Any CPU.ActiveCfg = Release|Win32 36 | {E5812690-3792-4563-90DD-CABC4B18A6DB}.Release Tazz|Mixed Platforms.ActiveCfg = Release Tazz|Win32 37 | {E5812690-3792-4563-90DD-CABC4B18A6DB}.Release Tazz|Mixed Platforms.Build.0 = Release Tazz|Win32 38 | {E5812690-3792-4563-90DD-CABC4B18A6DB}.Release Tazz|Win32.ActiveCfg = Release|Win32 39 | {E5812690-3792-4563-90DD-CABC4B18A6DB}.Release Tazz|Win32.Build.0 = Release|Win32 40 | {E5812690-3792-4563-90DD-CABC4B18A6DB}.Release|Any CPU.ActiveCfg = Release|Win32 41 | {E5812690-3792-4563-90DD-CABC4B18A6DB}.Release|Mixed Platforms.ActiveCfg = Release|Win32 42 | {E5812690-3792-4563-90DD-CABC4B18A6DB}.Release|Mixed Platforms.Build.0 = Release|Win32 43 | {E5812690-3792-4563-90DD-CABC4B18A6DB}.Release|Win32.ActiveCfg = Release|Win32 44 | {E5812690-3792-4563-90DD-CABC4B18A6DB}.Release|Win32.Build.0 = Release|Win32 45 | {26B0D4D4-27B8-4A92-B453-732E7D44348A}.Debug|Any CPU.ActiveCfg = Debug|Win32 46 | {26B0D4D4-27B8-4A92-B453-732E7D44348A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 47 | {26B0D4D4-27B8-4A92-B453-732E7D44348A}.Debug|Mixed Platforms.Build.0 = Debug|Win32 48 | {26B0D4D4-27B8-4A92-B453-732E7D44348A}.Debug|Win32.ActiveCfg = Debug|Win32 49 | {26B0D4D4-27B8-4A92-B453-732E7D44348A}.Debug|Win32.Build.0 = Debug|Win32 50 | {26B0D4D4-27B8-4A92-B453-732E7D44348A}.Release Tazz|Any CPU.ActiveCfg = Release|Win32 51 | {26B0D4D4-27B8-4A92-B453-732E7D44348A}.Release Tazz|Mixed Platforms.ActiveCfg = Release Tazz|Win32 52 | {26B0D4D4-27B8-4A92-B453-732E7D44348A}.Release Tazz|Mixed Platforms.Build.0 = Release Tazz|Win32 53 | {26B0D4D4-27B8-4A92-B453-732E7D44348A}.Release Tazz|Win32.ActiveCfg = Release|Win32 54 | {26B0D4D4-27B8-4A92-B453-732E7D44348A}.Release Tazz|Win32.Build.0 = Release|Win32 55 | {26B0D4D4-27B8-4A92-B453-732E7D44348A}.Release|Any CPU.ActiveCfg = Release|Win32 56 | {26B0D4D4-27B8-4A92-B453-732E7D44348A}.Release|Mixed Platforms.ActiveCfg = Release|Win32 57 | {26B0D4D4-27B8-4A92-B453-732E7D44348A}.Release|Mixed Platforms.Build.0 = Release|Win32 58 | {26B0D4D4-27B8-4A92-B453-732E7D44348A}.Release|Win32.ActiveCfg = Release|Win32 59 | {26B0D4D4-27B8-4A92-B453-732E7D44348A}.Release|Win32.Build.0 = Release|Win32 60 | {79C2A55C-464A-477D-914C-C70073F49335}.Debug|Any CPU.ActiveCfg = Debug|Win32 61 | {79C2A55C-464A-477D-914C-C70073F49335}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 62 | {79C2A55C-464A-477D-914C-C70073F49335}.Debug|Mixed Platforms.Build.0 = Debug|Win32 63 | {79C2A55C-464A-477D-914C-C70073F49335}.Debug|Win32.ActiveCfg = Debug|Win32 64 | {79C2A55C-464A-477D-914C-C70073F49335}.Debug|Win32.Build.0 = Debug|Win32 65 | {79C2A55C-464A-477D-914C-C70073F49335}.Release Tazz|Any CPU.ActiveCfg = Release|Win32 66 | {79C2A55C-464A-477D-914C-C70073F49335}.Release Tazz|Mixed Platforms.ActiveCfg = Release Tazz|Win32 67 | {79C2A55C-464A-477D-914C-C70073F49335}.Release Tazz|Mixed Platforms.Build.0 = Release Tazz|Win32 68 | {79C2A55C-464A-477D-914C-C70073F49335}.Release Tazz|Win32.ActiveCfg = Release|Win32 69 | {79C2A55C-464A-477D-914C-C70073F49335}.Release Tazz|Win32.Build.0 = Release|Win32 70 | {79C2A55C-464A-477D-914C-C70073F49335}.Release|Any CPU.ActiveCfg = Release|Win32 71 | {79C2A55C-464A-477D-914C-C70073F49335}.Release|Mixed Platforms.ActiveCfg = Release|Win32 72 | {79C2A55C-464A-477D-914C-C70073F49335}.Release|Mixed Platforms.Build.0 = Release|Win32 73 | {79C2A55C-464A-477D-914C-C70073F49335}.Release|Win32.ActiveCfg = Release|Win32 74 | {79C2A55C-464A-477D-914C-C70073F49335}.Release|Win32.Build.0 = Release|Win32 75 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Debug|Any CPU.ActiveCfg = Debug|Win32 76 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 77 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Debug|Mixed Platforms.Build.0 = Debug|Win32 78 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Debug|Win32.ActiveCfg = Debug|Win32 79 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Debug|Win32.Build.0 = Debug|Win32 80 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Release Tazz|Any CPU.ActiveCfg = Release|Win32 81 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Release Tazz|Mixed Platforms.ActiveCfg = Release Tazz|Win32 82 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Release Tazz|Mixed Platforms.Build.0 = Release Tazz|Win32 83 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Release Tazz|Win32.ActiveCfg = Release|Win32 84 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Release Tazz|Win32.Build.0 = Release|Win32 85 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Release|Any CPU.ActiveCfg = Release|Win32 86 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Release|Mixed Platforms.ActiveCfg = Release|Win32 87 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Release|Mixed Platforms.Build.0 = Release|Win32 88 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Release|Mixed Platforms.Deploy.0 = Release|Win32 89 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Release|Win32.ActiveCfg = Release|Win32 90 | {2A0EC0D8-8AAF-46D0-A539-8C5C378CD0E5}.Release|Win32.Build.0 = Release|Win32 91 | EndGlobalSection 92 | GlobalSection(SolutionProperties) = preSolution 93 | HideSolutionNode = FALSE 94 | EndGlobalSection 95 | EndGlobal 96 | -------------------------------------------------------------------------------- /WatyBotRevamp/Addys.h: -------------------------------------------------------------------------------- 1 | #define DojangAddy 0xERROR //8B 01 8B 50 ? ff d2 8b 88 ? ? ? ? 51 - 6TH Result 2 | #define DojangCall 0xERROR 3 | #define IceGuardAddy 0xCD6560 4 | #define IceGuardPush 0xERROR //The push 1 line below the Addy 5 | #define AggroAddy 0xD650A6 6 | #define AggroCall 0xD5C530 7 | #define PinTyperAddy1 0x6D4BC6 8 | #define PinTyperAddy2 0x6D62E7 9 | #define FusionAddy 0x75D5B4 10 | #define PerfectLootAddy1 0x4C59E7 11 | #define PerfectLootAddy2 0x55FA35 12 | #define PerfectLootAddy3 0x44BFE9 13 | #define NoBGAddy1 0xERROR 14 | #define NoBGAddy2 0x70171B 15 | #define FasterMobsAddy 0x776AB3 16 | #define UnlimitedMorphAddy1 0xCF3FCF 17 | #define UnlimitedMorphAddy2 0xCF4ADE 18 | #define gNDAddy1 0xCB5C63 19 | #define gNDAddy2 0xERROR 20 | #define JDAAddy1 0xC8F907 21 | #define JDAAddy2 0xC8F944 22 | #define JDAAddy3 0xC8F962 23 | #define MobDisarmAddy 0x75A95A 24 | #define NoMobsAddy 0xERROR 25 | #define AirLootAddy 0x560B89 26 | #define VacRightAddy 0xD56030 27 | #define WalkRightAddy 0xD61F0B 28 | #define JumpRightAddy 0xD6240F 29 | #define NoKBAddy 0x90505B 30 | #define SitHackAddy 0xC858D1 31 | #define SPControlAddy 0xCAED33 32 | #define SPCChecksAddy 0xCAED40 33 | #define Godmode50SecAddy1 0xCD833F 34 | #define Godmode50SecAddy2 0xCD835A 35 | #define LogoSkipperAddy 0xERROR 36 | #define ItemVacAddy 0xERROR //e8 ? ? ? ? 8b c8 8b 44 24 ? 89 38 -7th Result 37 | #define ItemVacCall 0x422410 38 | #define ViewSwearsAddy 0x90182B 39 | #define FMAAddy 0x75D5A4 40 | #define ScareMobsAddy 0x75B45F 41 | #define FLACC 0xD561AA 42 | #define CPUAddy1 0x60EFB1 43 | #define CPUAddy2 0xERROR 44 | #define CPUAddy3 0xERROR 45 | #define UAAddy 0xERROR //89 38 5F 89 48 04 5E C2 ? ? CC - 3rd result 46 | #define DFAAddy 0x8348C2 47 | #define NDMiningAddy1 0xC8C932 48 | #define NDMiningAddy2 0xC8CA0B 49 | #define NDMiningAddy3 0xC9F0C7 50 | #define HideDamageAddy1 0x46C63B 51 | #define HideDamageAddy2 0x73A2E4 52 | #define HideDamageAddy3 0xERROR 53 | #define HideDamageAddy4 0xERROR 54 | #define HideDamageAddy5 0x731A7F 55 | #define MercedesComboAddy 0x412E5B 56 | #define ExitCSAddy 0xERROR //75 15 57 FF 15 ? ? ? ? 3B F3 74 0A 8B 16 8B 02 6A 01 8B CE FF d0 8b 4c 24 ? 64 89 0D 00 00 00 00 -4th Result MemoryView below: mov fs:[00000000],ecx 57 | #define ExitCSCall 0xERROR //See ExitCSAddy 58 | #define NoCCBoxesAddy1 0x421E40 59 | #define NoCCBoxesAddy2 0xERROR 60 | #define FadeAddy1 0xERROR //6A ? 68 ? ? ? ? 64 A1 ? ? ? ? 50 83 EC ? 53 55 56 57 A1 ? ? ? ? 33 C4 50 8D 44 24 ? 64 A3 ? ? ? ? A1 ? ? ? ? - 4h result 61 | #define FadeAddy2 0x895CF0 62 | #define MouseFlyAddy 0xCD32D9 63 | #define MouseFlyCall1 0xERROR //Opcode 64 | #define MouseFlyCall2 0x421E40 65 | #define CCAddy 0x58AAE0 //CField::SendTransferChannelRequest 66 | #define CSAddy 0xDB3060 //lpfnCWvsContext::SendMigrateToShopRequest 67 | #define SendPacketAddy 0xERROR //CClientSocket::SendPacket 68 | #define SendPacketHookAddy 0xERROR //8B 44 24 04 8B 0D ? ? ? ? 50 E8 ? ? ? ? C3 - 2nd result, check if it ends with a call to SendPacketAddy 69 | -------------------------------------------------------------------------------- /WatyBotRevamp/AutoSkill.cpp: -------------------------------------------------------------------------------- 1 | #include "AutoSkill.h" 2 | #include "MapleStory.h" 3 | #include "ChangeChannel.h" 4 | #include "Settings.h" 5 | 6 | using namespace WatyBotRevamp; 7 | 8 | AutoSkillEntry::AutoSkillEntry() 9 | { 10 | bw = gcnew System::ComponentModel::BackgroundWorker; 11 | bw->DoWork += gcnew System::ComponentModel::DoWorkEventHandler(this, &AutoSkillEntry::CastBackground); 12 | timer = gcnew System::Windows::Forms::Timer; 13 | timer->Tick += gcnew System::EventHandler(this, &AutoSkillEntry::AutoSkill_Tick); 14 | } 15 | 16 | AutoSkillEntry::AutoSkillEntry(String^ name, int interval, int key) 17 | { 18 | bw = gcnew System::ComponentModel::BackgroundWorker; 19 | bw->DoWork += gcnew System::ComponentModel::DoWorkEventHandler(this, &AutoSkillEntry::CastBackground); 20 | timer = gcnew System::Windows::Forms::Timer; 21 | timer->Tick += gcnew System::EventHandler(this, &AutoSkillEntry::AutoSkill_Tick); 22 | 23 | Name = name; 24 | Interval = interval; 25 | keyIndex = key; 26 | } 27 | 28 | AutoSkillEntry::~AutoSkillEntry() 29 | { 30 | delete timer; 31 | delete bw; 32 | } 33 | 34 | Void AutoSkillEntry::AutoSkill_Tick(System::Object^ sender, System::EventArgs^ e) 35 | { 36 | Cast(); 37 | } 38 | 39 | Void AutoSkillEntry::Cast() 40 | { 41 | if (!bw->IsBusy) bw->RunWorkerAsync(); 42 | } 43 | 44 | Void AutoSkillEntry::CastBackground(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e) 45 | { 46 | if (!CMS::InGame) return; 47 | 48 | //Send Key 49 | while (CC::IsBusy || CMS::UsingAutoSkill) Sleep(500); 50 | CMS::UsingAutoSkill = true; 51 | Sleep(500); 52 | CMS::SendSwitch(keyIndex); 53 | Sleep(500); 54 | CMS::UsingAutoSkill = false; 55 | } 56 | 57 | void AutoSkill::WriteXmlData() 58 | { 59 | Settings::Serialize(Path, serializer, AutoSkills); 60 | } 61 | 62 | void AutoSkill::ReadXmlData() 63 | { 64 | Object^ Result = Settings::Deserialize(Path, serializer); 65 | if (Result != nullptr) AutoSkills = safe_cast^>(Result); 66 | } 67 | -------------------------------------------------------------------------------- /WatyBotRevamp/AutoSkill.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace WatyBotRevamp 4 | { 5 | using namespace System; 6 | using namespace System::IO; 7 | using namespace System::Collections::Generic; 8 | using namespace System::Xml::Serialization; 9 | 10 | public ref class AutoSkillEntry 11 | { 12 | public: 13 | AutoSkillEntry(); 14 | AutoSkillEntry(System::String^ name, int interval, int key); 15 | ~AutoSkillEntry(); 16 | void Cast(); 17 | 18 | System::String^ Name; 19 | int keyIndex; 20 | property int Interval 21 | { 22 | int get() 23 | { 24 | return timer->Interval / 1000; 25 | } 26 | void set(int i) 27 | { 28 | timer->Interval = i * 1000; 29 | } 30 | } 31 | [System::Xml::Serialization::XmlIgnoreAttribute] 32 | property bool Enabled 33 | { 34 | void set(bool state) 35 | { 36 | if (state) Cast(); 37 | timer->Enabled = state; 38 | } 39 | bool get() 40 | { 41 | return timer->Enabled; 42 | } 43 | } 44 | 45 | private: 46 | System::Windows::Forms::Timer^ timer; 47 | void AutoSkill_Tick(System::Object^ sender, System::EventArgs^ e); 48 | 49 | System::ComponentModel::BackgroundWorker^ bw; 50 | void CastBackground(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e); 51 | }; 52 | 53 | 54 | public ref class AutoSkill 55 | { 56 | public: 57 | static Void ReadXmlData(); 58 | static Void WriteXmlData(); 59 | static String^ Path = Path::Combine(Environment::GetFolderPath(Environment::SpecialFolder::ApplicationData), "Waty\\AutoSkill.xml"); 60 | 61 | static XmlSerializer^ serializer = gcnew XmlSerializer(List::typeid); 62 | static List^ AutoSkills = gcnew List; 63 | }; 64 | } 65 | -------------------------------------------------------------------------------- /WatyBotRevamp/ChangeChannel.cpp: -------------------------------------------------------------------------------- 1 | #include "ChangeChannel.h" 2 | #include "PacketSender.h" 3 | #include "Hacks.h" 4 | #include "StopWatch.h" 5 | 6 | using namespace WatyBotRevamp; 7 | using namespace System; 8 | 9 | extern StopWatch BreathCounter; 10 | extern bool ChangeChannel(int channel); 11 | 12 | bool CC::IsBusy::get() 13 | { 14 | return bw->IsBusy; 15 | } 16 | Void CC::CCSwitch(CCType type) 17 | { 18 | if (IsBusy) return; 19 | String^ strError = String::Empty; 20 | switch (type) 21 | { 22 | case CCType::CC: 23 | Hacks::ThreadIdFix.Enable(true); 24 | bw->DoWork += gcnew System::ComponentModel::DoWorkEventHandler(&CC::doCC); 25 | bw->RunWorkerAsync(); 26 | break; 27 | 28 | case CCType::CS: 29 | bw->DoWork += gcnew System::ComponentModel::DoWorkEventHandler(&CC::doCS); 30 | bw->RunWorkerAsync(); 31 | break; 32 | 33 | case CCType::DC: 34 | bw->DoWork += gcnew System::ComponentModel::DoWorkEventHandler(&CC::doDC); 35 | bw->RunWorkerAsync(); 36 | break; 37 | } 38 | } 39 | 40 | //Generate a random int to CC to + check if it is a different channel 41 | Void CC::GenerateRandomChannel() 42 | { 43 | do 44 | { 45 | srand(GetCurrentTime()); 46 | TargetChannel = rand() % 14; 47 | } while (TargetChannel == StartChannel); 48 | } 49 | 50 | Void CC::doCC(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e) 51 | { 52 | if (!CMS::InGame) 53 | { 54 | e->Cancel; 55 | return; 56 | } 57 | 58 | //Store the currrent Channel 59 | StartChannel = CMS::Channel; 60 | 61 | GenerateRandomChannel(); 62 | 63 | //Sleep while breath > 0 64 | while (!BreathCounter.IsOver()) Sleep(100); 65 | CMS::Breath = 0; 66 | 67 | int i = 0; 68 | while (CMS::Channel != TargetChannel && CMS::Channel != -1) 69 | { 70 | //if the CC didn't happen after trying 10 times, Generate new random channel 71 | if (i > 10) GenerateRandomChannel(); 72 | 73 | //Send the CC request 74 | ChangeChannel(TargetChannel); 75 | Sleep(1000); 76 | i++; 77 | } 78 | } 79 | 80 | Void CC::doCS(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e) 81 | { 82 | if (!CMS::InGame) e->Cancel; 83 | while (!BreathCounter.IsOver()) Sleep(100); 84 | Sleep(500); 85 | CMS::Breath = 0; 86 | String^ strError = String::Empty; 87 | PacketSender::Send(EnterCashShop, strError); 88 | Sleep(2500); 89 | PacketSender::Send(LeaveCashShop, strError); 90 | Sleep(3000); 91 | } 92 | 93 | Void CC::doDC(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e) 94 | { 95 | while (CMS::InGame) 96 | { 97 | String^ strError = String::Empty; 98 | PacketSender::Send(ChangeCharacter, strError); 99 | Sleep(2500); 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /WatyBotRevamp/ChangeChannel.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "MapleStory.h" 3 | 4 | namespace WatyBotRevamp 5 | { 6 | using namespace System; 7 | 8 | enum class CCType{ CC, CS, DC }; 9 | public ref class CC sealed 10 | { 11 | public: 12 | static property bool IsBusy{bool get(); } 13 | static void CCSwitch(CCType type); 14 | 15 | private: 16 | static System::ComponentModel::BackgroundWorker^ bw = gcnew System::ComponentModel::BackgroundWorker; 17 | static Void doCC(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e); 18 | static Void doDC(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e); 19 | static Void doCS(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e); 20 | static Void GenerateRandomChannel(); 21 | static property int StartChannel; 22 | static property int TargetChannel; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /WatyBotRevamp/HackAddys.h: -------------------------------------------------------------------------------- 1 | #define DojangAddy 0xC7F834 //8B 01 8B 50 ? FF D2 8B 88 ? ? ? ? 51 05 ? ? ? ? 50 E8 ? ? ? ? 83 C4 ? - addy is at the call 2 | #define DojangCall 0xD54CD0 3 | #define IceGuardAddy 0xCD50B0 4 | #define IceGuardPush 0xF51D8B //The push 1 line below the Addy 5 | #define AggroAddy 0xD63766 6 | #define AggroCall 0xD5ABE0 7 | #define PinTyperAddy1 0x6D1CB6 8 | #define PinTyperAddy2 0x6D33D7 9 | #define PicTyperAddy1 0x8906F6 //0F 84 ? ? ? ? 6A ? 6A ? 51 8B C4 10 | #define PicTyperAddy2 0x88FCE3 11 | #define PicTyperAddy3 0x88FD02 12 | #define PicTyperCall 0x5107D0 13 | #define FusionAddy 0x75B394 14 | #define PerfectLootAddy1 0x4C4E47 15 | #define PerfectLootAddy2 0x55F2E5 16 | #define PerfectLootAddy3 0x44C3D9 17 | #define NoBGAddy1 0x88FD02 18 | #define NoBGAddy2 0x6FE86B 19 | #define FasterMobsAddy 0x774623 20 | #define UnlimitedMorphAddy1 0xCF289F 21 | #define UnlimitedMorphAddy2 0xCF33AE 22 | #define gNDAddy1 0xCB47B3 23 | #define gNDAddy2 0x87AF55 24 | #define JDAAddy1 0xC8E4B7 25 | #define JDAAddy2 0xC8E4F4 26 | #define JDAAddy3 0xC8E512 27 | #define MobDisarmAddy 0x7587FA 28 | #define NoMobsAddy 0x75D7CD //77 ? 0F B6 80 ? ? ? 00 FF 24 85 ? ? ? 00 8B 54 24 ? 52 E8 ? ? ? FF C2 08 00 - 2nd result 29 | #define AirLootAddy 0x560439 30 | #define VacRightAddy 0xD54A30 31 | #define WalkRightAddy 0xD605CB 32 | #define JumpRightAddy 0xD60ACF 33 | #define NoKBAddy 0x9029AB 34 | #define SitHackAddy 0xC844C1 35 | #define SPControlAddy 0xCAD863 36 | #define SPCChecksAddy 0xCAD870 37 | #define IFSAddy1 0xCF8C24 38 | #define IFSAddy2 0xCF49A8 39 | #define IFSCall 0x86C210 40 | #define Godmode50SecAddy1 0xCD6E8F 41 | #define Godmode50SecAddy2 0xCD6EAA 42 | #define LogoSkipperAddy 0x112B4A8 43 | #define ItemVacAddy 0x71DC84 //e8 ? ? ? ? 8b c8 8b 44 24 ? 89 38 -7th Result 44 | #define ItemVacCall 0x732AA0 45 | #define ViewSwearsAddy 0x8FF16B 46 | #define FMAAddy 0x75B384 47 | #define ScareMobsAddy 0x7592FF 48 | #define FLACC 0xD54BAA 49 | #define CPUAddy1 0x60CA71 //RemoveObjectsAddy 50 | #define CPUAddy2 0xERROR 51 | #define CPUAddy3 0xERROR 52 | #define UAAddy 0x4EB4EF //89 38 5F 89 48 04 5E C2 ? ? CC - 3rd result 53 | #define DFAAddy 0x8320C2 54 | #define NDMiningAddy1 0xC8B522 55 | #define NDMiningAddy2 0xC8B5FB 56 | #define NDMiningAddy3 0xC9DC77 57 | #define HideDamageAddy1 0x46C69B 58 | #define HideDamageAddy2 0x738184 59 | #define HideDamageAddy3 0x72F7C7 60 | #define HideDamageAddy4 0x72F7D4 61 | #define HideDamageAddy5 0x72F7EF 62 | #define MercedesComboAddy1 0x55B5BB 63 | #define MercedesComboAddy2 0xCD2D5E 64 | #define ExitCSAddy 0x919A90 //75 15 57 FF 15 ? ? ? ? 3B F3 74 0A 8B 16 8B 02 6A 01 8B CE FF d0 8b 4c 24 ? 64 89 0D 00 00 00 00 -4th Result MemoryView below: mov fs:[00000000],ecx 65 | #define ExitCSCall 0xFB0084 //See ExitCSAddy 66 | #define NoCCBoxesAddy1 0x58A48E 67 | #define NoCCBoxesAddy2 0x58AE93 68 | #define FadeAddy1 0x892DC0 //6A ? 68 ? ? ? ? 64 A1 ? ? ? ? 50 83 EC ? 53 55 56 57 A1 ? ? ? ? 33 C4 50 8D 44 24 ? 64 A3 ? ? ? ? A1 ? ? ? ? - 4h result 69 | #define FadeAddy2 0x893270 70 | #define MouseFlyAddy 0xCD1E29 71 | #define MouseFlyCall1 0xD11820 //Opcode 72 | #define MouseFlyCall2 0x421F80 73 | #define CCAddy 0x58A3C0 //CField::SendTransferChannelRequest 74 | #define CSAddy 0xDB1C70 //lpfnCWvsContext::SendMigrateToShopRequest 75 | #define SendPacketHookAddy 0x427620 //8B 44 24 04 8B 0D ? ? ? ? 50 E8 ? ? ? ? C3 - 2nd result, check if it ends with a call to SendPacketAddy 76 | #define CharBasePtr 0x13FE690 77 | #define AttackCountOffset 0x7D60 78 | #define AttackXOffset 0x7D58 79 | #define BuffCountOffset 0x7D70 80 | #define BreathOffset 0x648 81 | #define ItemIDOffset 0x7A78 82 | #define XOffset 0x8B64 83 | #define ComboOffset 0x8D30 84 | #define PetOffset 0x5D08 85 | #define PetFullnessOffset 0xB4 86 | #define InfoBasePtr 0x14085C8 87 | #define MapIDOffset 0xF78 88 | #define CharXOffset 0xE44 89 | #define StatsBasePtr 0x1403068 90 | #define HPOffset 0x1E9C 91 | #define EXPOffset 0x1DC8 92 | #define MouseBasePtr 0x1403580 93 | #define MouseLocOffset 0x978 94 | #define MouseXOffset 0x8C 95 | #define MouseAniOffset 0x9DC 96 | #define SettingsBasePtr 0x1402D9C 97 | #define HPAlertOffset 0x5C 98 | #define ServerBasePtr 0x13FE3B0 99 | #define TubiOffset 0x213C 100 | #define WorldOffset 0x20C0 101 | #define ChannelOffset 0x8BF 102 | #define WallBasePtr 0x1402CB4 103 | #define MobBasePtr 0x1402DA4 104 | #define MobCountOffset 0x10 105 | #define MobDeathOffset 0x57C 106 | #define PeopleBasePtr 0x1402DA0 107 | #define PeopleCountOffset 0x18 108 | #define ItemBasePtr 0x14081E4 109 | #define ItemCountOffset 0x14 110 | #define SendPacketAddy 0x4D96B0 111 | #define MSCRCAddy 0xE72C52 112 | -------------------------------------------------------------------------------- /WatyBotRevamp/Hacks.cpp: -------------------------------------------------------------------------------- 1 | #include "Hacks.h" 2 | #include "HackAddys.h" 3 | #include "MapleStory.h" 4 | #include "SPControl.h" 5 | #include "StopWatch.h" 6 | #include "Log.h" 7 | 8 | using namespace WatyBotRevamp; 9 | 10 | extern bool Teleport(int x, int y); 11 | 12 | #define CodeCave(name) void __declspec(naked) Cave##name(){_asm 13 | #define EndCodeCave } 14 | 15 | /////Dojang Godmode 16 | DWORD DojangRet = DojangAddy + 5; 17 | DWORD dwDojangCall = DojangCall; 18 | int DojangMissCount = 0; 19 | CodeCave(Dojang) 20 | { 21 | inc[DojangMissCount] 22 | cmp[DojangMissCount], 07 //amount of misses as its under 10 no need for a 0x 23 | jbe DojangExit 24 | mov[DojangMissCount], 00 25 | call dword ptr[dwDojangCall] 26 | 27 | DojangExit: 28 | jmp[DojangRet] 29 | } 30 | EndCodeCave 31 | Hack Hacks::DojangGodmode = { new CMemory(DojangAddy, CaveDojang) }; 32 | 33 | /////Ice GuardGM 34 | DWORD IceGuardRet = IceGuardAddy + 7; 35 | DWORD dwIceGuardPush = IceGuardPush; 36 | int iIceGuardCounter = 0, iIceGuardLimit; 37 | CodeCave(IceGuard) 38 | { 39 | pushad 40 | mov eax, iIceGuardLimit 41 | cmp[iIceGuardCounter], eax 42 | popad 43 | jle blockDMG 44 | 45 | mov[iIceGuardCounter], 0 46 | push 0xFF 47 | push dwIceGuardPush 48 | jmp IceGuardRet 49 | 50 | blockDMG : 51 | add[iIceGuardCounter], 1 52 | ret 0x002C 53 | } 54 | EndCodeCave 55 | Hack Hacks::IceGuard = { new CMemory(IceGuardAddy, CaveIceGuard, 2) }; 56 | 57 | void Hacks::SetIceGuardLimit(int limit) 58 | { 59 | iIceGuardLimit = limit; 60 | } 61 | 62 | /////Auto Aggro 63 | DWORD dwAggroRet = AggroAddy + 5; 64 | DWORD dwAggroCall = AggroCall; 65 | CodeCave(Aggro) 66 | { 67 | call dwAggroCall 68 | mov edx, dword ptr ds : [CharBasePtr] 69 | mov edx, [edx + 0x0C] 70 | mov edx, [edx + 0x0C] 71 | mov[esi + 0x2B0], edx 72 | jmp dwAggroRet 73 | } 74 | EndCodeCave 75 | Hack Hacks::AutoAggro = { new CMemory(AggroAddy, CaveAggro) }; 76 | 77 | /////Pin Typer 78 | BYTE bPinTyper [] = { 0x0F, 0x84 }; 79 | //Pic Typer 80 | BYTE bPicTyper1 [] = { 0x90, 0xE9 }; //Makes the je a jmp 81 | BYTE bPicTyper2 [] = { 0xC7, 0x45, 0x88, 0x00 }; 82 | Hack Hacks::PinPicTyper = { 83 | new CMemory(PinTyperAddy1, bPinTyper, 2), 84 | new CMemory(PinTyperAddy2, bPinTyper, 2), 85 | new CMemory(PicTyperAddy1, bPicTyper1, 2), 86 | new CMemory(PicTyperAddy2, bPicTyper2, 4), 87 | new CMemory(PicTyperAddy3, (void*) PicTyperCall, 0, CMemory::ASM::Call) 88 | }; 89 | 90 | /////FusionAttack 91 | DWORD dwFusionRet = FusionAddy + 8; 92 | CodeCave(FusionAttack) 93 | { 94 | Hook: 95 | mov[ecx + eax * 4], esi 96 | inc eax 97 | cmp eax, [esp + 0x64] 98 | jl Hook 99 | mov[esp + 0x18], eax 100 | jmp dwFusionRet 101 | } 102 | EndCodeCave 103 | Hack Hacks::FusionAttack = { new CMemory(FusionAddy, CaveFusionAttack, 3) }; 104 | 105 | /////Perfect Loot 106 | BYTE bPerfectLoot2 [] = { 0x25 }; 107 | BYTE bPerfectLoot3 [] = { 0x81, 0xFE, 0x00, 0x00, 0x00, 0x00 }; 108 | Hack Hacks::PerfectLoot = { 109 | new CMemory(PerfectLootAddy1, 6), 110 | new CMemory(PerfectLootAddy2, bPerfectLoot2, sizeof(bPerfectLoot2)), 111 | new CMemory(PerfectLootAddy3, bPerfectLoot3, sizeof(bPerfectLoot3)), 112 | new CMemory(AirLootAddy, 2) 113 | }; 114 | 115 | /////No Background + Clouds 116 | Hack Hacks::NoBackground = { 117 | new CMemory(NoBGAddy1, 5), 118 | new CMemory(NoBGAddy2, 5) 119 | }; 120 | 121 | /////Faster Mobs 122 | Hack Hacks::FasterMobs = { new CMemory(FasterMobsAddy, 2) }; 123 | 124 | /////Unlimited Morp 125 | BYTE bMorph1 [] = { 0xEB, 0x2E }; 126 | BYTE bMorph2 [] = { 0xEB }; 127 | Hack Hacks::UnlimitedMorph = { 128 | new CMemory(UnlimitedMorphAddy1, bMorph1, 2), 129 | new CMemory(UnlimitedMorphAddy2, bMorph2, 1) 130 | }; 131 | 132 | /////ND - All Attacks 133 | BYTE bgND1 [] = { 0x74 }; 134 | BYTE bgND2 [] = { 0x00 }; 135 | Hack Hacks::NDAllAttacks = { 136 | new CMemory(gNDAddy1, bgND1, 1), 137 | new CMemory(gNDAddy2, bgND2, 1) 138 | }; 139 | 140 | /////Jump Down Anywhere 141 | BYTE bJDA [] = { 0xEB }; 142 | Hack Hacks::JDA = { 143 | new CMemory(JDAAddy1, bJDA, 1), 144 | new CMemory(JDAAddy2, bJDA, 1), 145 | new CMemory(JDAAddy3, 2) 146 | }; 147 | 148 | /////Full Mob Disarm 149 | BYTE bDisarm [] = { 0xE9, 0x24, 0x04, 0x00, 0x00, 0x90, 0x90, 0x90, 0x90 }; //jmp 00772493 + 4 nops 150 | Hack Hacks::MobDisarm = { new CMemory(MobDisarmAddy, bDisarm, sizeof(bDisarm)) }; 151 | 152 | /////No Mobs 153 | BYTE bNoMobs [] = { 0xEB }; 154 | Hack Hacks::NoMobs = { new CMemory(NoMobsAddy, bNoMobs, 1) }; 155 | 156 | /////Vac Right 157 | BYTE bVacRight [] = { 0x75, 0x48 }; 158 | Hack Hacks::VacRight = { new CMemory(VacRightAddy, bVacRight, 2) }; 159 | 160 | /////Walk Unrandom Right 161 | Hack Hacks::WalkRight = { new CMemory(WalkRightAddy, (void*)(WalkRightAddy + 154), 1) }; 162 | 163 | /////Jump Unrandom Right 164 | BYTE bJumpRight [] = { 0xE9, 0x7A, 0x02, 0x00, 0x00, 0x90 }; 165 | Hack Hacks::JumpRight = { new CMemory(JumpRightAddy, bJumpRight, 6) }; 166 | 167 | /////NoKB 168 | BYTE bNoKB [] = { 0x00 }; 169 | Hack Hacks::NoKB = { new CMemory(NoKBAddy, bNoKB, 1) }; 170 | 171 | /////Sit Hack 172 | BYTE bSit [] = { 0x75 }; 173 | Hack Hacks::SitHack = { new CMemory(SitHackAddy, bSit, 1) }; 174 | 175 | /////50 Seconds Godmode 176 | BYTE bSecondGodmode1 [] = { 0x7E }; 177 | BYTE bSecondGodmode2 [] = { 0xD4, 0x36 }; 178 | Hack Hacks::SecondGodmode = { 179 | new CMemory(Godmode50SecAddy1, bSecondGodmode1, 1), 180 | new CMemory(Godmode50SecAddy2, bSecondGodmode2, 2) 181 | }; 182 | 183 | /////Logo Skipper 184 | BYTE bLogoSkipper [] = { 0x50, 0x42 }; 185 | Hack Hacks::LogoSkipper = { new CMemory(LogoSkipperAddy, bLogoSkipper, 2) }; 186 | 187 | /////View Swears 188 | Hack Hacks::NoSwears = { new CMemory(ViewSwearsAddy, 2) }; 189 | 190 | /////FMA 191 | BYTE bFMA [] = { 0xEB }; 192 | Hack Hacks::FMA = { new CMemory(FMAAddy, bFMA, 1) }; 193 | 194 | /////Ghoul's Scare Mob Lagg 195 | BYTE bScareMobs [] = { 0x75 }; 196 | Hack Hacks::ScareMobs = { new CMemory(ScareMobsAddy, bScareMobs, 1) }; 197 | 198 | /////Always Face Left 199 | BYTE bFaceLeftAfterCC [] = { 0xB8, 0x05, 0x00, 0x00, 0x00, 0x90 }; 200 | Hack Hacks::FaceLeftAfterCC = { new CMemory(FLACC, bFaceLeftAfterCC, 6) }; 201 | 202 | /////CPU Hack 203 | Hack Hacks::CPUHack = { 204 | new CMemory(CPUAddy1, 5)/*, 205 | new CMemory(CPUAddy2, 5), 206 | new CMemory(CPUAddy3, 5)*/ 207 | }; 208 | 209 | /////Unlimited Attack 210 | DWORD dwUARet = UAAddy + 6; 211 | BOOL WINAPI UA() 212 | { 213 | if (CMS::AttackCount > 90) return TRUE; 214 | return FALSE; 215 | } 216 | CodeCave(UA) 217 | { 218 | mov[eax], edi //orig code 219 | pushad 220 | call UA 221 | cmp eax, TRUE // Attack Count offset 222 | popad 223 | jne UAexit 224 | add dword ptr[eax], 0x08 225 | 226 | UAexit: 227 | pop edi 228 | mov[eax + 0x04], ecx 229 | jmp dwUARet 230 | } 231 | EndCodeCave 232 | Hack Hacks::UnlimitedAttack = { new CMemory(UAAddy, CaveUA, 1) }; 233 | 234 | /////Disable Final Attack Luna 235 | Hack Hacks::DisableFinalAttack = { new CMemory(DFAAddy, 7) }; 236 | 237 | /////ND Mining 238 | BYTE bNDMining [] = { 0xEB }; 239 | Hack Hacks::NDMining = { 240 | new CMemory(NDMiningAddy1, 2), 241 | new CMemory(NDMiningAddy2, bNDMining, 1), 242 | new CMemory(NDMiningAddy3, 2) 243 | }; 244 | 245 | /////Hide Damage 246 | BYTE bHideDamage1 [] = { 0x00 }; 247 | BYTE bHideDamage2 [] = { 0x90, 0xE9 }; 248 | BYTE bHideDamage3 [] = { 0xEB }; 249 | Hack Hacks::HideDamage = { 250 | new CMemory(HideDamageAddy1, bHideDamage1, 1), 251 | new CMemory(HideDamageAddy2, bHideDamage2, 2), 252 | new CMemory(HideDamageAddy3, bHideDamage3, 1), 253 | new CMemory(HideDamageAddy4, bHideDamage3, 1), 254 | new CMemory(HideDamageAddy5, bHideDamage3, 1) 255 | }; 256 | 257 | /////Mercedes Combos without comboing 258 | BYTE bMercedesCombo [] = { 0xEB }; 259 | Hack Hacks::MercedesCombo = { 260 | new CMemory(MercedesComboAddy1, bMercedesCombo, 1), 261 | new CMemory(MercedesComboAddy2, bMercedesCombo, 1) 262 | }; 263 | 264 | /* Patched ? 265 | int SkillInjectionSkills[] = {97, 99, 100, 103, 61001005, 4001334, 4201005, 4211011, 4221001, 1001004, 1221009, 1311005, 2201004, 2211003}; 266 | 267 | /////SkillInjection Disable Checks 268 | BYTE bSkillInjection1[] = {0x90, 0x90, 0x90, 0x90, 0x90, 0x90}; 269 | BYTE bSkillInjection3[] = {0xEB, 0x12}; 270 | //new CMemory cmSkillInjectionChecks(SkillInjectionChecksAddy1, bSkillInjection1, 6, SkillInjectionChecksAddy2, bSkillInjection1, 6, SkillInjectionChecksAddy3, bSkillInjection3, 2); 271 | 272 | /////SkillInjection Set Skill ID 273 | DWORD dwSkillInjectionRet = SkillInjectionInjectAddy + 6; 274 | int iSkillInjectionSkillID; 275 | BOOL WINAPI canSkillInjection() 276 | { 277 | if(CC->Busy || CMS::UsingPots || CMS::UsingAutoSkill || !SkillInjectionStopWatch.IsOver()) return FALSE; 278 | SkillInjectionStopWatch.Start(); 279 | return TRUE; 280 | } 281 | CodeCave(SkillInjection) 282 | { 283 | push eax 284 | call canSkillInjection 285 | cmp eax, TRUE 286 | pop eax 287 | //If it returns TRUE, jump to InjectSkillInjection 288 | je InjectSkill 289 | 290 | //Else 291 | mov edx,[esi+0x00006DAC] 292 | jmp dword ptr [dwSkillInjectionRet] 293 | 294 | InjectSkill: 295 | mov edx,[iSkillInjectionSkillID] 296 | jmp dword ptr [dwSkillInjectionRet] 297 | } 298 | EndCodeCave 299 | new CMemory cmSkillInjectionCave(SkillInjectionInjectAddy, CaveSkillInjection, 1, true); 300 | StopWatch SkillInjectionStopWatch; 301 | */ 302 | 303 | /////No Fadestarge 304 | BYTE bNoFadeStages [] = { 0xc2, 0x04, 0x00 }; 305 | Hack Hacks::NoFadeStages = { 306 | new CMemory(FadeAddy1, bNoFadeStages, 3), 307 | new CMemory(FadeAddy2, bNoFadeStages, 3) 308 | }; 309 | 310 | ///No CC BLue Boxes 311 | Hack Hacks::NoCCBoxes = { 312 | new CMemory(NoCCBoxesAddy1, 5), 313 | new CMemory(NoCCBoxesAddy2, 5) 314 | }; 315 | 316 | ////Auto ExitCS Script 317 | DWORD dwExitCSRet = ExitCSAddy + 9; 318 | DWORD dwExitCSCall = ExitCSCall; 319 | CodeCave(ExitCS) 320 | { 321 | mov fs : [00000000], ecx 322 | pushad 323 | call dwExitCSCall 324 | popad 325 | jmp dwExitCSRet 326 | } 327 | EndCodeCave 328 | Hack Hacks::ExitCS = { new CMemory(ExitCSAddy, CaveExitCS, 2) }; 329 | 330 | //PacketSender Fix 331 | DWORD dwMainThreadID = 0; 332 | DWORD SendPacketRet = SendPacketAddy + 5; 333 | CodeCave(FixPacketSender) 334 | { 335 | cmp[dwMainThreadID], 0 336 | jnz alreadyKnowMainThreadID 337 | push eax 338 | mov eax, fs:[0x18] 339 | mov eax, [eax + 0x6B8] 340 | mov[dwMainThreadID], eax 341 | pop eax 342 | 343 | alreadyKnowMainThreadID : 344 | push eax 345 | mov eax, fs : [0x18] 346 | mov eax, [eax + 0x6B8] 347 | cmp[dwMainThreadID], eax 348 | jz Continue 349 | mov eax, [dwMainThreadID] 350 | mov fs : [0x6B8], eax 351 | 352 | Continue : //Do the original shit 353 | pop eax 354 | push ebp 355 | mov ebp, esp 356 | push 0xFF 357 | jmp SendPacketRet 358 | } 359 | EndCodeCave 360 | Hack Hacks::ThreadIdFix = { new CMemory(SendPacketAddy, CaveFixPacketSender) }; 361 | 362 | DWORD dwSPControlRet = SPControlAddy + 6; 363 | int spawn_x, spawn_y; 364 | BOOL WINAPI GetCoords() 365 | { 366 | int iMapID = CMS::MapId; 367 | for each(SPControlLocation^ location in SPControl::Locations) 368 | { 369 | if (iMapID == location->MapId) 370 | { 371 | spawn_x = location->X; 372 | spawn_y = location->Y; 373 | return TRUE; 374 | } 375 | } 376 | return FALSE; 377 | } 378 | 379 | CodeCave(SPControl) 380 | { 381 | push eax 382 | call GetCoords 383 | cmp eax, FALSE 384 | pop eax 385 | je SpawnNormal //if eax == false, jump to SpawnNormal 386 | 387 | //Spawn on controlled location 388 | mov edi, [spawn_x] 389 | mov ebx, [spawn_y] 390 | jmp[dwSPControlRet] 391 | 392 | SpawnNormal: 393 | mov edi, [eax + 0x0C] 394 | mov ebx, [eax + 0x10] 395 | jmp[dwSPControlRet] 396 | } 397 | EndCodeCave 398 | BYTE SPCCheck [] = { 0xEB }; 399 | Hack Hacks::SpawnControl = { 400 | new CMemory(SPCChecksAddy, SPCCheck, 1), 401 | new CMemory(SPControlAddy, CaveSPControl, 1) 402 | }; 403 | 404 | DWORD IFSJump = IFSCall; //55 8B EC 83 E4 ?? 6A ?? 68 ?? ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 83 EC ?? 53 56 57 A1 ?? ?? ?? ?? 33 C4 50 8D 44 24 ?? 64 A3 ?? ?? ?? ?? 8B D9 8B 75 ?? 8B 7D ?? 85 F6 405 | DWORD Skill1 = 61001000, Skill2 = 61001005; 406 | CodeCave(IFS) 407 | { 408 | mov eax, [Skill1] 409 | cmp [esp + 8], eax 410 | jne IFSEnd 411 | 412 | mov eax,[Skill2] 413 | mov[esp + 8], eax 414 | 415 | IFSEnd: 416 | jmp IFSJump 417 | } 418 | EndCodeCave 419 | Hack Hacks::InstantFinalSlash = { 420 | new CMemory(IFSAddy1, CaveIFS, 0, CMemory::ASM::Call), //E8 ?? ?? ?? ?? 85 C0 0F 8E ?? ?? ?? ?? 8B 7C 24 ?? 85 FF 74 ?? 81 C7 ?? ?? ?? ?? 83 3F ?? 74 ?? 8B 6C 24 ?? 8B 5F ?? 8B CD 421 | new CMemory(IFSAddy2, CaveIFS, 0, CMemory::ASM::Call) //E8 ?? ?? ?? ?? 8B E8 89 6C 24 ?? 81 FE ?? ?? ?? ?? 75 ?? 8B 4C 24 ?? E8 ?? ?? ?? ?? 85 C0 422 | }; 423 | void Hacks::SetIFSClass(int index) 424 | { 425 | switch (index) 426 | { 427 | case 0: //Kaiser 428 | Skill1 = 61001000; 429 | Skill2 = 61001005; 430 | break; 431 | case 1: //DemonSlayer 432 | Skill1 = 31000004; 433 | Skill2 = 31001008; 434 | break; 435 | } 436 | } 437 | 438 | StopWatch TeleportWatch(milliseconds(2500)); 439 | void TryTeleport(int X, int Y) 440 | { 441 | if (!TeleportWatch.IsOver() || CMS::ShouldAttack()) return; 442 | if (CMS::ItemCount == 0 && GetCoords() == TRUE) 443 | { 444 | X = spawn_x; 445 | Y = spawn_y; 446 | Log::WriteLine("Teleporting back to SPControl point"); 447 | } 448 | if (!X || !Y || (X == CMS::CharX && Y == CMS::CharY)) return; 449 | TeleportWatch.Start(); 450 | Log::WriteLine("Teleporting to (" + X + ";" + Y + ")"); 451 | Teleport(X, Y); 452 | } 453 | 454 | void Log(POINT* p) 455 | { 456 | Log::WriteLine("X: " + p->x + " Y: " + p->y); 457 | } 458 | 459 | bool ItemvacLocked; 460 | POINT* GetItemvacCoords() 461 | { 462 | static int itemvacX = 0; 463 | static int itemvacY = 0; 464 | if (!ItemvacLocked) 465 | { 466 | itemvacX = CMS::CharX; 467 | itemvacY = CMS::CharY; 468 | } 469 | POINT* p = new POINT; 470 | p->x = itemvacX; 471 | p->y = itemvacY; 472 | return p; 473 | } 474 | 475 | void Hacks::LockItemVac(bool enable) 476 | { 477 | GetItemvacCoords(); 478 | ItemvacLocked = enable; 479 | } 480 | -------------------------------------------------------------------------------- /WatyBotRevamp/Hacks.h: -------------------------------------------------------------------------------- 1 | #include "Memory.h" 2 | #pragma warning(disable : 4793 4244 4793 4733) 3 | 4 | class Hacks 5 | { 6 | public: 7 | static Hack DojangGodmode; 8 | static Hack IceGuard; 9 | static void SetIceGuardLimit(int limit); 10 | static Hack AutoAggro; 11 | static Hack PinPicTyper; 12 | static Hack FusionAttack; 13 | static Hack PerfectLoot; 14 | static Hack NoBackground; 15 | static Hack FasterMobs; 16 | static Hack UnlimitedMorph; 17 | static Hack NDAllAttacks; 18 | static Hack JDA; 19 | static Hack MobDisarm; 20 | static Hack NoMobs; 21 | static Hack VacRight; 22 | static Hack WalkRight; 23 | static Hack JumpRight; 24 | static Hack NoKB; 25 | static Hack SitHack; 26 | static Hack SecondGodmode; 27 | static Hack LogoSkipper; 28 | static void Hacks::LockItemVac(bool enable); 29 | static Hack NoSwears; 30 | static Hack FMA; 31 | static Hack ScareMobs; 32 | static Hack FaceLeftAfterCC; 33 | static Hack CPUHack; 34 | static Hack UnlimitedAttack; 35 | static Hack DisableFinalAttack; 36 | static Hack NDMining; 37 | static Hack HideDamage; 38 | static Hack MercedesCombo; 39 | // static Hack SkillInjection; 40 | static Hack NoFadeStages; 41 | static Hack NoCCBoxes; 42 | // static Hack MouseFly; 43 | static Hack ExitCS; 44 | static Hack ThreadIdFix; 45 | static Hack SpawnControl; 46 | static Hack InstantFinalSlash; 47 | static void SetIFSClass(int index); 48 | }; 49 | -------------------------------------------------------------------------------- /WatyBotRevamp/Hooks.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "HackAddys.h" 3 | #include "Detours.h" 4 | #include 5 | #pragma warning(disable:4099) 6 | 7 | extern void TryTeleport(int x, int y); 8 | extern void UpdateStats(int hp, int maxHp, int mp, int maxMp, __int64 exp, __int64 maxExp); 9 | extern void LogTeleport(DWORD Address, DWORD Value); 10 | 11 | //structs 12 | struct COutPacket 13 | { 14 | BOOL fLoopback; 15 | union 16 | { 17 | LPBYTE lpbData; 18 | LPVOID lpvData; 19 | LPWORD lpwHeader; 20 | }; 21 | DWORD dwcbData; 22 | UINT uOffset; 23 | BOOL fEncryptedByShanda; 24 | }; 25 | struct SKILLENTRY 26 | { 27 | unsigned int uSkillId; 28 | char* lpszName; 29 | char* lpszDescription; 30 | }; 31 | 32 | //typedefs 33 | typedef void (__cdecl *SendPacket_t)(COutPacket *oPacket); 34 | typedef void (__stdcall *CField__SendTransferChannelRequest_t)(int nChannel); 35 | typedef POINT*(__fastcall* CMob__GetPos_t)(void* ECX, void* EDX, POINT* pptUser); 36 | typedef void (__fastcall *TSecType_long___SetData_t)(DWORD dwAddress, DWORD dwEDX, DWORD dwValue); 37 | typedef void (__fastcall *CUIStatusBar__SetNumberValue_t)(void* ECX, void* EDX, int iCurrentHp, int iMaximumHp, int iCurrentMp, int iMaximumMp, __int64 iCurrentExp, __int64 iMaximumExp, int iTempExp); 38 | auto CField_SendTransferChannelRequest = reinterpret_cast(CCAddy); 39 | auto CUIStatusBar__SetNumberValue = reinterpret_cast(0xB574A0);//7D ? 39 ? ? ? 00 00 7E (first) (Start) 40 | auto TSecType_long___SetData = reinterpret_cast(0x421F80); 41 | auto SendPacket = reinterpret_cast(SendPacketHookAddy); 42 | auto CMob__GetPos = reinterpret_cast(0x71DC70); 43 | /* NDFA / SkillInjection Hooks outdated from 90 44 | typedef void (__fastcall* CUserLocal__TryDoingFinalAttack_t)(void* lpvEcx, void* lpvEdx);//0F 84 ? ? 00 00 2B AE (start) 45 | typedef int (__fastcall* CUserLocal__TryDoingMeleeAttack_t)(void* lpvEcx, void* lpvEdx, SKILLENTRY* pSkill, int iSkillLevel, int* lpiShootRange, int iSerialAttackSkillId, unsigned int uLastAttackMobId, int iKeyDown, class CGrenade* pGrenade, int iReservedSkillId, BOOL bTimeBombAttack, int iTimeBombX, int iTimeBombY, int iShootSkillId);//85 C0 74 ? 33 C0 E9 ? ? ? 00 83 (start) 46 | typedef int (__fastcall* CUserLocal__TryDoingShootAttack_t)(void* lpvEcx, void* lpvEdx, SKILLENTRY* pSkill, int iSkillLevel, int iShootRange, BOOL bMortalBlow, int iKeyDown, unsigned int uRandForMortalBlowAction, int iUnknown);//83 B8 ? ? 00 00 00 74 ? 33 C0 E9 (start) 47 | typedef int (__fastcall* CUserLocal__TryDoingMagicAttack_t)(void* lpvEcx, void* lpvEdx, SKILLENTRY* pSkill, int iSkillLevel, int iReduceCount, int iKeyDown);//85 C0 75 ? 8B 8D ? ? FF FF 81 C1 ? ? 00 00 E8 ? ? ? FF 85 C0 74 (start) 48 | typedef SKILLENTRY* (__fastcall* CSkillInfo__GetSkill_t)(void* lpvEcx, void* lpvEdx, int iSkillId);//E8 ? ? ? FF 8B D8 85 FF 74 ? 83 (call) 49 | typedef unsigned int (__fastcall* CUserLocal__GetSkillLevel_t)(void* lpvEcx, void* lpvEdx, int iSkillId, int bUnknown);//E8 ? ? ? 00 85 C0 7F ? 6A 00 (call) 50 | void* const CSkillInfo = reinterpret_cast(0x011D7F68); //8B 3D ? ? ? ? 6A 00 6A 00 6A 00 8D 44 24 ? ? 68 ? ? ? ? 8B 51 | */ 52 | 53 | //Hooks 54 | void __fastcall CUIStatusBar__SetNumberValue__Hook(void*lpvEcx, void*lpvEdx, int iCurrentHp, int iMaximumHp, int iCurrentMp, int iMaximumMp, __int64 iCurrentExp, __int64 iMaximumExp, int iTempExp) 55 | { 56 | UpdateStats(iCurrentHp, iMaximumHp, iCurrentMp, iMaximumMp, iCurrentExp, iMaximumExp); 57 | return CUIStatusBar__SetNumberValue(lpvEcx, 0, iCurrentHp, iMaximumHp, iCurrentMp, iMaximumMp, iCurrentExp, iMaximumExp, iTempExp); 58 | } 59 | BOOL WINAPI PtInRect__Hook(_In_ CONST RECT *lprc, _In_ POINT pt) 60 | { 61 | MessageBox(0,(LPWSTR)((unsigned long) _ReturnAddress()),0,0); 62 | TryTeleport(pt.x, pt.y); 63 | return PtInRect(lprc, pt); 64 | } 65 | POINT* __fastcall CMob__GetPos__Hook(void* ECX, void* EDX, POINT* pptUser) 66 | { 67 | extern POINT* GetItemvacCoords(); 68 | return GetItemvacCoords(); 69 | } 70 | 71 | //constants 72 | const DWORD *const pdwUserLocal = reinterpret_cast(0x13FE690); // 8B ? ? ? ? ? 85 C9 74 ? 83 B8 ? ? ? ? 00 74 ? 8B ? ? ? ? ? 85 C0 7E ? 8B 73 | const DWORD dwTeleportToggleOffset = 0x00007B04; // 8D ? ? ? ? ? 8B ? 8B ? E8 ? ? ? ? 85 ? 0F 85 ? ? ? ? 39 ? ? ? ? ? 74 | const DWORD dwTeleportYOffset = 0x00007B1C; // 8D ? ? ? ? ? ? 8B ? E8 ? ? ? ? 6A ? 8B ? E8 ? ? ? ? 6A 00 68 ? ? ? ? 75 | const DWORD dwTeleportXOffset = 0x7B28; 76 | 77 | //Start a Detours transaction 78 | BOOL SetHook(__in BOOL bInstall, __inout PVOID* ppvTarget, __in PVOID pvDetour) 79 | { 80 | if (DetourTransactionBegin() != NO_ERROR) return FALSE; 81 | 82 | if (DetourUpdateThread(GetCurrentThread()) == NO_ERROR) 83 | if ((bInstall ? DetourAttach : DetourDetach)(ppvTarget, pvDetour) == NO_ERROR) 84 | if (DetourTransactionCommit() == NO_ERROR) 85 | return TRUE; 86 | 87 | DetourTransactionAbort(); 88 | return FALSE; 89 | } 90 | 91 | // Send a MapleStory packet using byte data 92 | DWORD WINAPI TrySendPacket(__in_bcount(nLength) LPBYTE lpBytes, __in DWORD dwLength) 93 | { 94 | COutPacket Packet; 95 | ZeroMemory(&Packet, sizeof(COutPacket)); 96 | 97 | Packet.lpbData = lpBytes; 98 | Packet.dwcbData = dwLength; 99 | 100 | try 101 | { 102 | SendPacket(&Packet); 103 | return TRUE; 104 | } 105 | catch (...) 106 | { 107 | return FALSE; 108 | } 109 | } 110 | bool ChangeChannel(int channel) 111 | { 112 | try 113 | { 114 | CField_SendTransferChannelRequest(channel); 115 | return true; 116 | } 117 | catch (...) 118 | { 119 | return false; 120 | } 121 | } 122 | bool EnableStatsHook(bool enable) 123 | { 124 | return SetHook(enable, (PVOID*) &CUIStatusBar__SetNumberValue, CUIStatusBar__SetNumberValue__Hook) == TRUE; 125 | } 126 | void EnableItemHook(bool state) 127 | { 128 | DWORD PtInRectAddy = 0x14115A4; 129 | if (state) *(unsigned long*) PtInRectAddy = (unsigned long) PtInRect__Hook; 130 | else *(unsigned long*) PtInRectAddy = (unsigned long) PtInRect; 131 | } 132 | bool Teleport(_In_ int x, _In_ int y) 133 | { 134 | try 135 | { 136 | DWORD dwUserLocal = *pdwUserLocal; 137 | TSecType_long___SetData(dwUserLocal + dwTeleportToggleOffset, NULL, 0); 138 | TSecType_long___SetData(dwUserLocal + dwTeleportXOffset, NULL, x); 139 | TSecType_long___SetData(dwUserLocal + dwTeleportYOffset, NULL, y); 140 | TSecType_long___SetData(dwUserLocal + dwTeleportToggleOffset, NULL, 1); 141 | } 142 | catch (...) 143 | { 144 | return false; 145 | } 146 | return true; 147 | } 148 | bool HookCMob__GetPos(bool enable) 149 | { 150 | return SetHook(enable, (PVOID*) &CMob__GetPos, CMob__GetPos__Hook) == TRUE; 151 | } -------------------------------------------------------------------------------- /WatyBotRevamp/Log.cpp: -------------------------------------------------------------------------------- 1 | #include "Log.h" 2 | 3 | Void Log::WriteLine(String^ Message) 4 | { 5 | StreamWriter^ sw; 6 | try 7 | { 8 | sw = gcnew StreamWriter(Path, true); 9 | if (Message == String::Empty) sw->WriteLine(); 10 | else sw->WriteLine(DateTime::Now.ToString() + ": " + Message); 11 | } 12 | catch (Exception^) 13 | { 14 | // Can't log here :( 15 | } 16 | finally 17 | { 18 | if (sw) delete (IDisposable^) sw; 19 | } 20 | } 21 | 22 | Void Log::WriteLine() 23 | { 24 | WriteLine(String::Empty); 25 | } 26 | -------------------------------------------------------------------------------- /WatyBotRevamp/Log.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | using namespace System; 3 | using namespace System::IO; 4 | 5 | public ref class Log sealed 6 | { 7 | public: 8 | static Void WriteLine(String^ Message); 9 | static Void WriteLine(); 10 | static String^ Path = Path::Combine(Environment::GetFolderPath(Environment::SpecialFolder::ApplicationData), "Waty", "log.txt"); 11 | }; 12 | -------------------------------------------------------------------------------- /WatyBotRevamp/MainDll.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #pragma unmanaged 3 | 4 | extern void Main(void); 5 | 6 | ::BOOL WINAPI DllWork(__in::HMODULE hModule) 7 | { 8 | Main(); 9 | return true; 10 | } 11 | 12 | ::BOOL WINAPI DllMain(__in::HMODULE hModule, __in::DWORD dwReason, __in __reserved::LPVOID lpvReserved) 13 | { 14 | ::HANDLE hThread = NULL; 15 | 16 | if (dwReason == DLL_PROCESS_ATTACH) 17 | { 18 | if ((hThread = ::CreateThread(NULL, 0, (::LPTHREAD_START_ROUTINE)&DllWork, (::HMODULE)hModule, 0, NULL)) == NULL) 19 | { 20 | return FALSE; 21 | } 22 | if (::CloseHandle(hThread) == FALSE) 23 | { 24 | 25 | } 26 | } 27 | return TRUE; 28 | } 29 | 30 | BOOL WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCommandLine, int nCmdShow) 31 | { 32 | Main(); 33 | } 34 | -------------------------------------------------------------------------------- /WatyBotRevamp/MainForm.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 | 308, 16 122 | 123 | 124 | 308, 16 125 | 126 | 127 | 422, 16 128 | 129 | 130 | 925, 16 131 | 132 | 133 | 128, 16 134 | 135 | 136 | 19, 16 137 | 138 | 139 | 596, 16 140 | 141 | 142 | 713, 16 143 | 144 | 145 | 820, 16 146 | 147 | 148 | 1086, 16 149 | 150 | -------------------------------------------------------------------------------- /WatyBotRevamp/MapleStory.cpp: -------------------------------------------------------------------------------- 1 | #include "MapleStory.h" 2 | #include "PacketSender.h" 3 | #include "ChangeChannel.h" 4 | #include "HackAddys.h" 5 | #include "Log.h" 6 | 7 | using namespace WatyBotRevamp; 8 | extern int KeyCodes []; 9 | extern int KeyCodesCount; 10 | extern void ShowError(String^ Message); 11 | 12 | template 13 | T CMS::ReadPointer(DWORD ulBase, int iOffset) 14 | { 15 | if (*(int*) WallBasePtr) 16 | { 17 | __try 18 | { 19 | return *(T*) (*(DWORD*) ulBase + iOffset); 20 | } 21 | __except (EXCEPTION_EXECUTE_HANDLER) { return -1; } 22 | } 23 | else return -1; 24 | } 25 | bool CMS::WritePointer(unsigned long ulBase, int iOffset, int iValue) 26 | { 27 | if (*(int*) WallBasePtr) 28 | { 29 | __try 30 | { 31 | *(int*) (*(unsigned long*) ulBase + iOffset) = iValue; 32 | return true; 33 | } 34 | __except (EXCEPTION_EXECUTE_HANDLER) 35 | { 36 | return false; 37 | } 38 | } 39 | return false; 40 | } 41 | HWND CMS::FindProcessWindow() 42 | { 43 | static HWND MShWnd = NULL; 44 | if (MShWnd != NULL) return MShWnd; 45 | 46 | TCHAR szBuffer[200]; 47 | DWORD dwTemp; 48 | 49 | for (HWND hWnd = GetTopWindow(NULL); hWnd != NULL; hWnd = GetNextWindow(hWnd, GW_HWNDNEXT)) 50 | { 51 | GetWindowThreadProcessId(hWnd, &dwTemp); 52 | 53 | if (dwTemp != GetCurrentProcessId()) continue; 54 | 55 | 56 | if (!GetClassName(hWnd, szBuffer, sizeof(szBuffer) / sizeof(TCHAR))) continue; 57 | if (!wcscmp(szBuffer, L"MapleStoryClass")) 58 | { 59 | MShWnd = hWnd; 60 | return hWnd; 61 | } 62 | } 63 | return false; 64 | } 65 | void CMS::SendKey(int Key) 66 | { 67 | PostMessage(MSHWND, WM_KEYDOWN, Key, (MapVirtualKey(Key, 0) << 16) + 1); 68 | } 69 | void CMS::SpamKey(int Key) 70 | { 71 | PostMessage(MSHWND, WM_KEYDOWN, Key, (MapVirtualKey(Key, 0) << 16) + 1); 72 | PostMessage(MSHWND, WM_KEYUP, Key, (MapVirtualKey(Key, 0) << 16) + 1); 73 | } 74 | void CMS::SendSwitch(int index) 75 | { 76 | if (index < KeyCodesCount) SendKey(KeyCodes[index]); 77 | else PacketSender::Send(PacketSender::Packets[index - KeyCodesCount]); 78 | } 79 | void CMS::SpamSwitch(int index) 80 | { 81 | if (index < KeyCodesCount) SpamKey(KeyCodes[index]); 82 | else PacketSender::Send(PacketSender::Packets[index - KeyCodesCount]); 83 | } 84 | 85 | bool CMS::ShouldAttack() 86 | { 87 | return (InGame && !CC::IsBusy && MobCount > SAWSIL && !UsingAutoSkill); 88 | } 89 | bool CMS::ShouldLoot() 90 | { 91 | if (InGame && ItemCount > 0) 92 | { 93 | if (OLWNA) return !ShouldAttack(); 94 | return true; 95 | } 96 | return false; 97 | } 98 | 99 | int CMS::MobCount::get() 100 | { 101 | return ReadPointer(MobBasePtr, MobCountOffset); 102 | } 103 | int CMS::ItemCount::get() 104 | { 105 | return ReadPointer(ItemBasePtr, ItemCountOffset); 106 | } 107 | int CMS::PeopleCount::get() 108 | { 109 | return ReadPointer(PeopleBasePtr, PeopleCountOffset); 110 | } 111 | int CMS::CharX::get() 112 | { 113 | return ReadPointer(CharBasePtr, XOffset); 114 | } 115 | int CMS::CharY::get() 116 | { 117 | return ReadPointer(CharBasePtr, XOffset + 4); 118 | } 119 | void UpdateStats(int hp, int maxHp, int mp, int maxMp, __int64 exp, __int64 maxExp) 120 | { 121 | CMS::CurHP = hp; 122 | CMS::MaxHP = maxHp; 123 | CMS::CurMP = mp; 124 | CMS::MaxMP = maxMp; 125 | CMS::CurEXP = exp; 126 | CMS::MaxEXP = maxExp; 127 | } 128 | int CMS::MapId::get() 129 | { 130 | return ReadPointer(InfoBasePtr, MapIDOffset); 131 | } 132 | int CMS::AttackCount::get() 133 | { 134 | return ReadPointer(CharBasePtr, AttackCountOffset); 135 | } 136 | int CMS::Tubi::get() 137 | { 138 | return ReadPointer(ServerBasePtr, TubiOffset); 139 | } 140 | void CMS::Tubi::set(int i) 141 | { 142 | WritePointer(ServerBasePtr, TubiOffset, i); 143 | } 144 | int CMS::Breath::get() 145 | { 146 | return ReadPointer(CharBasePtr, BreathOffset); 147 | } 148 | void CMS::Breath::set(int i) 149 | { 150 | WritePointer(CharBasePtr, BreathOffset, i); 151 | } 152 | int CMS::Channel::get() 153 | { 154 | return ReadPointer(ServerBasePtr, ChannelOffset); 155 | } 156 | int CMS::PetFullness::get() 157 | { 158 | DWORD Pet = ReadPointer(CharBasePtr, PetOffset); 159 | return ReadPointer(Pet + 0x4, PetFullnessOffset); 160 | } 161 | bool CMS::gotMSCRC::get() 162 | { 163 | return *(BYTE*) MSCRCAddy == 233; 164 | } 165 | bool CMS::InGame::get() 166 | { 167 | /*static bool previousTime = false; 168 | if (MapId <= 0 && previousTime && !CC::IsBusy) ShowError("You DC'd"); 169 | previousTime = MapId > 0; 170 | return previousTime;*/ 171 | return MapId > 0; 172 | } 173 | HWND CMS::MSHWND::get() 174 | { 175 | return FindProcessWindow(); 176 | } -------------------------------------------------------------------------------- /WatyBotRevamp/MapleStory.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | public ref class CMS 5 | { 6 | public: 7 | template 8 | static T ReadPointer(unsigned long ulBase, int iOffset); 9 | static bool WritePointer(unsigned long ulBase, int iOffset, int iValue); 10 | static HWND FindProcessWindow(); 11 | static void SendKey(int Key); 12 | static void SpamKey(int Key); 13 | static void SendSwitch(int index); 14 | static void SpamSwitch(int index); 15 | 16 | static property bool UsingAutoSkill; 17 | static property int CurHP; 18 | static property int MaxHP; 19 | static property int CurMP; 20 | static property int MaxMP; 21 | static property __int64 CurEXP; 22 | static property __int64 MaxEXP; 23 | static property bool UsingPots; 24 | static property int SAWSIL; 25 | static property bool OLWNA; 26 | static bool ShouldAttack(); 27 | static bool ShouldLoot(); 28 | 29 | static property int MobCount{int get(); } 30 | static property int ItemCount{int get(); } 31 | static property int PeopleCount{int get(); } 32 | static property int CharX{int get(); } 33 | static property int CharY{int get(); } 34 | static property int MapId{int get(); } 35 | static property int AttackCount{int get(); } 36 | static property int Tubi{int get(); void set(int i); } 37 | static property int Breath{int get(); void set(int i); } 38 | static property int Channel{int get(); } 39 | static property int PetFullness{int get(); } 40 | static property bool gotMSCRC{bool get(); } 41 | static property bool InGame{bool get(); } 42 | static property HWND MSHWND{HWND get(); } 43 | }; 44 | -------------------------------------------------------------------------------- /WatyBotRevamp/Memory.cpp: -------------------------------------------------------------------------------- 1 | #include "Memory.h" 2 | #include "MapleStory.h" 3 | 4 | extern void ShowError(System::String^ Message); 5 | 6 | //Constructors 7 | CMemory::CMemory(DWORD Address, BYTE *Mem, int size) : Type(HackType::Bytes), ulAddress(Address), bMem(Mem), bCount(size) {} 8 | CMemory::CMemory(DWORD Address, int nops) : Type(HackType::Nops), ulAddress(Address), iNops(nops), bCount(nops) {} 9 | CMemory::CMemory(DWORD ulAddress, void* ulDestination, int Nops, ASM type) : Type(HackType::Cave), ulAddress(ulAddress), iNops(Nops), ulDestination(ulDestination), ASMType(type), bCount(5 + Nops) {} 10 | //Destructor 11 | CMemory::~CMemory(void) 12 | { 13 | this->RestoreMem(); 14 | } 15 | 16 | void CMemory::Enable(bool enable) 17 | { 18 | enable ? this->WriteMem() : this->RestoreMem(); 19 | } 20 | void CMemory::WriteMem() 21 | { 22 | //Start VirtualProtect 23 | DWORD dwOldProtect; 24 | VirtualProtect((void*) ulAddress, bCount, PAGE_EXECUTE_READWRITE, &dwOldProtect); 25 | 26 | //Back-up old memory 27 | oldMem = new BYTE[bCount]; 28 | memcpy(oldMem, (void*) ulAddress, bCount); 29 | 30 | //Write Hack 31 | if (this->Type == HackType::Cave) 32 | { 33 | __try 34 | { 35 | *(BYTE*) ulAddress = (int) ASMType; 36 | *(DWORD*) (ulAddress + 1) = (int) (((int) ulDestination - (int) ulAddress) - 5); 37 | if (iNops) memset((void*) (ulAddress + 5), (int) ASM::Nop, iNops); 38 | } 39 | __except (EXCEPTION_EXECUTE_HANDLER){}; 40 | } 41 | else if (this->Type == HackType::Nops) memset((void*) ulAddress, (int) ASM::Nop, iNops); 42 | else memcpy_s((void*) this->ulAddress, bCount, (void*) this->bMem, bCount); 43 | 44 | //Stop VirtualProtect 45 | VirtualProtect((void*) ulAddress, bCount, dwOldProtect, &dwOldProtect); 46 | } 47 | void CMemory::RestoreMem() 48 | { 49 | //Start VirtualProtect 50 | DWORD dwOldProtect; 51 | VirtualProtect((void*) ulAddress, bCount, PAGE_EXECUTE_READWRITE, &dwOldProtect); 52 | 53 | //Restore Memory 54 | memcpy_s((void*) this->ulAddress, bCount, (void*) this->oldMem, bCount); 55 | delete [] this->oldMem; 56 | 57 | //Stop VirtualProtect 58 | VirtualProtect((void*) ulAddress, bCount, dwOldProtect, &dwOldProtect); 59 | } 60 | 61 | bool Hack::Enable(bool state) 62 | { 63 | if (!CMS::gotMSCRC) 64 | { 65 | ShowError("Couldn't enable the hack because there was no CRC bypass enabled"); 66 | return false; 67 | } 68 | for (CMemory* cm : hacks) cm->Enable(state); 69 | Enabled = state; 70 | return state; 71 | } 72 | -------------------------------------------------------------------------------- /WatyBotRevamp/Memory.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | 6 | 7 | class CMemory 8 | { 9 | public: 10 | enum class ASM{ Nop = 0x90, Call = 0xE8, Jump = 0xE9 }; 11 | //--constructor--// 12 | CMemory(DWORD ulAddress, BYTE *bMem, int size); 13 | CMemory(DWORD ulAddress, int nops); 14 | CMemory(DWORD ulAddress, void* ulDestination, int ulNops = 0, ASM Type = ASM::Jump); 15 | //--destructor--// 16 | ~CMemory(); 17 | 18 | void Enable(bool enable); 19 | 20 | private: 21 | void WriteMem(); 22 | void RestoreMem(); 23 | 24 | enum class HackType{ Bytes, Nops, Cave }; 25 | 26 | //Both Types 27 | DWORD ulAddress; 28 | BYTE* oldMem; 29 | int bCount; 30 | 31 | HackType Type; 32 | ASM ASMType; 33 | 34 | //Bytes 35 | BYTE* bMem; 36 | 37 | //Cave 38 | void* ulDestination; 39 | int iNops; 40 | }; 41 | 42 | class Hack 43 | { 44 | public: 45 | Hack(std::initializer_list list) : hacks(list) {} 46 | 47 | bool Enable(bool state); 48 | bool Enabled; 49 | 50 | private: 51 | std::vector hacks; 52 | }; 53 | -------------------------------------------------------------------------------- /WatyBotRevamp/PacketDialog.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "PacketSender.h" 3 | extern Void ShowErrorDialog(System::String^ Message); 4 | 5 | namespace WatyBotRevamp { 6 | 7 | using namespace System; 8 | using namespace System; 9 | using namespace System::ComponentModel; 10 | using namespace System::Collections; 11 | using namespace System::Windows::Forms; 12 | using namespace System::Data; 13 | using namespace System::Drawing; 14 | 15 | /// 16 | /// Summary for PacketDialog 17 | /// 18 | public ref class PacketDialog : public Form 19 | { 20 | public: 21 | PacketDialog() 22 | { 23 | InitializeComponent(); 24 | Packet = gcnew WatyBotRevamp::Packet(); 25 | } 26 | PacketDialog(Packet^ pd) 27 | { 28 | InitializeComponent(); 29 | 30 | this->Text = "Edit Packet Dialog"; 31 | this->bSave->Text = "Save Changes"; 32 | 33 | this->tbName->Text = pd->Name; 34 | this->tbData->Lines = pd->Data->ToArray(); 35 | this->nudInterval->Value = pd->Interval; 36 | 37 | this->Packet = pd; 38 | } 39 | 40 | Packet^ Packet; 41 | 42 | protected: 43 | /// 44 | /// Clean up any resources being used. 45 | /// 46 | ~PacketDialog() 47 | { 48 | if (components) 49 | { 50 | delete components; 51 | } 52 | } 53 | private: 54 | Label^ lName; 55 | TextBox^ tbName; 56 | Windows::Forms::Label^ lData; 57 | TextBox^ tbData; 58 | Windows::Forms::Label^ lInterval; 59 | NumericUpDown^ nudInterval; 60 | 61 | Button^ bSave; 62 | Button^ bCancel; 63 | 64 | System::ComponentModel::Container ^components; 65 | 66 | #pragma region Windows Form Designer generated code 67 | /// 68 | /// Required method for Designer support - do not modify 69 | /// the contents of this method with the code editor. 70 | /// 71 | void InitializeComponent(void) 72 | { 73 | this->bSave = (gcnew System::Windows::Forms::Button()); 74 | this->tbData = (gcnew System::Windows::Forms::TextBox()); 75 | this->tbName = (gcnew System::Windows::Forms::TextBox()); 76 | this->lName = (gcnew System::Windows::Forms::Label()); 77 | this->lData = (gcnew System::Windows::Forms::Label()); 78 | this->lInterval = (gcnew System::Windows::Forms::Label()); 79 | this->nudInterval = (gcnew System::Windows::Forms::NumericUpDown()); 80 | this->bCancel = (gcnew System::Windows::Forms::Button()); 81 | (cli::safe_cast(this->nudInterval))->BeginInit(); 82 | this->SuspendLayout(); 83 | // 84 | // bSave 85 | // 86 | this->bSave->Location = System::Drawing::Point(12, 91); 87 | this->bSave->Name = L"bSave"; 88 | this->bSave->Size = System::Drawing::Size(115, 23); 89 | this->bSave->TabIndex = 8; 90 | this->bSave->Text = L"Add Packet"; 91 | this->bSave->UseVisualStyleBackColor = true; 92 | this->bSave->Click += gcnew System::EventHandler(this, &PacketDialog::bSave_Click); 93 | // 94 | // tbData 95 | // 96 | this->tbData->CharacterCasing = System::Windows::Forms::CharacterCasing::Upper; 97 | this->tbData->Location = System::Drawing::Point(133, 25); 98 | this->tbData->Multiline = true; 99 | this->tbData->Name = L"tbData"; 100 | this->tbData->Size = System::Drawing::Size(192, 60); 101 | this->tbData->TabIndex = 7; 102 | // 103 | // tbName 104 | // 105 | this->tbName->Location = System::Drawing::Point(12, 25); 106 | this->tbName->Name = L"tbName"; 107 | this->tbName->Size = System::Drawing::Size(115, 20); 108 | this->tbName->TabIndex = 6; 109 | // 110 | // lName 111 | // 112 | this->lName->AutoSize = true; 113 | this->lName->Location = System::Drawing::Point(12, 9); 114 | this->lName->Name = L"lName"; 115 | this->lName->Size = System::Drawing::Size(38, 13); 116 | this->lName->TabIndex = 9; 117 | this->lName->Text = L"Name:"; 118 | // 119 | // lData 120 | // 121 | this->lData->AutoSize = true; 122 | this->lData->Location = System::Drawing::Point(130, 9); 123 | this->lData->Name = L"lData"; 124 | this->lData->Size = System::Drawing::Size(33, 13); 125 | this->lData->TabIndex = 10; 126 | this->lData->Text = L"Data:"; 127 | // 128 | // lInterval 129 | // 130 | this->lInterval->AutoSize = true; 131 | this->lInterval->Location = System::Drawing::Point(12, 48); 132 | this->lInterval->Name = L"lInterval"; 133 | this->lInterval->Size = System::Drawing::Size(82, 13); 134 | this->lInterval->TabIndex = 11; 135 | this->lInterval->Text = L"Interval per line:"; 136 | // 137 | // nudInterval 138 | // 139 | this->nudInterval->Location = System::Drawing::Point(13, 65); 140 | this->nudInterval->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 276447232, 23283, 0, 0 }); 141 | this->nudInterval->Name = L"nudInterval"; 142 | this->nudInterval->Size = System::Drawing::Size(114, 20); 143 | this->nudInterval->TabIndex = 12; 144 | // 145 | // bCancel 146 | // 147 | this->bCancel->Location = System::Drawing::Point(133, 91); 148 | this->bCancel->Name = L"bCancel"; 149 | this->bCancel->Size = System::Drawing::Size(192, 23); 150 | this->bCancel->TabIndex = 13; 151 | this->bCancel->Text = L"Cancel"; 152 | this->bCancel->UseVisualStyleBackColor = true; 153 | this->bCancel->Click += gcnew System::EventHandler(this, &PacketDialog::bCancel_Click); 154 | // 155 | // PacketDialog 156 | // 157 | this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); 158 | this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; 159 | this->ClientSize = System::Drawing::Size(337, 126); 160 | this->Controls->Add(this->bCancel); 161 | this->Controls->Add(this->nudInterval); 162 | this->Controls->Add(this->lInterval); 163 | this->Controls->Add(this->lData); 164 | this->Controls->Add(this->lName); 165 | this->Controls->Add(this->bSave); 166 | this->Controls->Add(this->tbData); 167 | this->Controls->Add(this->tbName); 168 | this->Name = L"PacketDialog"; 169 | this->Text = L"New Packet Dialog"; 170 | (cli::safe_cast(this->nudInterval))->EndInit(); 171 | this->ResumeLayout(false); 172 | this->PerformLayout(); 173 | } 174 | #pragma endregion 175 | Void bSave_Click(System::Object^ sender, System::EventArgs^ e) 176 | { 177 | Packet->Name = tbName->Text; 178 | auto data = gcnew List; 179 | data->AddRange(this->tbData->Lines); 180 | Packet->Data = data; 181 | Packet->Interval = (int) nudInterval->Value; 182 | 183 | String^ strError = String::Empty; 184 | if (!Packet->IsValidPacket(strError)) 185 | { 186 | ShowErrorDialog(strError); 187 | return; 188 | } 189 | this->DialogResult = System::Windows::Forms::DialogResult::OK; 190 | Close(); 191 | } 192 | 193 | Void bCancel_Click(System::Object^ sender, System::EventArgs^ e) 194 | { 195 | this->DialogResult = System::Windows::Forms::DialogResult::Cancel; 196 | Close(); 197 | } 198 | }; 199 | } 200 | -------------------------------------------------------------------------------- /WatyBotRevamp/PacketDialog.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 | -------------------------------------------------------------------------------- /WatyBotRevamp/PacketSender.cpp: -------------------------------------------------------------------------------- 1 | #include "PacketSender.h" 2 | #include "Hacks.h" 3 | #include "Settings.h" 4 | 5 | using namespace WatyBotRevamp; 6 | using namespace System::Windows::Forms; 7 | extern Void ShowErrorDialog(System::String^ Message); 8 | 9 | DWORD WINAPI TrySendPacket(__in_bcount(nLength) LPBYTE lpBytes, __in DWORD dwLength); 10 | Packet::Packet() 11 | { 12 | this->Name = String::Empty; 13 | this->Data = gcnew List(1); 14 | this->Interval = 0; 15 | } 16 | 17 | Packet::Packet(String^ Name, List^ Data, int Interval) 18 | { 19 | this->Name = Name; 20 | this->Data = Data; 21 | this->Interval = Interval; 22 | } 23 | 24 | bool Packet::IsValidPacket(String^&strError) 25 | { 26 | if (Data->Count < 1) 27 | { 28 | strError = "Empty Packet!"; 29 | return false; 30 | } 31 | for each(String^ strPacket in Data) 32 | { 33 | if (!PacketSender::VerifyPacket(strPacket, strError)) return false; 34 | } 35 | return true; 36 | } 37 | 38 | void PacketSender::WriteXmlData() 39 | { 40 | Settings::Serialize(Path, serializer, Packets); 41 | } 42 | 43 | void PacketSender::ReadXmlData() 44 | { 45 | Object^ Result = Settings::Deserialize(Path, serializer); 46 | if (Result != nullptr) Packets = safe_cast^>(Result); 47 | } 48 | 49 | 50 | void PacketSender::Add(String^ name, List^ data, int Interval) 51 | { 52 | Add(gcnew Packet(name, data, Interval)); 53 | } 54 | void PacketSender::Add(Packet^ Packet) 55 | { 56 | Packets->Add(Packet); 57 | WriteXmlData(); 58 | } 59 | 60 | bool PacketSender::VerifyPacket(String^ str, String^&strError) 61 | { 62 | String^ strPacket = str->Replace(" ", ""); 63 | if (String::IsNullOrEmpty(strPacket)) 64 | { 65 | strError = "Packet is Empty"; 66 | return false; 67 | } 68 | 69 | if ((strPacket->Length) % 2 == 1) 70 | { 71 | strError = "Packet size is not a multiple of 2"; 72 | return false; 73 | } 74 | 75 | for (int i = 0; i < strPacket->Length; i++) 76 | { 77 | if (strPacket[i] >= '0' && strPacket[i] <= '9') continue; 78 | if (strPacket[i] >= 'A' && strPacket[i] <= 'F') continue; 79 | if (strPacket[i] == '*') continue; 80 | 81 | strError = "Invalid character detected in packet: It contains a \"" + strPacket[i] + "\""; 82 | 83 | return false; 84 | } 85 | return true; 86 | } 87 | 88 | bool PacketSender::Send(String^ str, String^&strError) 89 | { 90 | String^ strPacket = str->Replace(" ", ""); 91 | Random^ randObj = gcnew Random(); 92 | String^ rawBytes = String::Empty; 93 | 94 | for (int i = 0; i < strPacket->Length; i++) 95 | { 96 | if (strPacket[i] == '*') rawBytes += randObj->Next(16).ToString("X"); 97 | else rawBytes += strPacket[i]; 98 | } 99 | 100 | ::DWORD dwOffset = 0; 101 | ::DWORD dwLength = (rawBytes->Length / 2); 102 | ::LPBYTE lpBytes = new ::BYTE[dwLength]; 103 | 104 | for (int i = 0; (dwOffset < dwLength) && ((i + 1) < rawBytes->Length); dwOffset++, i += 2) 105 | lpBytes[dwOffset] = Byte::Parse(rawBytes->Substring(i, 2), Globalization::NumberStyles::HexNumber, Globalization::CultureInfo::InvariantCulture); 106 | 107 | Hacks::ThreadIdFix.Enable(true); 108 | TrySendPacket(lpBytes, dwLength); 109 | delete [] lpBytes; 110 | return true; 111 | } 112 | 113 | bool PacketSender::Send(Packet^ packet) 114 | { 115 | String^ strError = String::Empty; 116 | bool succes; 117 | for each(String^ strPacket in packet->Data) 118 | { 119 | if (!Send(strPacket, strError)) succes = false; 120 | Sleep(packet->Interval); 121 | } 122 | return succes; 123 | } 124 | 125 | bool PacketSender::Send() 126 | { 127 | if (SelectedPacket == nullptr) 128 | { 129 | ShowErrorDialog("Please select a packet"); 130 | return false; 131 | } 132 | return Send(SelectedPacket); 133 | } 134 | 135 | void PacketSender::Spam(int Times) 136 | { 137 | 138 | } 139 | -------------------------------------------------------------------------------- /WatyBotRevamp/PacketSender.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #define EnterCashShop "40 00 ** ** ** 00 00" 3 | #define LeaveCashShop "3E 00" 4 | #define ChangeCharacter "7F"//"2C 01 01 00 **" 5 | 6 | namespace WatyBotRevamp 7 | { 8 | using namespace System; 9 | using namespace System::IO; 10 | using namespace System::Collections::Generic; 11 | using namespace System::Xml::Serialization; 12 | 13 | public ref class Packet sealed 14 | { 15 | public: 16 | Packet(); 17 | Packet(String^ Name, List^ Data, int Interval); 18 | 19 | property String^ Name; 20 | property List^ Data; 21 | property int Interval; 22 | 23 | bool IsValidPacket(String^&strError); 24 | }; 25 | 26 | public ref class PacketSender sealed 27 | { 28 | public: 29 | static String^ Path = Path::Combine(Environment::GetFolderPath(Environment::SpecialFolder::ApplicationData), "Waty\\Packets.xml"); 30 | static List^ Packets = gcnew List; 31 | static Packet^ SelectedPacket; 32 | 33 | //Public Methods 34 | static void Add(Packet^ Packet); 35 | static void Add(String^ name, List^ data, int Interval); 36 | 37 | static bool Send(String^ packet, String^&strError); 38 | static bool Send(Packet^ packet); 39 | static bool Send(); 40 | static void Spam(int Times); 41 | 42 | static void WriteXmlData(); 43 | static void ReadXmlData(); 44 | static bool VerifyPacket(String^ strPacket, String^&strError); 45 | 46 | private: 47 | static XmlSerializer^ serializer = gcnew XmlSerializer(List::typeid); 48 | }; 49 | } 50 | -------------------------------------------------------------------------------- /WatyBotRevamp/SPControl.cpp: -------------------------------------------------------------------------------- 1 | #include "SPControl.h" 2 | #include "Settings.h" 3 | 4 | using namespace WatyBotRevamp; 5 | 6 | SPControlLocation::SPControlLocation() 7 | { 8 | Name = "Error"; 9 | MapId = -1; 10 | X = -1; 11 | Y = -1; 12 | } 13 | 14 | SPControlLocation::SPControlLocation(String^ name, int MapId, int X, int Y) 15 | { 16 | this->Name = name; 17 | this->MapId = MapId; 18 | this->X = X; 19 | this->Y = Y; 20 | } 21 | 22 | void SPControl::WriteXmlData() 23 | { 24 | Settings::Serialize(Path, serializer, Locations); 25 | } 26 | 27 | void SPControl::ReadXmlData() 28 | { 29 | Object^ Result = Settings::Deserialize(Path, serializer); 30 | if (Result != nullptr) Locations = safe_cast^>(Result); 31 | } 32 | 33 | void SPControl::EditLocation(int index, String^ name, int mapid, int x, int y) 34 | { 35 | Locations[index]->Name = name; 36 | Locations[index]->MapId = mapid; 37 | Locations[index]->X = x; 38 | Locations[index]->Y = y; 39 | } 40 | 41 | void SPControl::AddLocation(String^ Name, int MapId, int X, int Y) 42 | { 43 | SPControlLocation^ l = gcnew SPControlLocation; 44 | l->Name = Name; 45 | l->MapId = MapId; 46 | l->X = X; 47 | l->Y = Y; 48 | Locations->Add(l); 49 | WriteXmlData(); 50 | } 51 | -------------------------------------------------------------------------------- /WatyBotRevamp/SPControl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | namespace WatyBotRevamp 3 | { 4 | using namespace System; 5 | using namespace System::IO; 6 | using namespace System::Collections::Generic; 7 | using namespace System::Xml::Serialization; 8 | 9 | public ref class SPControlLocation sealed 10 | { 11 | public: 12 | SPControlLocation(); 13 | SPControlLocation(String^ name, int MapId, int X, int Y); 14 | 15 | [XmlAttribute] 16 | property String^ Name; 17 | property int MapId; 18 | property int X; 19 | property int Y; 20 | }; 21 | 22 | public ref class SPControl 23 | { 24 | public: 25 | static void WriteXmlData(); 26 | static void ReadXmlData(); 27 | static void EditLocation(int index, System::String^ name, int mapid, int x, int y); 28 | static void AddLocation(String^ Name, int MapId, int X, int Y); 29 | 30 | static String^ Path = Path::Combine(Environment::GetFolderPath(Environment::SpecialFolder::ApplicationData), "Waty\\SPControl.xml"); 31 | static List^ Locations = gcnew List; 32 | 33 | private: 34 | static XmlSerializer^ serializer = gcnew XmlSerializer(List::typeid); 35 | }; 36 | } 37 | -------------------------------------------------------------------------------- /WatyBotRevamp/SPControlDialog.cpp: -------------------------------------------------------------------------------- 1 | #include "SPControlDialog.h" 2 | #include "MapleStory.h" 3 | 4 | using namespace WatyBotRevamp; 5 | 6 | Void EditSPControl::bGetCurrentLoc_Click(System::Object^ sender, System::EventArgs^ e) 7 | { 8 | nudMapId->Value = CMS::MapId; 9 | nudXLoc->Value = CMS::CharX; 10 | nudYLoc->Value = CMS::CharY; 11 | } 12 | Void EditSPControl::bSaveChanges_Click(System::Object^ sender, System::EventArgs^ e) 13 | { 14 | this->DialogResult = ::DialogResult::OK; 15 | location->Name = tbMapName->Text; 16 | location->MapId = (int) nudMapId->Value; 17 | location->X = (int) nudXLoc->Value; 18 | location->Y = (int) nudYLoc->Value; 19 | 20 | Close(); 21 | } 22 | Void EditSPControl::bCancel_Click(System::Object^ sender, System::EventArgs^ e) 23 | { 24 | this->DialogResult = ::DialogResult::Cancel; 25 | Close(); 26 | } 27 | -------------------------------------------------------------------------------- /WatyBotRevamp/SPControlDialog.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "SPControl.h" 3 | 4 | namespace WatyBotRevamp { 5 | 6 | using namespace System; 7 | using namespace System::ComponentModel; 8 | using namespace System::Collections; 9 | using namespace System::Windows::Forms; 10 | using namespace System::Data; 11 | using namespace System::Drawing; 12 | 13 | /// 14 | /// Summary for EditSPControl 15 | /// 16 | public ref class EditSPControl : public Form 17 | { 18 | public: 19 | EditSPControl(SPControlLocation^ loc) 20 | { 21 | InitializeComponent(); 22 | 23 | tbMapName->Text = loc->Name; 24 | nudMapId->Value = loc->MapId; 25 | nudXLoc->Value = loc->X; 26 | nudYLoc->Value = loc->Y; 27 | 28 | location = loc; 29 | } 30 | SPControlLocation^ location; 31 | 32 | protected: 33 | /// 34 | /// Clean up any resources being used. 35 | /// 36 | ~EditSPControl() 37 | { 38 | if (components) 39 | { 40 | delete components; 41 | } 42 | } 43 | TextBox^ tbMapName; 44 | NumericUpDown^ nudMapId; 45 | NumericUpDown^ nudXLoc; 46 | NumericUpDown^ nudYLoc; 47 | Button^ bGetCurrentLoc; 48 | Button^ bSaveChanges; 49 | Button^ bCancel; 50 | Windows::Forms::Label^ lName; 51 | Windows::Forms::Label^ lMapId; 52 | Windows::Forms::Label^ lYLoc; 53 | Windows::Forms::Label^ lXLoc; 54 | 55 | Void bGetCurrentLoc_Click(System::Object^ sender, System::EventArgs^ e); 56 | Void bSaveChanges_Click(System::Object^ sender, System::EventArgs^ e); 57 | Void bCancel_Click(System::Object^ sender, System::EventArgs^ e); 58 | 59 | /// 60 | /// Required designer variable. 61 | /// 62 | System::ComponentModel::Container ^components; 63 | 64 | #pragma region Windows Form Designer generated code 65 | /// 66 | /// Required method for Designer support - do not modify 67 | /// the contents of this method with the code editor. 68 | /// 69 | void InitializeComponent(void) 70 | { 71 | this->nudYLoc = (gcnew System::Windows::Forms::NumericUpDown()); 72 | this->nudXLoc = (gcnew System::Windows::Forms::NumericUpDown()); 73 | this->nudMapId = (gcnew System::Windows::Forms::NumericUpDown()); 74 | this->bGetCurrentLoc = (gcnew System::Windows::Forms::Button()); 75 | this->bSaveChanges = (gcnew System::Windows::Forms::Button()); 76 | this->lMapId = (gcnew System::Windows::Forms::Label()); 77 | this->lName = (gcnew System::Windows::Forms::Label()); 78 | this->lYLoc = (gcnew System::Windows::Forms::Label()); 79 | this->lXLoc = (gcnew System::Windows::Forms::Label()); 80 | this->tbMapName = (gcnew System::Windows::Forms::TextBox()); 81 | this->bCancel = (gcnew System::Windows::Forms::Button()); 82 | (cli::safe_cast(this->nudYLoc))->BeginInit(); 83 | (cli::safe_cast(this->nudXLoc))->BeginInit(); 84 | (cli::safe_cast(this->nudMapId))->BeginInit(); 85 | this->SuspendLayout(); 86 | // 87 | // nudYLoc 88 | // 89 | this->nudYLoc->Location = System::Drawing::Point(264, 21); 90 | this->nudYLoc->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 10000, 0, 0, 0 }); 91 | this->nudYLoc->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 10000, 0, 0, System::Int32::MinValue }); 92 | this->nudYLoc->Name = L"nudYLoc"; 93 | this->nudYLoc->Size = System::Drawing::Size(36, 20); 94 | this->nudYLoc->TabIndex = 4; 95 | // 96 | // nudXLoc 97 | // 98 | this->nudXLoc->Location = System::Drawing::Point(225, 21); 99 | this->nudXLoc->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 10000, 0, 0, 0 }); 100 | this->nudXLoc->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 10000, 0, 0, System::Int32::MinValue }); 101 | this->nudXLoc->Name = L"nudXLoc"; 102 | this->nudXLoc->Size = System::Drawing::Size(36, 20); 103 | this->nudXLoc->TabIndex = 3; 104 | // 105 | // nudMapId 106 | // 107 | this->nudMapId->Location = System::Drawing::Point(145, 21); 108 | this->nudMapId->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1410065408, 2, 0, 0 }); 109 | this->nudMapId->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 10000, 0, 0, System::Int32::MinValue }); 110 | this->nudMapId->Name = L"nudMapId"; 111 | this->nudMapId->Size = System::Drawing::Size(77, 20); 112 | this->nudMapId->TabIndex = 2; 113 | // 114 | // bGetCurrentLoc 115 | // 116 | this->bGetCurrentLoc->Location = System::Drawing::Point(164, 47); 117 | this->bGetCurrentLoc->Name = L"bGetCurrentLoc"; 118 | this->bGetCurrentLoc->Size = System::Drawing::Size(137, 23); 119 | this->bGetCurrentLoc->TabIndex = 7; 120 | this->bGetCurrentLoc->Text = L"Get Current"; 121 | this->bGetCurrentLoc->UseVisualStyleBackColor = true; 122 | this->bGetCurrentLoc->Click += gcnew System::EventHandler(this, &EditSPControl::bGetCurrentLoc_Click); 123 | // 124 | // bSaveChanges 125 | // 126 | this->bSaveChanges->Location = System::Drawing::Point(3, 47); 127 | this->bSaveChanges->Name = L"bSaveChanges"; 128 | this->bSaveChanges->Size = System::Drawing::Size(76, 23); 129 | this->bSaveChanges->TabIndex = 5; 130 | this->bSaveChanges->Text = L"Save Changes"; 131 | this->bSaveChanges->UseVisualStyleBackColor = true; 132 | this->bSaveChanges->Click += gcnew System::EventHandler(this, &EditSPControl::bSaveChanges_Click); 133 | // 134 | // lMapId 135 | // 136 | this->lMapId->Location = System::Drawing::Point(144, 4); 137 | this->lMapId->Name = L"lMapId"; 138 | this->lMapId->Size = System::Drawing::Size(60, 14); 139 | this->lMapId->TabIndex = 6; 140 | this->lMapId->Text = L"MapID"; 141 | this->lMapId->TextAlign = System::Drawing::ContentAlignment::MiddleCenter; 142 | // 143 | // lName 144 | // 145 | this->lName->Location = System::Drawing::Point(1, 4); 146 | this->lName->Name = L"lName"; 147 | this->lName->Size = System::Drawing::Size(137, 14); 148 | this->lName->TabIndex = 7; 149 | this->lName->Text = L"Name:"; 150 | this->lName->TextAlign = System::Drawing::ContentAlignment::MiddleCenter; 151 | // 152 | // lYLoc 153 | // 154 | this->lYLoc->Location = System::Drawing::Point(266, 4); 155 | this->lYLoc->Name = L"lYLoc"; 156 | this->lYLoc->Size = System::Drawing::Size(17, 14); 157 | this->lYLoc->TabIndex = 8; 158 | this->lYLoc->Text = L"Y"; 159 | this->lYLoc->TextAlign = System::Drawing::ContentAlignment::MiddleCenter; 160 | // 161 | // lXLoc 162 | // 163 | this->lXLoc->Location = System::Drawing::Point(230, 4); 164 | this->lXLoc->Name = L"lXLoc"; 165 | this->lXLoc->Size = System::Drawing::Size(14, 14); 166 | this->lXLoc->TabIndex = 9; 167 | this->lXLoc->Text = L"X"; 168 | this->lXLoc->TextAlign = System::Drawing::ContentAlignment::MiddleCenter; 169 | // 170 | // tbMapName 171 | // 172 | this->tbMapName->Location = System::Drawing::Point(4, 21); 173 | this->tbMapName->Name = L"tbMapName"; 174 | this->tbMapName->Size = System::Drawing::Size(134, 20); 175 | this->tbMapName->TabIndex = 1; 176 | // 177 | // bCancel 178 | // 179 | this->bCancel->Location = System::Drawing::Point(85, 47); 180 | this->bCancel->Name = L"bCancel"; 181 | this->bCancel->Size = System::Drawing::Size(76, 23); 182 | this->bCancel->TabIndex = 6; 183 | this->bCancel->Text = L"Cancel"; 184 | this->bCancel->UseVisualStyleBackColor = true; 185 | this->bCancel->Click += gcnew System::EventHandler(this, &EditSPControl::bCancel_Click); 186 | // 187 | // EditSPControl 188 | // 189 | this->AcceptButton = this->bSaveChanges; 190 | this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); 191 | this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; 192 | this->ClientSize = System::Drawing::Size(305, 74); 193 | this->Controls->Add(this->bCancel); 194 | this->Controls->Add(this->nudYLoc); 195 | this->Controls->Add(this->nudXLoc); 196 | this->Controls->Add(this->nudMapId); 197 | this->Controls->Add(this->bGetCurrentLoc); 198 | this->Controls->Add(this->bSaveChanges); 199 | this->Controls->Add(this->lMapId); 200 | this->Controls->Add(this->lName); 201 | this->Controls->Add(this->lYLoc); 202 | this->Controls->Add(this->lXLoc); 203 | this->Controls->Add(this->tbMapName); 204 | this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog; 205 | this->MaximizeBox = false; 206 | this->Name = L"EditSPControl"; 207 | this->ShowIcon = false; 208 | this->StartPosition = System::Windows::Forms::FormStartPosition::CenterParent; 209 | this->Text = L"Edit SPControl Location"; 210 | (cli::safe_cast(this->nudYLoc))->EndInit(); 211 | (cli::safe_cast(this->nudXLoc))->EndInit(); 212 | (cli::safe_cast(this->nudMapId))->EndInit(); 213 | this->ResumeLayout(false); 214 | this->PerformLayout(); 215 | 216 | } 217 | #pragma endregion 218 | }; 219 | } 220 | -------------------------------------------------------------------------------- /WatyBotRevamp/SPControlDialog.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 | -------------------------------------------------------------------------------- /WatyBotRevamp/Settings.cpp: -------------------------------------------------------------------------------- 1 | #include "Settings.h" 2 | #include "Log.h" 3 | 4 | using namespace WatyBotRevamp; 5 | using namespace System; 6 | using namespace System::IO; 7 | using namespace System::Collections::Generic; 8 | 9 | Object^ Settings::Deserialize(String^ path, XmlSerializer^ serializer) 10 | { 11 | if (File::Exists(path)) 12 | { 13 | FileStream^ stream; 14 | try 15 | { 16 | stream = gcnew FileStream(path, FileMode::Open, FileAccess::Read, FileShare::Read); 17 | return serializer->Deserialize(stream); 18 | } 19 | catch (Exception^ ex) 20 | { 21 | Log::WriteLine("Exception occured while reading from " + path + " : " + ex->Message); 22 | } 23 | finally 24 | { 25 | if (stream) delete (IDisposable^) stream; 26 | Log::WriteLine("Loaded " + path); 27 | } 28 | } 29 | return nullptr; 30 | } 31 | 32 | Void Settings::Serialize(String^ path, XmlSerializer^ serializer, Object^ object) 33 | { 34 | if (path != nullptr && serializer != nullptr && object != nullptr) 35 | { 36 | FileStream^ stream; 37 | try 38 | { 39 | stream = gcnew FileStream(path, FileMode::Create, FileAccess::Write, FileShare::None); 40 | serializer->Serialize(stream, object); 41 | } 42 | catch (Exception^ ex) 43 | { 44 | Log::WriteLine("Exception occured while writing to " + path + " : " + ex->Message); 45 | } 46 | finally 47 | { 48 | if (stream) delete (IDisposable^) stream; 49 | Log::WriteLine("Saved " + path); 50 | } 51 | } 52 | } 53 | 54 | Void Settings::Serialize(Control^ c, String^ XmlFileName) 55 | { 56 | XmlTextWriter^ xmlSerialisedForm = gcnew XmlTextWriter(XmlFileName, System::Text::Encoding::Default); 57 | xmlSerialisedForm->Formatting = Formatting::Indented; 58 | xmlSerialisedForm->WriteStartDocument(); 59 | xmlSerialisedForm->WriteStartElement("WatyBot"); 60 | // enumerate all controls on the form, and serialise them as appropriate 61 | AddChildControls(xmlSerialisedForm, c); 62 | xmlSerialisedForm->WriteEndElement(); // WatyBot 63 | xmlSerialisedForm->WriteEndDocument(); 64 | xmlSerialisedForm->Flush(); 65 | xmlSerialisedForm->Close(); 66 | Log::WriteLine("Saved " + XmlFileName); 67 | } 68 | 69 | Void Settings::AddChildControls(XmlTextWriter^ xmlSerialisedForm, Control^ c) 70 | { 71 | for each(Control^ childCtrl in c->Controls) 72 | { 73 | auto type = childCtrl->GetType(); 74 | if (childCtrl->HasChildren || type == ComboBox::typeid || type == NumericUpDown::typeid || childCtrl->Name == "LogoSkipper" || childCtrl->Name == "PinPicTyper" || childCtrl->Name == "cbOLWNA") 75 | { 76 | // serialise this control 77 | xmlSerialisedForm->WriteStartElement("Control"); 78 | xmlSerialisedForm->WriteAttributeString("Name", childCtrl->Name); 79 | if (type == ComboBox::typeid) xmlSerialisedForm->WriteAttributeString("SelectedIndex", safe_cast(childCtrl)->SelectedIndex.ToString()); 80 | else if (type == NumericUpDown::typeid) xmlSerialisedForm->WriteAttributeString("Value", safe_cast(childCtrl)->Value.ToString()); 81 | else if (type == CheckBox::typeid) xmlSerialisedForm->WriteAttributeString("Checked", safe_cast(childCtrl)->Checked.ToString()); 82 | 83 | // see if this control has any children, and if so, serialise them 84 | if (childCtrl->HasChildren && type != NumericUpDown::typeid) AddChildControls(xmlSerialisedForm, childCtrl); 85 | xmlSerialisedForm->WriteEndElement(); // Control 86 | } 87 | } 88 | } 89 | 90 | Void Settings::Deserialize(Control^ c, String^ XmlFileName) 91 | { 92 | if (File::Exists(XmlFileName)) 93 | { 94 | try 95 | { 96 | XmlDocument^ xmlSerialisedForm = gcnew XmlDocument(); 97 | xmlSerialisedForm->Load(XmlFileName); 98 | XmlNode^ topLevel = xmlSerialisedForm->ChildNodes[1]; 99 | for each(XmlNode^ n in topLevel->ChildNodes) SetControlProperties(safe_cast(c), n); 100 | } 101 | catch (Exception^ ex) 102 | { 103 | Log::WriteLine("While deserializing \"" + c->Name + "\" the dollowing exception occured: \"" + ex->Message + "\""); 104 | } 105 | } 106 | } 107 | 108 | Void Settings::SetControlProperties(Control^ currentCtrl, XmlNode^ n) 109 | { 110 | try 111 | { 112 | // get the control's name and type 113 | String^ controlName = n->Attributes["Name"]->Value; 114 | // find the control 115 | auto ctrl = currentCtrl->Controls->Find(controlName, true); 116 | // the right type too ;-) 117 | if (n->Attributes["SelectedIndex"]) safe_cast(ctrl[0])->SelectedIndex = Convert::ToInt32(n->Attributes["SelectedIndex"]->Value); 118 | else if (n->Attributes["Value"]) safe_cast(ctrl[0])->Value = Convert::ToDecimal(n->Attributes["Value"]->Value); 119 | else if (n->Attributes["Checked"]) safe_cast(ctrl[0])->Checked = Convert::ToBoolean(n->Attributes["Checked"]->Value); 120 | 121 | // if n has any children that are controls, deserialise them as well 122 | if (n->HasChildNodes && ctrl[0]->HasChildren) 123 | { 124 | XmlNodeList^ xnlControls = n->SelectNodes("Control"); 125 | for each(XmlNode^ n2 in xnlControls) SetControlProperties(ctrl[0], n2); 126 | } 127 | } 128 | catch (Exception^ ex) 129 | { 130 | Log::WriteLine("While deserializing \"" + n->Attributes["Name"]->Value + "\" the dollowing exception occured: \"" + ex->Message + "\""); 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /WatyBotRevamp/Settings.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | using namespace System; 3 | using namespace System::Xml; 4 | using namespace System::Windows::Forms; 5 | using namespace System::Xml::Serialization; 6 | using namespace System::Collections::Generic; 7 | 8 | namespace WatyBotRevamp 9 | { 10 | public ref class Settings 11 | { 12 | public: 13 | static Object^ Deserialize(String^ Path, XmlSerializer^ Deserializer); 14 | static Void Deserialize(Control^ c, String^ Path); 15 | static Void Serialize(String^ Path, XmlSerializer^ Serializer, Object^ Collection); 16 | static Void Serialize(Control^ c, String^ Path); 17 | 18 | private: 19 | static Void AddChildControls(XmlTextWriter^ xmlSerialisedForm, Control^ c); 20 | static Void SetControlProperties(Control^ currentCtrl, XmlNode^ n); 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /WatyBotRevamp/StopWatch.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "noncopyable.h" 4 | #include 5 | 6 | using namespace std::chrono; 7 | 8 | template 9 | class StopWatch 10 | { 11 | public: 12 | StopWatch(T tDelay) 13 | { 14 | m_timePoint = high_resolution_clock::now(); 15 | m_tDelay = tDelay; 16 | } 17 | 18 | StopWatch() 19 | { 20 | m_timePoint = high_resolution_clock::now(); 21 | m_tDelay = T(0); 22 | } 23 | 24 | void SetDelay(T tDelay) 25 | { 26 | m_tDelay = tDelay; 27 | } 28 | void Start() 29 | { 30 | m_timePoint = high_resolution_clock::now(); 31 | } 32 | 33 | bool IsOver() 34 | { 35 | high_resolution_clock::time_point timePoint = high_resolution_clock::now(); 36 | T dur = duration_cast(timePoint - m_timePoint); 37 | return dur.count() >= m_tDelay.count(); 38 | } 39 | 40 | private: 41 | T m_tDelay; 42 | high_resolution_clock::time_point m_timePoint; 43 | }; 44 | -------------------------------------------------------------------------------- /WatyBotRevamp/WatyBotRevamp.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release Tazz 10 | Win32 11 | 12 | 13 | Release 14 | Win32 15 | 16 | 17 | 18 | {E5812690-3792-4563-90DD-CABC4B18A6DB} 19 | Win32Proj 20 | WatyBotRevamp 21 | 22 | 23 | 24 | Application 25 | true 26 | v120 27 | Unicode 28 | true 29 | 30 | 31 | DynamicLibrary 32 | false 33 | v120 34 | true 35 | Unicode 36 | true 37 | 38 | 39 | DynamicLibrary 40 | false 41 | v120 42 | true 43 | Unicode 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | true 60 | E:\boost;$(IncludePath);C:\Boost 61 | 62 | 63 | false 64 | D:\Program Files (x86)\NEXON\Europe MapleStory\ 65 | WatyBot 66 | $(IncludePath) 67 | 68 | 69 | false 70 | D:\Europe MapleStory for Vista\ 71 | WatyBot 72 | C:\boost;$(IncludePath) 73 | 74 | 75 | 76 | NotUsing 77 | Level3 78 | Disabled 79 | WIN32;_DEBUG;_WINDOWS;_USRDLL;WATYBOTREVAMP_EXPORTS;%(PreprocessorDefinitions) 80 | ProgramDatabase 81 | D:\Program Files %28x86%29\Microsoft Research\Detours Express 3.0\include;%(AdditionalIncludeDirectories) 82 | 83 | 84 | Windows 85 | true 86 | E:\Programs\boost_1_52_0\libs;%(AdditionalLibraryDirectories) 87 | %(AdditionalOptions) 88 | 89 | 90 | 91 | 92 | Level3 93 | NotUsing 94 | MaxSpeed 95 | true 96 | true 97 | WIN32;NDEBUG;_WINDOWS;_USRDLL;WATYBOTREVAMP_EXPORTS;%(PreprocessorDefinitions) 98 | D:\Program Files %28x86%29\Microsoft Research\Detours Express 3.0\include;%(AdditionalIncludeDirectories) 99 | MultiThreadedDLL 100 | 101 | 102 | Windows 103 | true 104 | true 105 | true 106 | Detours.lib;%(AdditionalDependencies) 107 | %(AdditionalLibraryDirectories) 108 | RequireAdministrator 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | Level3 120 | NotUsing 121 | MaxSpeed 122 | true 123 | true 124 | WIN32;NDEBUG;_WINDOWS;_USRDLL;WATYBOTREVAMP_EXPORTS;%(PreprocessorDefinitions) 125 | D:\Program Files %28x86%29\Microsoft Research\Detours Express 3.0\include;%(AdditionalIncludeDirectories) 126 | MultiThreadedDLL 127 | 128 | 129 | Windows 130 | true 131 | true 132 | true 133 | %(AdditionalDependencies) 134 | E:\Programs\boost_1_52_0\stage\lib;%(AdditionalLibraryDirectories) 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | true 144 | 145 | 146 | false 147 | Default 148 | ProgramDatabase 149 | Async 150 | true 151 | 152 | 153 | false 154 | Default 155 | ProgramDatabase 156 | Async 157 | 158 | 159 | 160 | 161 | true 162 | 163 | 164 | false 165 | Default 166 | ProgramDatabase 167 | Async 168 | true 169 | true 170 | 171 | 172 | 173 | 174 | false 175 | false 176 | Default 177 | Default 178 | ProgramDatabase 179 | ProgramDatabase 180 | Async 181 | Async 182 | 183 | 184 | 185 | 186 | 187 | false 188 | false 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | CppForm 205 | 206 | 207 | 208 | 209 | CppForm 210 | 211 | 212 | 213 | 214 | 215 | 216 | CppForm 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | SPControlDialog.h 225 | 226 | 227 | MainForm.h 228 | Designer 229 | 230 | 231 | PacketDialog.h 232 | 233 | 234 | 235 | 236 | Designer 237 | 238 | 239 | 240 | 241 | 242 | -------------------------------------------------------------------------------- /WatyBotRevamp/WatyBotRevamp.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Source Files 20 | 21 | 22 | Source Files 23 | 24 | 25 | Source Files 26 | 27 | 28 | Source Files 29 | 30 | 31 | Source Files 32 | 33 | 34 | Source Files 35 | 36 | 37 | Source Files 38 | 39 | 40 | Source Files 41 | 42 | 43 | Source Files 44 | 45 | 46 | Source Files 47 | 48 | 49 | Source Files 50 | 51 | 52 | Source Files 53 | 54 | 55 | Source Files 56 | 57 | 58 | 59 | 60 | Header Files 61 | 62 | 63 | Header Files 64 | 65 | 66 | Resource Files 67 | 68 | 69 | Source Files 70 | 71 | 72 | Source Files 73 | 74 | 75 | Header Files 76 | 77 | 78 | Header Files 79 | 80 | 81 | Header Files 82 | 83 | 84 | Header Files 85 | 86 | 87 | Header Files 88 | 89 | 90 | Header Files 91 | 92 | 93 | Header Files 94 | 95 | 96 | Header Files 97 | 98 | 99 | Header Files 100 | 101 | 102 | Header Files 103 | 104 | 105 | 106 | 107 | Resource Files 108 | 109 | 110 | Resource Files 111 | 112 | 113 | Resource Files 114 | 115 | 116 | 117 | 118 | Resource Files 119 | 120 | 121 | -------------------------------------------------------------------------------- /WatyBotRevamp/detours.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Waty/WatyBot/bd8691a109e180b2915988453c366e2d2ba991e0/WatyBotRevamp/detours.lib -------------------------------------------------------------------------------- /WatyBotRevamp/noncopyable.h: -------------------------------------------------------------------------------- 1 | // Boost noncopyable.hpp header file --------------------------------------// 2 | 3 | // (C) Copyright Beman Dawes 1999-2003. Distributed under the Boost 4 | // Software License, Version 1.0. (See accompanying file 5 | // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 | 7 | // See http://www.boost.org/libs/utility for documentation. 8 | 9 | #ifndef BOOST_NONCOPYABLE_HPP_INCLUDED 10 | #define BOOST_NONCOPYABLE_HPP_INCLUDED 11 | 12 | namespace boost { 13 | 14 | // Private copy constructor and copy assignment ensure classes derived from 15 | // class noncopyable cannot be copied. 16 | 17 | // Contributed by Dave Abrahams 18 | 19 | namespace noncopyable_ // protection from unintended ADL 20 | { 21 | class noncopyable 22 | { 23 | protected: 24 | noncopyable() {} 25 | ~noncopyable() {} 26 | private: // emphasize the following members are private 27 | noncopyable(const noncopyable&); 28 | const noncopyable& operator=(const noncopyable&) ; 29 | }; 30 | } 31 | 32 | typedef noncopyable_::noncopyable noncopyable; 33 | 34 | } // namespace boost 35 | 36 | #endif // BOOST_NONCOPYABLE_HPP_INCLUDED 37 | -------------------------------------------------------------------------------- /WatyBotRevamp/syelog.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Waty/WatyBot/bd8691a109e180b2915988453c366e2d2ba991e0/WatyBotRevamp/syelog.lib -------------------------------------------------------------------------------- /WatyBotUpdater/Address.h: -------------------------------------------------------------------------------- 1 | using namespace System; 2 | using namespace System::Xml::Serialization; 3 | 4 | public ref class Address 5 | { 6 | public: 7 | Address(){} 8 | 9 | enum class AddressType{ Address, Pointer, OffsetBYTE, OffsetWORD }; 10 | 11 | [XmlAttribute] 12 | property String^ Name; 13 | 14 | [XmlIgnore] 15 | property unsigned long Addy; 16 | 17 | [XmlAttribute] 18 | property AddressType Type; 19 | 20 | property String^ AOB; 21 | property String^ Comment; 22 | }; 23 | -------------------------------------------------------------------------------- /WatyBotUpdater/MainDLL.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #pragma unmanaged 3 | extern void InitializeTrainer(HINSTANCE hInstance); 4 | 5 | BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID) 6 | { 7 | if (fdwReason == DLL_PROCESS_ATTACH) 8 | { 9 | if (CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)&InitializeTrainer, NULL, NULL, NULL) == NULL) return FALSE; 10 | } 11 | return TRUE; 12 | } 13 | 14 | BOOL WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) 15 | { 16 | InitializeTrainer(hInstance); 17 | } 18 | -------------------------------------------------------------------------------- /WatyBotUpdater/MyForm.cpp: -------------------------------------------------------------------------------- 1 | #include "MyForm.h" 2 | #include "PatternFind.h" 3 | #include 4 | 5 | using namespace WatyBotUpdater; 6 | using namespace System::Xml::Serialization; 7 | using namespace System::IO; 8 | using namespace msclr::interop; 9 | using namespace std; 10 | 11 | #define ShowInfo(Message) MessageBox::Show(Message, "Information", MessageBoxButtons::OK, MessageBoxIcon::Information) 12 | #define ShowError(Message) MessageBox::Show(Message, "Error", MessageBoxButtons::OK, MessageBoxIcon::Error) 13 | 14 | void *lpvMapleBase = NULL; 15 | DWORD dwMapleSize = 0; 16 | 17 | void CreateGUI(void) 18 | { 19 | Application::EnableVisualStyles(); 20 | Application::SetCompatibleTextRenderingDefault(false); 21 | Application::Run(gcnew MyForm()); 22 | Application::Exit(); 23 | } 24 | void InitializeTrainer(HINSTANCE hInstance) 25 | { 26 | DisableThreadLibraryCalls(hInstance); 27 | GetModuleSize(GetModuleHandle(NULL), &lpvMapleBase, &dwMapleSize); // Obtain Maple base address & size 28 | 29 | //Set the maple base for the scanner 30 | lpvMapleBase = reinterpret_cast(0x00400000); 31 | 32 | if (!Directory::Exists(MyForm::AppDataDir)) Directory::CreateDirectory(MyForm::AppDataDir); 33 | 34 | Threading::Thread^ tMain = gcnew Threading::Thread(gcnew Threading::ThreadStart(CreateGUI)); 35 | tMain->SetApartmentState(Threading::ApartmentState::STA); 36 | tMain->Start(); 37 | } 38 | 39 | Void MyForm::update_Click(System::Object^ sender, System::EventArgs^ e) 40 | { 41 | static PFSEARCH pf; 42 | this->ReadXmlData(); 43 | 44 | StreamWriter^ sw = File::CreateText(OutputPath); 45 | 46 | int SuccesCount = 0; 47 | int index = 0; 48 | 49 | for each(Address^ address in addressList) 50 | { 51 | char* aob = (char*)marshal_as(address->AOB).c_str(); 52 | FindPattern(aob, &pf, lpvMapleBase, dwMapleSize); 53 | 54 | String^ Name = address->Name; 55 | String^ Addy = "ERROR"; 56 | if (pf.dwResult) // If the search got a result 57 | { 58 | if (address->Type == Address::AddressType::Address) Addy = pf.dwResult.ToString("X"); 59 | if (address->Type == Address::AddressType::Pointer) Addy = (*(DWORD*)((DWORD)pf.dwResult + 2)).ToString("X"); 60 | if (address->Type == Address::AddressType::OffsetBYTE) Addy = (*(BYTE*)((DWORD)pf.dwResult + 2)).ToString("X"); 61 | if (address->Type == Address::AddressType::OffsetWORD) Addy = (*(WORD*)((DWORD)pf.dwResult + 2)).ToString("X"); 62 | SuccesCount++; 63 | } 64 | 65 | String^ Comment = String::Empty; 66 | if (address->Comment) Comment = " //" + address->Comment; 67 | 68 | //Add the result to the ListView 69 | auto lvItem = lvAddys->Items[index]; 70 | lvItem->SubItems[1]->Text = "0x" + Addy; 71 | lvItem->ToolTipText = Comment; 72 | if (!pf.dwResult) 73 | { 74 | lvItem->UseItemStyleForSubItems = false; 75 | lvItem->SubItems[1]->BackColor = address->Comment ? Color::Orange : Color::Red; 76 | } 77 | //lvAddys->Items[index] = lvItem; 78 | index++; 79 | 80 | //Write the found addy to the header file 81 | sw->WriteLine("#define " + Name + " 0x" + Addy + Comment); 82 | } 83 | if (sw) delete (IDisposable^)(sw); 84 | //lvAddys->EndUpdate(); 85 | ShowInfo(SuccesCount + " of the " + addressList->Count + " where succesfull"); 86 | } 87 | 88 | Void MyForm::MyForm_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) 89 | { 90 | switch (MessageBox::Show("Do you want to close MS too?", "Close MapleStory?", MessageBoxButtons::YesNoCancel, MessageBoxIcon::Question)) 91 | { 92 | case ::DialogResult::Yes: 93 | TerminateProcess(GetCurrentProcess(), 0); 94 | ExitProcess(0); 95 | break; 96 | 97 | case ::DialogResult::Cancel: 98 | e->Cancel = true; 99 | break; 100 | } 101 | } 102 | 103 | Void MyForm::ReadXmlData() 104 | { 105 | if (this->serializer == nullptr) this->serializer = gcnew XmlSerializer(List::typeid); 106 | if (File::Exists(InputPath)) 107 | { 108 | FileStream^ stream; 109 | try 110 | { 111 | stream = gcnew FileStream(InputPath, FileMode::Open, FileAccess::Read, FileShare::Read); 112 | addressList = safe_cast^>(serializer->Deserialize(stream)); 113 | 114 | lvAddys->Items->Clear(); 115 | for each(Address^ address in addressList) 116 | { 117 | auto item = gcnew ListViewItem(address->Name); 118 | item->SubItems->Add("N/A"); 119 | item->SubItems->Add(address->Type.ToString()); 120 | item->SubItems->Add(address->AOB); 121 | item->SubItems->Add(address->Comment); 122 | lvAddys->Items->Add(item); 123 | } 124 | } 125 | catch (Exception^ ex) 126 | { 127 | Console::WriteLine(ex->Message); 128 | } 129 | finally 130 | { 131 | if (stream) delete (IDisposable^)stream; 132 | } 133 | } 134 | else 135 | { 136 | addressList = gcnew List(); 137 | } 138 | } 139 | 140 | Void MyForm::WriteXmlData() 141 | { 142 | if (InputPath != nullptr && serializer != nullptr && addressList != nullptr) 143 | { 144 | FileStream^ stream; 145 | try 146 | { 147 | stream = gcnew FileStream(InputPath, FileMode::Create, FileAccess::Write, FileShare::None); 148 | serializer->Serialize(stream, addressList); 149 | } 150 | catch (Exception^ ex) 151 | { 152 | Console::WriteLine(ex->Message); 153 | } 154 | finally 155 | { 156 | if (stream) delete (IDisposable^)stream; 157 | } 158 | } 159 | } 160 | 161 | Void MyForm::AOBFileWatcher_Changed(Object^ sender, FileSystemEventArgs^ e) 162 | { 163 | ReadXmlData(); 164 | } 165 | 166 | Void MyForm::loadDifferentFile_Click(Object^ sender, EventArgs^ e) 167 | { 168 | if (MessageBox::Show("The current file will be overwritten!!!\n Are you sure you want to continue?", "Warning", MessageBoxButtons::YesNo, MessageBoxIcon::Warning) == ::DialogResult::No) return; 169 | 170 | if (InputFileDialog->ShowDialog() == ::DialogResult::OK) 171 | { 172 | File::Delete(InputPath); 173 | File::Copy(InputFileDialog->FileName, InputPath); 174 | } 175 | } 176 | 177 | Void MyForm::MyForm_SizeChanged(Object^ sender, EventArgs^ e) 178 | { 179 | lvAddys->Width = this->Width - 40; 180 | lvAddys->Height = this->Height - 131; 181 | gbNewAOB->Width = this->Width - 40; 182 | gbNewAOB->Location = Point(12, Height - 98); 183 | } 184 | 185 | Void MyForm::saveAOBItem_Click(Object^ sender, EventArgs^ e) 186 | { 187 | WriteXmlData(); 188 | } 189 | 190 | Void MyForm::bAdd_Click(Object^ sender, EventArgs^ e) 191 | { 192 | auto address = gcnew Address(); 193 | address->Name = tbName->Text; 194 | address->Type = Address::AddressType(ddbType->SelectedIndex); 195 | address->AOB = tbAOB->Text; 196 | address->Comment = tbComment->Text; 197 | addressList->Add(address); 198 | 199 | tbName->Clear(); 200 | ddbType->SelectedIndex = -1; 201 | tbAOB->Clear(); 202 | tbComment->Clear(); 203 | WriteXmlData(); 204 | } 205 | 206 | Void MyForm::copySearchResultToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) 207 | { 208 | auto selectedItem = lvAddys->SelectedItems[0]; 209 | auto text = selectedItem->SubItems[1]->Text; 210 | if (text != nullptr) Clipboard::SetText(text); 211 | } 212 | 213 | Void MyForm::copyAOBToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) 214 | { 215 | auto selectedItem = lvAddys->SelectedItems[0]; 216 | auto text = selectedItem->SubItems[3]->Text; 217 | if (text != nullptr) Clipboard::SetText(text); 218 | } 219 | 220 | Void MyForm::copyCommentToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) 221 | { 222 | auto selectedItem = lvAddys->SelectedItems[0]; 223 | auto text = selectedItem->SubItems[4]->Text; 224 | if (text != nullptr && !String::Empty) Clipboard::SetText(text); 225 | } 226 | 227 | Void MyForm::deleteEntryToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) 228 | { 229 | auto selectedItem = lvAddys->SelectedItems[0]; 230 | if (MessageBox::Show("Are you sure you want to delete \"" + selectedItem->Text + "\" ?", "Confirm", MessageBoxButtons::YesNo, MessageBoxIcon::Question) == ::DialogResult::No) return; 231 | addressList->RemoveAt(lvAddys->SelectedIndices[0]); 232 | WriteXmlData(); 233 | } 234 | 235 | Void MyForm::openAppdataToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) 236 | { 237 | System::Diagnostics::Process::Start("explorer.exe", "/select," + InputPath); 238 | } 239 | -------------------------------------------------------------------------------- /WatyBotUpdater/MyForm.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Waty/WatyBot/bd8691a109e180b2915988453c366e2d2ba991e0/WatyBotUpdater/MyForm.h -------------------------------------------------------------------------------- /WatyBotUpdater/MyForm.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 | 406, 17 122 | 123 | 124 | 17, 17 125 | 126 | 127 | 151, 17 128 | 129 | 130 | 291, 17 131 | 132 | -------------------------------------------------------------------------------- /WatyBotUpdater/PatternFind.cpp: -------------------------------------------------------------------------------- 1 | #include "PatternFind.h" 2 | 3 | #include 4 | #include 5 | #pragma comment(lib, "dbghelp") 6 | #pragma comment(lib, "psapi") 7 | 8 | BOOL GetModuleSize(HMODULE hModule, LPVOID* lplpBase, LPDWORD lpdwSize) 9 | { 10 | if (hModule == GetModuleHandle(NULL)) 11 | { 12 | PIMAGE_NT_HEADERS pImageNtHeaders = ImageNtHeader((PVOID) hModule); 13 | 14 | if (pImageNtHeaders == NULL) 15 | return FALSE; 16 | 17 | *lplpBase = (LPVOID) hModule; 18 | *lpdwSize = pImageNtHeaders->OptionalHeader.SizeOfImage; 19 | } 20 | else 21 | { 22 | MODULEINFO ModuleInfo; 23 | 24 | if (!GetModuleInformation(GetCurrentProcess(), hModule, &ModuleInfo, sizeof(MODULEINFO))) 25 | return FALSE; 26 | 27 | *lplpBase = ModuleInfo.lpBaseOfDll; 28 | *lpdwSize = ModuleInfo.SizeOfImage; 29 | } 30 | return TRUE; 31 | } 32 | 33 | DWORD PFAPI GetPatternCB(char *szPattern) 34 | { 35 | DWORD cb = 0; 36 | bool first_nibble = false; 37 | for (DWORD i = 0; i < strlen(szPattern); i++) 38 | { 39 | char c = toupper(szPattern[i]); 40 | if (c != ' ') 41 | { 42 | if (c == '?') 43 | { 44 | if (!first_nibble) cb++; 45 | else return 0; 46 | } 47 | else 48 | { 49 | if (!isxdigit(c)) return 0; 50 | if (first_nibble) cb++; 51 | first_nibble ^= true; 52 | } 53 | } 54 | } 55 | if (first_nibble) return 0; 56 | return cb; 57 | } 58 | 59 | BOOL PFAPI GeneratePatternMask(char *szPattern, char *buffer) 60 | { 61 | bool first_nibble = false; 62 | for (DWORD i = 0; i < strlen(szPattern); i++) 63 | { 64 | char c = toupper(szPattern[i]); 65 | if (c != ' ') 66 | { 67 | if (c == '?') 68 | { 69 | if (!first_nibble) strcat_s(buffer, MAX_PATTERN, "?"); 70 | else return FALSE; 71 | } 72 | else 73 | { 74 | if (!isxdigit(c)) return FALSE; 75 | if (first_nibble) strcat_s(buffer, MAX_PATTERN, "x"); 76 | first_nibble ^= true; 77 | } 78 | } 79 | } 80 | if (first_nibble) return FALSE; 81 | return TRUE; 82 | } 83 | 84 | BOOL PFAPI GeneratePatternBytes(char *szPattern, LPBYTE buffer) 85 | { 86 | bool first_nibble = false; 87 | DWORD cb = 0; 88 | for (DWORD i = 0; i < strlen(szPattern); i++) 89 | { 90 | char c = toupper(szPattern[i]); 91 | if (c != ' ') 92 | { 93 | if (c == '?') 94 | { 95 | if (!first_nibble) 96 | { 97 | buffer[cb] = 0x00; 98 | cb++; 99 | } 100 | else return FALSE; 101 | } 102 | else 103 | { 104 | if (!isxdigit(c)) return FALSE; 105 | if (first_nibble) 106 | { 107 | char byte[3] = { 0 }; 108 | byte[0] = szPattern[i - 1]; 109 | byte[1] = c; 110 | byte[2] = '\0'; 111 | buffer[cb] = (BYTE) strtol(byte, NULL, 16); 112 | cb++; 113 | } 114 | first_nibble ^= true; 115 | } 116 | } 117 | } 118 | if (first_nibble) return FALSE; 119 | return TRUE; 120 | } 121 | 122 | VOID PFAPI SearchPattern(PFSEARCH *ppf, LPVOID lpvBase, DWORD dwSize) 123 | { 124 | ppf->dwResult = 0; 125 | DWORD dwBase = (DWORD) lpvBase; 126 | for (DWORD i = dwBase; i < dwBase + dwSize; i++) 127 | { 128 | bool found = true; 129 | for (DWORD j = 0; j < ppf->dwLength; j++) 130 | { 131 | if (ppf->szMask[j] == 'x') 132 | { 133 | if (*reinterpret_cast(i + j) != ppf->lpbData[j]) 134 | { 135 | found = false; 136 | break; 137 | } 138 | } 139 | } 140 | if (found) 141 | { 142 | ppf->dwResult = i; 143 | return; 144 | } 145 | } 146 | } 147 | 148 | DWORD PFAPI FindPattern(char *szPattern, PFSEARCH *ppf, LPVOID lpvBase, DWORD dwSize) 149 | { 150 | ZeroMemory(ppf, sizeof(PFSEARCH)); 151 | bool invalid = false; 152 | 153 | ppf->dwLength = GetPatternCB(szPattern); 154 | invalid = invalid || !ppf->dwLength; 155 | invalid = invalid || !GeneratePatternMask(szPattern, ppf->szMask); 156 | invalid = invalid || !GeneratePatternBytes(szPattern, ppf->lpbData); 157 | 158 | if (invalid) 159 | return PF_INVALID; 160 | 161 | if (ppf->dwLength > MAX_PATTERN) 162 | return PF_OVERFLOW; 163 | 164 | SearchPattern(ppf, lpvBase, dwSize); 165 | if (!ppf->dwResult) 166 | return PF_NOT_FOUND; 167 | 168 | return PF_NONE; 169 | } -------------------------------------------------------------------------------- /WatyBotUpdater/PatternFind.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #define PFAPI __stdcall 6 | #define MAX_PATTERN 255 7 | 8 | #define PF_NONE 0 9 | #define PF_INVALID 1 10 | #define PF_NOT_FOUND 2 11 | #define PF_OVERFLOW 3 12 | 13 | struct PFSEARCH { 14 | DWORD dwLength; 15 | char szMask[MAX_PATTERN + 1]; 16 | BYTE lpbData[MAX_PATTERN]; 17 | DWORD dwResult; 18 | }; 19 | 20 | BOOL GetModuleSize(HMODULE hModule, LPVOID* lplpBase, LPDWORD lpdwSize); 21 | DWORD PFAPI FindPattern(char *szPattern, PFSEARCH *ppf, LPVOID lpvBase, DWORD dwSize); -------------------------------------------------------------------------------- /WatyBotUpdater/WatyBotUpdater.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release Tazz 10 | Win32 11 | 12 | 13 | Release 14 | Win32 15 | 16 | 17 | 18 | {79C2A55C-464A-477D-914C-C70073F49335} 19 | Win32Proj 20 | WatyBotUpdater 21 | 22 | 23 | 24 | Application 25 | true 26 | v120 27 | Unicode 28 | 29 | 30 | DynamicLibrary 31 | false 32 | false 33 | Unicode 34 | v120 35 | true 36 | 37 | 38 | DynamicLibrary 39 | false 40 | true 41 | Unicode 42 | v120 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | true 59 | 60 | 61 | false 62 | D:\Program Files (x86)\NEXON\Europe MapleStory\ 63 | 64 | 65 | false 66 | D:\Europe MapleStory for Vista\ 67 | 68 | 69 | 70 | 71 | 72 | Level3 73 | Disabled 74 | WIN32;_DEBUG;_WINDOWS;_USRDLL;WATYBOTUPDATER_EXPORTS;%(PreprocessorDefinitions) 75 | ProgramDatabase 76 | 77 | 78 | Windows 79 | true 80 | 81 | 82 | 83 | 84 | Level3 85 | 86 | 87 | MaxSpeed 88 | true 89 | true 90 | WIN32;NDEBUG;_WINDOWS;_USRDLL;WATYBOTUPDATER_EXPORTS;%(PreprocessorDefinitions) 91 | E:\boost 92 | 93 | 94 | Windows 95 | true 96 | true 97 | true 98 | RequireAdministrator 99 | 100 | 101 | 102 | 103 | Level3 104 | 105 | 106 | MaxSpeed 107 | true 108 | true 109 | WIN32;NDEBUG;_WINDOWS;_USRDLL;WATYBOTUPDATER_EXPORTS;%(PreprocessorDefinitions) 110 | E:\boost 111 | 112 | 113 | Windows 114 | true 115 | true 116 | true 117 | 118 | 119 | 120 | 121 | 122 | true 123 | 124 | 125 | false 126 | Default 127 | ProgramDatabase 128 | Async 129 | true 130 | true 131 | 132 | 133 | 134 | 135 | false 136 | false 137 | Default 138 | Default 139 | ProgramDatabase 140 | ProgramDatabase 141 | Async 142 | Async 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | CppForm 157 | 158 | 159 | 160 | 161 | 162 | MyForm.h 163 | 164 | 165 | 166 | 167 | 168 | -------------------------------------------------------------------------------- /WatyBotUpdater/WatyBotUpdater.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Source Files 20 | 21 | 22 | Source Files 23 | 24 | 25 | Source Files 26 | 27 | 28 | 29 | 30 | Header Files 31 | 32 | 33 | Header Files 34 | 35 | 36 | Header Files 37 | 38 | 39 | 40 | 41 | Resource Files 42 | 43 | 44 | --------------------------------------------------------------------------------