Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Kal Online
You last visited: Today at 10:10

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Decided to release my 100% ban free bot source code

Discussion on Decided to release my 100% ban free bot source code within the Kal Online forum part of the MMORPGs category.

Reply
 
Old   #1
 
HighGamer.'s Avatar
 
elite*gold: 50
Join Date: May 2014
Posts: 1,910
Received Thanks: 941
Decided to release my 100% ban free bot source code

This is a private bot I had working before the latest XTRAP update now it doesn't work anymore..

This is a really good bot since you cannot get banned with it, it just uses a FindMonsterById() Hook in game engine and automatically walks to monster and attacks it, it uses the game engine's built-in functions to attack monsters which means the game plays it self, without packet modifications.. it still used recv() packets for data thats about it.. no packet sending at all.. this why you couldn't get banned with it.. it grinds like a normal person would without a ditto random script.. this was far more intelligent.

2 things Xtrap fixed..
~Import hooking (does nothing anymore) can't hook recv() to get packets for mob information etc.. but this isn't really that big of a deal I could strip the mob info from kalonline memory (this still is possible).

~Second thing they fixed which broke this bot completely is auto closes new threads created in DLL which makes multi-threading impossible and this means bot can no longer work, I tried to solve it with single threading with no luck since you need to wait for the game to load can't wait in single threading mode.

If anyone finds a new way to run threads that XTRAP cannot detect let me know I'll fix the bot up again and release it free for the community.


Edit:

Removed download for now.. I figured out a way to fix it again haha.. and its pretty nice way too.. won't disclose how I did it but it works now so they wont fix it again.
HighGamer. is offline  
Thanks
1 User
Old 03/30/2019, 02:26   #2
 
HighGamer.'s Avatar
 
elite*gold: 50
Join Date: May 2014
Posts: 1,910
Received Thanks: 941
Can someone help me figure out the Monster Info like Current HP / Max HP / Monster Id.

Here is what I got so far..

Code:
unsigned int MonsterArray = 0x8E81B8; //TODO: Get PointerFindPattern
Code:
int GetMonsterIdByIndex(int index)
{
	int id = 0;
	__try {
		int pMonsterArray = *(unsigned int *)MonsterArray;
		if (pMonsterArray) {
			int firstMob = *(unsigned int*)(pMonsterArray + (index * 4));
			if (firstMob) {
				id = *(unsigned int *)(firstMob + 0xC);
			}
		}
	}
	__except (EXCEPTION_EXECUTE_HANDLER)
	{
		id = 0;
	}
	return id;
}
Anyone know how I can get the Current HP / Max HP of every monster?

I can find it easily in cheat engine but I can't find the pointers correctly because Pointer scan doesn't find anything.
HighGamer. is offline  
Old 03/30/2019, 17:52   #3




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,539
PHP Code:
std::uintptr_t MonsterInfoPtr = *reinterpret_cast<std::uintptr_t*>(* reinterpret_cast<std::uintptr_t*>(Tool->QuickFindPattern("\xa1\x00\x00\x00\x00\x89\x45\xec\x8b\x4d\xec\x8b\x11\x89\x55\xe8\xc7\x45\xf8\x00\x00\x00\x00","x????xxxxxxxxxxxxxxxxxx"nullptr) + 1)); 
this should work -

anywhere in the Array should be Health values for sure ,too -

just cast it to a class like this ->

PHP Code:
std::uintptr_t player_pattern = *reinterpret_cast<std::uintptr_t*>(*reinterpret_cast<std::uintptr_t*>(Tool->QuickFindPattern(
            
"\xa1\x00\x00\x00\x00\x8b\x10\x8b\x0d\x00\x00\x00\x00\x8b\x42\x7c\xff\xd0""x????xxxx????xxxxx",
            
nullptr) + 1));

g_EnginePlayer = (EnginePlayer*)player_pattern;

class 
EnginePlayer
{
public:
    
unsigned char _0x0000[18128];
    
int X//0x46D0 
    
int Z//0x46D4 
    
int Y//0x46D8 
    
unsigned char _0x46DC[1732];
    
unsigned char Name[20]; //0x4DA0 
}; 
bloodx is offline  
Old 03/31/2019, 01:36   #4
 
HighGamer.'s Avatar
 
elite*gold: 50
Join Date: May 2014
Posts: 1,910
Received Thanks: 941
Here is what I have so far, it targets players too in the MonsterArray haha.. i'll check out your code thanks alot

Code:
int GetMonsterMinHP(int byMonsterId)
{
	int newid = FindCharacterInfo(byMonsterId, 0);
	if (newid > 0) {
		return *(DWORD *)(newid + 0x475C);
	}
	return 0;
}

int GetMonsterMaxHP(int byMonsterId)
{
	int newid = FindCharacterInfo(byMonsterId, 0);
	if (newid > 0) {
		return *(DWORD *)(newid + 0x4760);
	}
	return 0;
}

int GetMonsterXCoordinate(int byMonsterId)
{
	int newid = FindCharacterInfo(byMonsterId, 0);
	if (newid > 0) {
		return *(DWORD *)(newid + 0x46E0);
	}
	return 0;
}

int GetMonsterYCoordinate(int byMonsterId)
{
	int newid = FindCharacterInfo(byMonsterId, 0);
	if (newid > 0) {
		return *(DWORD *)(newid + 0x46E8);
	}
	return 0;
}
Any tips how to use MonsterInfoPtr ? it seems to only contain the first 4 monsters.. the other monsters are all 0's... and I have atleast 10 on my screen


using your MonsterInfoPtr I created a loop to scan for the first 100 monsters and here is the results!..

Code:
int GetMonsterIdByIndex(int index)
{
	int id = 0;
	__try {
		if (*(DWORD *)MonsterArray != 0)
			return (*(DWORD*)((*(DWORD *)(MonsterArray)) + (index * 4)));
		else
			return 0;
	}
	__except (EXCEPTION_EXECUTE_HANDLER)
	{
		id = 0;
	}
	return id;
}
Code:
	int id = 0;
	for (int i = 0; i < 100; i++) {
		id = GetMonsterIdByIndex(i);
		int newid = FindCharacterInfo(id, 0);

		if (newid > 0)
			Log("[Index = %X][monsterId = %X][HP = %d][HP Max = %d][x=%d][y=%d]\n", i, newid, *(DWORD *)(newid + 0x475C), *(DWORD *)(newid + 0x4760), *(DWORD *)(newid + 0x46E0), *(DWORD *)(newid + 0x46E8));

		//if (id > 0)
			//AttackMonster(id);
	}
results are

Code:
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258034][y=262706]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258065][y=262707]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258095][y=262715]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258095][y=262715]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258095][y=262715]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258095][y=262715]
[Index = 3][monsterId = 210ECA58][HP = 133][HP Max = 133][x=258095][y=262715]
as you can see my previous method does a better job with 0xC.. which is Index = (3 * 4) = 12 (0xC)

Here is with my old method

Code:
int GetMonsterIdByIndex(int index)
{
	int id = 0;
	__try {
		if (*(DWORD *)MonsterArray != 0) {
			int firstMob = (*(DWORD*)((*(DWORD *)(MonsterArray)) + (index * 4)));
			if (firstMob)
				id = *(unsigned int *)(firstMob + 0xC);
		}
	}
	__except (EXCEPTION_EXECUTE_HANDLER)
	{
		id = 0;
	}
	return id;
}
Code:
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 1][monsterId = 22C105F8][HP = 207][HP Max = 207][x=259026][y=262892]
[Index = 2][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259232][y=262789]
[Index = 11][monsterId = 22BF2C88][HP = 133][HP Max = 133][x=258768][y=262192]
[Index = 20][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 21][monsterId = 22BE3FD0][HP = 133][HP Max = 133][x=258293][y=262076]
[Index = 22][monsterId = 22C06828][HP = 207][HP Max = 207][x=259147][y=262779]
[Index = 1][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 11][monsterId = 22BF2C88][HP = 133][HP Max = 133][x=258768][y=262192]
[Index = 20][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 21][monsterId = 22BE3FD0][HP = 133][HP Max = 133][x=258293][y=262076]
[Index = 22][monsterId = 22C06828][HP = 207][HP Max = 207][x=259147][y=262779]
[Index = 1][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 11][monsterId = 22BF2C88][HP = 133][HP Max = 133][x=258768][y=262192]
[Index = 20][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 21][monsterId = 22BE3FD0][HP = 133][HP Max = 133][x=258293][y=262076]
[Index = 22][monsterId = 22C06828][HP = 207][HP Max = 207][x=259147][y=262779]
[Index = 1][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 11][monsterId = 22BF2C88][HP = 133][HP Max = 133][x=258768][y=262192]
[Index = 20][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
[Index = 21][monsterId = 22BE3FD0][HP = 133][HP Max = 133][x=258293][y=262076]
[Index = 22][monsterId = 22C06828][HP = 207][HP Max = 207][x=259147][y=262779]
[Index = 1][monsterId = 22BD0430][HP = 207][HP Max = 207][x=259073][y=262835]
manages to pick up 3 monsters out of 10 or so


All my findings are from its a old engine kalonline which still has Hackshield not xTrap so I can use cheat engine to find the values.. then I convert the same code findings using IDA PRO to the international kalonline and thats how I work.

Here is how the offsets are..




seems the pattern is reset every 0xC.. and a new nest of 0x0, 0x4, 0x8, then new 0xC again happens.

Newest one coded
Code:
int GetMonsterIdByIndex(int index)
{
	int id = 0;
	
	int offset_0 = 0;
	int offset_1 = 0;
	int offset_2 = 0;
	int offset_3 = 0;
	int offset_4 = 0;
	int stop_offset = 1;

	__try {
		for (int i = 0; i < index; i++) {
			if (offset_0 == 0xC) {
				offset_0 = 0;
				offset_1 += 4;
				stop_offset = 2;
			}
			if (offset_1 == 0xC) {
				offset_1 = 0;
				offset_2 += 4;
				stop_offset = 3;
			}
			if (offset_2 == 0xC) {
				offset_2 = 0;
				offset_3 += 4;
				stop_offset = 4;
			}
			if (offset_3 == 0xC) {
				break;
			}
			offset_0 += 4;
		}

		if (*(DWORD *)MonsterArray != 0) {
			int firstMob = (*(DWORD*)((*(DWORD *)(MonsterArray)) + (offset_0)));
			if (firstMob && stop_offset > 1) {
				int secondMob = *(DWORD*)((*(DWORD*)((*(DWORD *)(MonsterArray)) + (offset_0))) + (offset_1));
				if (secondMob && stop_offset > 2) {
					int thirdMob = *(DWORD*)(*(DWORD*)((*(DWORD*)((*(DWORD *)(MonsterArray)) + (offset_0))) + (offset_1)) + (offset_2));
					if (thirdMob && stop_offset > 3)
					{
						int forthMob = *(DWORD*)(*(DWORD*)(*(DWORD*)((*(DWORD*)((*(DWORD *)(MonsterArray)) + (offset_0))) + (offset_1)) + (offset_2)) + (offset_3));
						if (forthMob) {
							id = *(unsigned int *)(forthMob + 0xC);
						}
					} else {
						id = *(unsigned int *)(thirdMob + 0xC);
					}
				} else {
					id = *(unsigned int *)(secondMob + 0xC);
				}
			} else {
				id = *(unsigned int *)(firstMob + 0xC);
			}
		}
	}
	__except (EXCEPTION_EXECUTE_HANDLER)
	{
		id = 0;
	}
	return id;
}
manages to get alot of monsters now

But its just 4 different monster Id's repeated over and over again.

Code:
[Index = 0][monsterId = 228D1758][HP = 243][HP Max = 243][x=257845][y=262437]
[Index = 1][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = 2][monsterId = 220E9098][HP = 100][HP Max = 100][x=258310][y=262332]
[Index = 5][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 7][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = A][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = B][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = E][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 10][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 13][monsterId = 228E0410][HP = 168][HP Max = 168][x=258359][y=262981]
[Index = 14][monsterId = 220E9098][HP = 100][HP Max = 100][x=258310][y=262332]
[Index = 17][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 19][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 1C][monsterId = 228D6640][HP = 0][HP Max = 168][x=258325][y=262440]
[Index = 1D][monsterId = 228D6640][HP = 0][HP Max = 168][x=258325][y=262440]
[Index = 20][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 22][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 25][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = 26][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = 29][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 2B][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 2E][monsterId = 228E0410][HP = 168][HP Max = 168][x=258359][y=262981]
[Index = 2F][monsterId = 220E9098][HP = 100][HP Max = 100][x=258310][y=262332]
[Index = 32][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 34][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 37][monsterId = 228CC870][HP = 133][HP Max = 133][x=258624][y=261787]
[Index = 38][monsterId = 228CC870][HP = 133][HP Max = 133][x=258624][y=261787]
[Index = 3B][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 3D][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 40][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = 41][monsterId = 228C7988][HP = 133][HP Max = 133][x=258736][y=262302]
[Index = 44][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 46][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
[Index = 49][monsterId = 228E0410][HP = 168][HP Max = 168][x=258359][y=262981]
[Index = 4A][monsterId = 220E9098][HP = 100][HP Max = 100][x=258310][y=262332]
[Index = 4D][monsterId = 228BDBB8][HP = 133][HP Max = 133][x=258296][y=262063]
[Index = 4F][monsterId = 228C2AA0][HP = 133][HP Max = 133][x=257856][y=262151]
HighGamer. is offline  
Old 03/31/2019, 17:13   #5




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,539
just take a look with ReClass for example at the MonsterInfoPtr adress - so you can better create a class for smth like this.
bloodx is offline  
Old 03/31/2019, 20:55   #6
 
HighGamer.'s Avatar
 
elite*gold: 50
Join Date: May 2014
Posts: 1,910
Received Thanks: 941
I know what addresses mean what.. i don't know how to get the monster pointer data out successfully anyways. Can you post more code on your MonsterInfoPtr?

Can ReClass run with kalonline anticheats? is it like a debugger or something?

I know MonsterInfoPtr = std::map< int, TargetInfo>

Monster Data Info Ptr in Kalonline source code C++ is declared as..

Code:
class CGameTarget : public CModel {
#else
class CGameTarget : public CGameEffectBoneModel {
#endif

public:
	CGameTarget();
	~CGameTarget();

#ifdef DEF_S34_DIOB_080424 // DEF_S34_DIOB_080424_05
	// Ÿ°Ù À妽º ÀúÀå º¯¼ö
	int					m_nIndex;
#endif

#ifndef DEF_XMODEL_BONE_EFFECT_OEN_081125
	DWORD				m_CharaterID;                       //@  ij¸¯ÅÍ °íÀ¯ id
#endif

	DWORD				m_dwGID;                            //@  ±æµå ID
	const char *		m_pCharaterName;                    //@  ij¸¯ÅÍ ¸í
	char				m_pCharaterGuildName[MAX_PATH];     //@  ±æµå¸í
	char 				m_pCharaterGuildClassName[MAX_PATH];//@  ±æµåµî±Þ¸í

#ifdef DEF_UI_RENEWALL_081016
	BYTE				m_byLevel;		        //@  ·¹º§
#endif

	BYTE				m_byKind;		        //@  ij¸¯ÅÍÁ¾·ù CK_PLAYER CK_MONSTER
	BYTE				m_byEnd;                //@  ij¸¯Åͳ¡?
	int					m_vServerPt[3];         //@  ¼*¹öÆ÷ÀÎÅÍ?

	D3DXVECTOR3			m_vPosi;                //@  ij¸¯ÅÍÀ§Ä¡
	D3DXVECTOR3			m_vAttack;              //@  ij¸¯ÅÍ °ø°Ý ¹æÇâ?
	D3DXVECTOR3			m_vMove;                //@  ij¸¯ÅÍ ¿òÁ÷ÀÓ(À̵¿·®Àϵí)

	D3DXMATRIX			m_matRotPos;            //@  ȸÀüÀ§Ä¡Çà·Ä? ½ºÄÉÀÏ °ª Àû¿ë¾ÈµÈ Çà·Ä?

	int					m_nCurHP;               //@  ÇöÀç Health Point
	int					m_nMaxHP;               //@  ÃÖ´ë Health Point
}
}

	class TargetInfo
	{
	public:
		TargetInfo():m_pTarget(0)
		{};
		~TargetInfo()
		{
			SAFE_DELETE(m_pTarget);
		}
		CGameTarget * m_pTarget;
	};

typedef std::map< int, TargetInfo> t_TargetInfoMap;
t_TargetInfoMap m_TargetInfoMap;
Code:
//CGame_Character::TargetInfo* CGame_Character::FindCharacterInfo(DWORD  FindID)
//{
//	t_TargetInfoMap::iterator it = m_TargetInfoMap.find(FindID);
//	if (it != m_TargetInfoMap.end())
//	{
//		return &(*it).second;
//	}
//	return 0;
//}
HighGamer. is offline  
Old 04/04/2019, 08:29   #7
 
elite*gold: 0
Join Date: Nov 2009
Posts: 7
Received Thanks: 0
buy kalonline Date Base any can help me add my skype
Sin12 is offline  
Reply




All times are GMT +1. The time now is 10:10.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.