Solved Help re: DLL hack - local function definitions are illegal

Hexui Undetected CSGO Cheats Sinkicheat PUBG Cheat

zepixxx

Newbie
Full Member
Apr 14, 2014
8
122
0
Hello All, obviously this is a noob request. Need help resolving this. Getting this error upon compiling:
dllInterface.h(333): error C2601: 'StringToCharArr' : local function definitions are illegal
dllInterface.h(345): error C2601: 'WriteToMemory' : local function definitions are illegal


C++:
#pragma once
#include <Windows.h>
#include <ctime>
#include <string>






namespace Cheat2 
	{

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	//function prototypes seem not to be necessary
	void WriteToMemory(DWORD adressToWrite, LPVOID valueToWrite, int byteNum);
	char *StringToCharArr(std::string strToConvert);
	std::string Nops[] =
	{
	"\x90",
	"\x90\x90",
	"\x90\x90\x90",
	"\x90\x90\x90\x90"
	};


	//--------AMMO-------
	bool AmmoStatus;
	//char AmmoValue[] = "\x39\x5";
	char AmmoOpCode[] = "\xFF\x90";
	char AmmoDefaultOpCode[] = "\xFF\x0E";
	DWORD AmmoAddress = 0x4637E9;

	//--------NO RECOIL----------
	bool RecoilStatus;

	std::string RecoilDefaultOpCodes[] = 
	{
	"\x8B\x16", 
	"\x8B\x52\x14", 
	"\x50",
	"\x8D\x4C\x24\x1C",
	"\x51",
	"\x8B\xCE",
	"\xFF\xD2"
	};

	DWORD RecoilAddress[] = {0x463781, 0x463783, 0x463786, 0x463787, 0x46378B, 0x46378C, 0x46378E};

	int noOfBytes[] = {2, 3, 1, 4, 1, 2, 2};

	//---------RAPID FIRE------

	bool RapidStatus;
	char RapidOpCode[] = "\x90\x90";
	char RapidDefaultOpCode[] = "\x89\x0A";
	DWORD RapidAddress = 0x4637E4;

	int OnePressTMR = clock(); // used to limit key input to only one per x ms


	/// <summary>
	/// Summary for dllInterface
	/// </summary>
	public ref class dllInterface : public System::Windows::Forms::Form
	{
	public:
		dllInterface(void)
		{
			InitializeComponent();
			//
			//TODO: Add the constructor code here
			//
		}

	protected:
		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		~dllInterface()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::Label^  TitleLBL;
	protected: 
	private: System::Windows::Forms::Label^  StatusLBL;
	private: System::Windows::Forms::Label^  AmmoLBL;
	private: System::Windows::Forms::Label^  RecoilLBL;
	private: System::Windows::Forms::Label^  RapidLBL;
	private: System::Windows::Forms::Label^  AmmoStatusLBL;
	private: System::Windows::Forms::Label^  RecoilStatusLBL;
	private: System::Windows::Forms::Label^  RapidStatusLBL;



	private: System::Windows::Forms::Timer^  timer1;
	private: System::ComponentModel::IContainer^  components;

	private:
		/// <summary>
		/// Required designer variable.
		/// </summary>


#pragma region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		void InitializeComponent(void)
		{
			this->components = (gcnew System::ComponentModel::Container());
			this->TitleLBL = (gcnew System::Windows::Forms::Label());
			this->StatusLBL = (gcnew System::Windows::Forms::Label());
			this->AmmoLBL = (gcnew System::Windows::Forms::Label());
			this->RecoilLBL = (gcnew System::Windows::Forms::Label());
			this->RapidLBL = (gcnew System::Windows::Forms::Label());
			this->AmmoStatusLBL = (gcnew System::Windows::Forms::Label());
			this->RecoilStatusLBL = (gcnew System::Windows::Forms::Label());
			this->RapidStatusLBL = (gcnew System::Windows::Forms::Label());
			this->timer1 = (gcnew System::Windows::Forms::Timer(this->components));
			this->SuspendLayout();
			// 
			// TitleLBL
			// 
			this->TitleLBL->AutoSize = true;
			this->TitleLBL->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 18, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
				static_cast<System::Byte>(0)));
			this->TitleLBL->ForeColor = System::Drawing::Color::White;
			this->TitleLBL->Location = System::Drawing::Point(90, 9);
			this->TitleLBL->Name = L"TitleLBL";
			this->TitleLBL->Size = System::Drawing::Size(197, 29);
			this->TitleLBL->TabIndex = 0;
			this->TitleLBL->Text = L"AssaultCube DLL";
			// 
			// StatusLBL
			// 
			this->StatusLBL->AutoSize = true;
			this->StatusLBL->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 18, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
				static_cast<System::Byte>(0)));
			this->StatusLBL->ForeColor = System::Drawing::Color::White;
			this->StatusLBL->Location = System::Drawing::Point(72, 38);
			this->StatusLBL->Name = L"StatusLBL";
			this->StatusLBL->Size = System::Drawing::Size(225, 29);
			this->StatusLBL->TabIndex = 1;
			this->StatusLBL->Text = L"Injected Sucessfully";
			// 
			// AmmoLBL
			// 
			this->AmmoLBL->AutoSize = true;
			this->AmmoLBL->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 18, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
				static_cast<System::Byte>(0)));
			this->AmmoLBL->ForeColor = System::Drawing::Color::White;
			this->AmmoLBL->Location = System::Drawing::Point(12, 119);
			this->AmmoLBL->Name = L"AmmoLBL";
			this->AmmoLBL->Size = System::Drawing::Size(136, 29);
			this->AmmoLBL->TabIndex = 2;
			this->AmmoLBL->Text = L"[F1] Ammo:";
			// 
			// RecoilLBL
			// 
			this->RecoilLBL->AutoSize = true;
			this->RecoilLBL->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 18, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
				static_cast<System::Byte>(0)));
			this->RecoilLBL->ForeColor = System::Drawing::Color::White;
			this->RecoilLBL->Location = System::Drawing::Point(12, 159);
			this->RecoilLBL->Name = L"RecoilLBL";
			this->RecoilLBL->Size = System::Drawing::Size(168, 29);
			this->RecoilLBL->TabIndex = 3;
			this->RecoilLBL->Text = L"[F2] NoRecoil:";
			// 
			// RapidLBL
			// 
			this->RapidLBL->AutoSize = true;
			this->RapidLBL->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 18, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
				static_cast<System::Byte>(0)));
			this->RapidLBL->ForeColor = System::Drawing::Color::White;
			this->RapidLBL->Location = System::Drawing::Point(12, 200);
			this->RapidLBL->Name = L"RapidLBL";
			this->RapidLBL->Size = System::Drawing::Size(174, 29);
			this->RapidLBL->TabIndex = 4;
			this->RapidLBL->Text = L"[F3] RapidFire:";
			// 
			// AmmoStatusLBL
			// 
			this->AmmoStatusLBL->AutoSize = true;
			this->AmmoStatusLBL->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 18, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
				static_cast<System::Byte>(0)));
			this->AmmoStatusLBL->ForeColor = System::Drawing::Color::Red;
			this->AmmoStatusLBL->Location = System::Drawing::Point(177, 119);
			this->AmmoStatusLBL->Name = L"AmmoStatusLBL";
			this->AmmoStatusLBL->Size = System::Drawing::Size(62, 29);
			this->AmmoStatusLBL->TabIndex = 5;
			this->AmmoStatusLBL->Text = L"OFF";
			// 
			// RecoilStatusLBL
			// 
			this->RecoilStatusLBL->AutoSize = true;
			this->RecoilStatusLBL->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 18, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
				static_cast<System::Byte>(0)));
			this->RecoilStatusLBL->ForeColor = System::Drawing::Color::Red;
			this->RecoilStatusLBL->Location = System::Drawing::Point(186, 159);
			this->RecoilStatusLBL->Name = L"RecoilStatusLBL";
			this->RecoilStatusLBL->Size = System::Drawing::Size(62, 29);
			this->RecoilStatusLBL->TabIndex = 6;
			this->RecoilStatusLBL->Text = L"OFF";
			// 
			// RapidStatusLBL
			// 
			this->RapidStatusLBL->AutoSize = true;
			this->RapidStatusLBL->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 18, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
				static_cast<System::Byte>(0)));
			this->RapidStatusLBL->ForeColor = System::Drawing::Color::Red;
			this->RapidStatusLBL->Location = System::Drawing::Point(192, 200);
			this->RapidStatusLBL->Name = L"RapidStatusLBL";
			this->RapidStatusLBL->Size = System::Drawing::Size(62, 29);
			this->RapidStatusLBL->TabIndex = 7;
			this->RapidStatusLBL->Text = L"OFF";
			// 
			// timer1
			// 
			this->timer1->Tick += gcnew System::EventHandler(this, &dllInterface::timer1_Tick);
			// 
			// dllInterface
			// 
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->BackColor = System::Drawing::Color::Black;
			this->ClientSize = System::Drawing::Size(384, 362);
			this->Controls->Add(this->RapidStatusLBL);
			this->Controls->Add(this->RecoilStatusLBL);
			this->Controls->Add(this->AmmoStatusLBL);
			this->Controls->Add(this->RapidLBL);
			this->Controls->Add(this->RecoilLBL);
			this->Controls->Add(this->AmmoLBL);
			this->Controls->Add(this->StatusLBL);
			this->Controls->Add(this->TitleLBL);
			this->Name = L"dllInterface";
			this->Text = L"dllInterface";
			this->Load += gcnew System::EventHandler(this, &dllInterface::dllInterface_Load);
			this->ResumeLayout(false);
			this->PerformLayout();

		}
#pragma endregion
	private: System::Void dllInterface_Load(System::Object^  sender, System::EventArgs^  e) {
			 }
	private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) 
			 {
				if(clock() - OnePressTMR > 400)
				{
					if(GetAsyncKeyState(VK_F1))
					{
						OnePressTMR = clock();
						AmmoStatus = !AmmoStatus;
						if(AmmoStatus)
						{
							AmmoStatusLBL->Text = "ON";
							//Write to our ammo address
							WriteToMemory(AmmoAddress, AmmoOpCode, 2);
						}
						else
						{
							AmmoStatusLBL->Text = "OFF";
							WriteToMemory(AmmoAddress, AmmoDefaultOpCode, 2);
						}

					}
					if(GetAsyncKeyState(VK_F2))
					{
						OnePressTMR = clock();
						RapidStatus = !RapidStatus;
						if(RapidStatus)
						{
							RapidStatusLBL->Text = "ON";
							//Write to our rapid address
							WriteToMemory(RapidAddress, RapidOpCode, 2);
						}
						else
						{
							RapidStatusLBL->Text = "OFF";
							WriteToMemory(RapidAddress, RapidDefaultOpCode, 2);
						}

					}
					if(GetAsyncKeyState(VK_F3))
					{
					OnePressTMR = clock();
					RecoilStatus = !RecoilStatus;
					//changes the text to update on next display
					if(RecoilStatus)
					{
						RecoilStatusLBL->Text = "ON";
						//writes all memory addresses with NOP until it reaches the last one
						//removing the recoil and kickback 
						//6 only because of the way memory is written, e.g. when it reaches 6 it writtes to 7
						for(int i = 0; i < 7; i++)
						{	
							//Nops[noOfBytes[i-1]] because Nops has only 4 elements and e.g. element 0 = 0X90 AND that = 1 bytes therefore we dec by 1 so that element 0 is shown 
							//e.g 2 if 4 bytes were required element 3(0X90/0X90/0X90/0X90) would be called
							WriteToMemory(RecoilAddress[i], StringToCharArr(Nops[noOfBytes[i]-1]), noOfBytes[i]);
						}
					}
					else 
					{
						//TURN THE recoil and kickback off
						RecoilStatusLBL->Text = "OFF";
						//Reset every single memory address recoilling related
						for(int i = 0; i < 7; i++)
						{	
							WriteToMemory(RecoilAddress[i], StringToCharArr(RecoilDefaultOpCodes[i]), noOfBytes[i]);
						}
					}
				}






				}
				//convert a string to char array
				char *StringToCharArr(std::string strToConvert)
				{
				//make a character array the size of the string to make sure we dont overflow
				//build the array c# stylee because we need to define the length based on the string size
				char *charRet = new char[strToConvert.length()+1];
				//copy that string into the char array
				std::strcpy(charRet, strToConvert.c_str());
				return charRet;	  
				}


				//Used to write the contents
				void WriteToMemory(DWORD addressToWrite, char* valueToWrite, int byteNum)
				{
					//used to change our file access type, stores the old
					//access type and restores it after memory is written
					unsigned long OldProtection;
					//give that address read and write permissions and store the old permissions at oldProtection
					VirtualProtect((LPVOID)(addressToWrite), byteNum, PAGE_EXECUTE_READWRITE, &OldProtection);
			 
					//write the memory into the program and overwrite previous value
					memcpy( (LPVOID)addressToWrite, valueToWrite, byteNum);

					//reset the permissions of the address back to oldProtection after writting memory
					VirtualProtect((LPVOID)(addressToWrite), byteNum, OldProtection, NULL);
				}






			   }
			 
};
}
 

Crazywink

Hacker
Meme Tier VIP
Dank Tier Donator
Jul 18, 2012
626
4,613
17
You cannot define functions inside other functions.

Take the StringToArray and WriteToMemory functions out of timer.

C++:
    private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e)
    {
                 if (clock() - OnePressTMR > 400)
                 {
                     if (GetAsyncKeyState(VK_F1))
                     {
                         OnePressTMR = clock();
                         AmmoStatus = !AmmoStatus;
                         if (AmmoStatus)
                         {
                             AmmoStatusLBL->Text = "ON";
                             //Write to our ammo address
                             WriteToMemory(AmmoAddress, AmmoOpCode, 2);
                         }
                         else
                         {
                             AmmoStatusLBL->Text = "OFF";
                             WriteToMemory(AmmoAddress, AmmoDefaultOpCode, 2);
                         }


                     }
                     if (GetAsyncKeyState(VK_F2))
                     {
                         OnePressTMR = clock();
                         RapidStatus = !RapidStatus;
                         if (RapidStatus)
                         {
                             RapidStatusLBL->Text = "ON";
                             //Write to our rapid address
                             WriteToMemory(RapidAddress, RapidOpCode, 2);
                         }
                         else
                         {
                             RapidStatusLBL->Text = "OFF";
                             WriteToMemory(RapidAddress, RapidDefaultOpCode, 2);
                         }


                     }
                     if (GetAsyncKeyState(VK_F3))
                     {
                         OnePressTMR = clock();
                         RecoilStatus = !RecoilStatus;
                         //changes the text to update on next display
                         if (RecoilStatus)
                         {
                             RecoilStatusLBL->Text = "ON";
                             //writes all memory addresses with NOP until it reaches the last one
                             //removing the recoil and kickback
                             //6 only because of the way memory is written, e.g. when it reaches 6 it writtes to 7
                             for (int i = 0; i < 7; i++)
                             {
                                 //Nops[noOfBytes[i-1]] because Nops has only 4 elements and e.g. element 0 = 0X90 AND that = 1 bytes therefore we dec by 1 so that element 0 is shown
                                 //e.g 2 if 4 bytes were required element 3(0X90/0X90/0X90/0X90) would be called
                                 WriteToMemory(RecoilAddress[i], StringToCharArr(Nops[noOfBytes[i] - 1]), noOfBytes[i]);
                             }
                         }
                         else
                         {
                             //TURN THE recoil and kickback off
                             RecoilStatusLBL->Text = "OFF";
                             //Reset every single memory address recoilling related
                             for (int i = 0; i < 7; i++)
                             {
                                 WriteToMemory(RecoilAddress[i], StringToCharArr(RecoilDefaultOpCodes[i]), noOfBytes[i]);
                             }
                         }
                     }


                 }
                            
//convert a string to char array
                 char *StringToCharArr(std::string strToConvert)
                 {
                     //make a character array the size of the string to make sure we dont overflow
                     //build the array c# stylee because we need to define the length based on the string size
                     char *charRet = new char[strToConvert.length() + 1];
                     //copy that string into the char array
                     std::strcpy(charRet, strToConvert.c_str());
                     return charRet;
                 }
//Used to write the contents
                 void WriteToMemory(DWORD addressToWrite, char* valueToWrite, int byteNum)
                 {
                     //used to change our file access type, stores the old
                     //access type and restores it after memory is written
                     unsigned long OldProtection;
                     //give that address read and write permissions and store the old permissions at oldProtection
                     VirtualProtect((LPVOID)(addressToWrite), byteNum, PAGE_EXECUTE_READWRITE, &OldProtection);


                     //write the memory into the program and overwrite previous value
                     memcpy((LPVOID)addressToWrite, valueToWrite, byteNum);


                     //reset the permissions of the address back to oldProtection after writting memory
                     VirtualProtect((LPVOID)(addressToWrite), byteNum, OldProtection, NULL);
                 }


    }
 
Last edited by a moderator:

zepixxx

Newbie
Full Member
Apr 14, 2014
8
122
0
I still get the exact same error after doing as you suggested. I'm terrible at this
 

Crazywink

Hacker
Meme Tier VIP
Dank Tier Donator
Jul 18, 2012
626
4,613
17
The error says it's illegal to have function definitions locally when you put it outside of the namespace?
 

zepixxx

Newbie
Full Member
Apr 14, 2014
8
122
0
Ok, finally that resolved the problem. But now I do get other errors.
This is the solution im working in SS1.PNG

The errors that I'm getting:
1>------ Build started: Project: Cheat2, Configuration: Debug Win32 ------
1> dllInterface.cpp
1> main.cpp
1>C:\Users\Andreas\documents\visual studio 2010\Projects\Cheat2\Cheat2\main.cpp : warning C4747: Calling managed '_DllMain@12': Managed code may not be run under loader lock, including the DLL entrypoint and calls reached from the DLL entrypoint
1>main.obj : error LNK2005: "bool Cheat2::AmmoStatus" (?AmmoStatus@Cheat2@@3_NA) already defined in dllInterface.obj
1>main.obj : error LNK2005: "bool Cheat2::RapidStatus" (?RapidStatus@Cheat2@@3_NA) already defined in dllInterface.obj
1>main.obj : error LNK2005: "bool Cheat2::RecoilStatus" (?RecoilStatus@Cheat2@@3_NA) already defined in dllInterface.obj
1>main.obj : error LNK2005: "char * Cheat2::AmmoOpCode" (?AmmoOpCode@Cheat2@@3PADA) already defined in dllInterface.obj
1>main.obj : error LNK2005: "char * Cheat2::AmmoDefaultOpCode" (?AmmoDefaultOpCode@Cheat2@@3PADA) already defined in dllInterface.obj
1>main.obj : error LNK2005: "unsigned long Cheat2::AmmoAddress" (?AmmoAddress@Cheat2@@3KA) already defined in dllInterface.obj
1>main.obj : error LNK2005: "unsigned long * Cheat2::RecoilAddress" (?RecoilAddress@Cheat2@@3PAKA) already defined in dllInterface.obj
1>main.obj : error LNK2005: "int * Cheat2::noOfBytes" (?noOfBytes@Cheat2@@3PAHA) already defined in dllInterface.obj
1>main.obj : error LNK2005: "char * Cheat2::RapidOpCode" (?RapidOpCode@Cheat2@@3PADA) already defined in dllInterface.obj
1>main.obj : error LNK2005: "char * Cheat2::RapidDefaultOpCode" (?RapidDefaultOpCode@Cheat2@@3PADA) already defined in dllInterface.obj
1>main.obj : error LNK2005: "unsigned long Cheat2::RapidAddress" (?RapidAddress@Cheat2@@3KA) already defined in dllInterface.obj
1>main.obj : error LNK2005: "int Cheat2::OnePressTMR" (?OnePressTMR@Cheat2@@3HA) already defined in dllInterface.obj
1>main.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * Cheat2::Nops" (?Nops@Cheat2@@3PAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) already defined in dllInterface.obj
1>main.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * Cheat2::RecoilDefaultOpCodes" (?RecoilDefaultOpCodes@Cheat2@@3PAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) already defined in dllInterface.obj
1>C:\Users\Andreas\documents\visual studio 2010\Projects\Cheat2\Debug\Cheat2.dll : fatal error LNK1169: one or more multiply defined symbols found
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
I've tried to do a search on this, but couldn't find any solution. What am I doing wrong? Anyone?
 
Last edited:

zepixxx

Newbie
Full Member
Apr 14, 2014
8
122
0
This is the structure:

main.cpp:

C++:
#include <Windows.h>
#include "dllInterface.h"

extern int UIMain(); 



DWORD WINAPI Main_thread( LPVOID lpParam )
{
	UIMain();
    return S_OK;
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  _reason,
                       LPVOID lpReserved
					  )
{
	//we only care if it attaches
	if (_reason == DLL_PROCESS_ATTACH)
	{
		CreateThread(0, 0x1000, &Main_thread, 0, 0, NULL); 
	}
	return TRUE;
}
dllInterface.cpp
C++:
#include "dllInterface.h"

using namespace Cheat2;


int UIMain()
{
	//THIS CODE is required to start our User interface
    // Enabling Windows XP visual effects before any controls are created
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false);


    // Create the main window and run it
	dllInterface^ NewUi = gcnew dllInterface();
    Application::Run(NewUi); //Run our New user interface (linking to "User_Interface.h")
	return 1;
}
dllInterface.h (see the code above).

This is Fleep's code, I'm trying to get it to work so that I can learn and implement it to other games.
 

IneverGo

Newbie
Full Member
Mar 9, 2014
17
148
0
hmm the errors tell you exactly whats wrong.
i suggest to add #pragma once
because you include dllinject....header into both files.
that is unneccecary. just include #pragma once
on top of both cpps
 
Attention! Before you post:

Read the How to Ask Questions Guide
99% of questions are answered in the Beginner's Guide, do it before asking a question.

No Hack Requests. Post in the correct section.  Search the forum first. Read the rules.

How to make a good post:

  • Fill out the form correctly
  • Tell us the game name & coding language
  • Post everything we need to know to help you
  • Ask specific questions, be descriptive
  • Post errors, line numbers & screenshots
  • Post code snippets using code tags
  • If it's a large project, zip it up and attach it

If you do not comply, your post may be deleted.  We want to help, please make a good post and we will do our best to help you.

Community Mods