├── .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 |
--------------------------------------------------------------------------------