Register for your free account! | Forgot your password?

Go Back   elitepvpers > Shooter > WarRock
You last visited: Today at 03:06

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

Advertisement



Warrock - Code Snippets

Discussion on Warrock - Code Snippets within the WarRock forum part of the Shooter category.

Closed Thread
 
Old 08/14/2012, 01:03   #166
 
Willi35's Avatar
 
elite*gold: 9
Join Date: Oct 2010
Posts: 395
Received Thanks: 812
Quote:
Keine Ahnung ob es funktioniert, gerade geschrieben^^
Wenn man das ließt....

Quote:
VOID WINAPIV WRSendMsgBox(CONST CHAR* dwText)
{
DWORD dwMsgBox = ASM_MESSAGEBOX;
__asm
{
PUSH dwText
CALL dwMsgBox
ADD ESP,4
}
}
Ich wundere mich das die Funktion überhaupt funktioniert, wenn du nicht die komplette Funktion reflektiert mit den statischen Pointern.

Quote:
ADD ESP,4
Den Müll hättest dir sparen können.

Beachte das bei ASM Funktionen die eine derartige Anwendung trifft, den ganzen Funktionstrang zu reflektieren mit den statischen Pointern. Es bringt nichts hier Müll zu posten, dass zwar vllt gehen mag, aber Fehlermeldungen im Prozess hagelt.
Willi35 is offline  
Old 08/14/2012, 10:11   #167
 
elite*gold: 0
Join Date: Jul 2011
Posts: 3,812
Received Thanks: 1,840
Kann mir einer sagen warum die Asm-Funktionen in meinem NoMenu immer mein Cheat crashen lassen?

Bypass

Beispielfunktion
Es Funktioniert zwar 1x , aber danach crasht es sofort. "Fremdprogramm entdeckt" oder so etwas in der Art.

Danke im Vorraus.

€dit: Habe es gerade selber rausgefunden .
Code:
CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)Bypass,NULL,NULL,NULL);
Habe des vergessen
xRoute66x is offline  
Thanks
1 User
Old 08/14/2012, 15:09   #168
 
elite*gold: 351
Join Date: Jul 2012
Posts: 427
Received Thanks: 430
Quote:
Originally Posted by xroute66x™ :) View Post
Kann mir einer sagen warum die Asm-Funktionen in meinem NoMenu immer mein Cheat crashen lassen?

Bypass

Beispielfunktion
Es Funktioniert zwar 1x , aber danach crasht es sofort. "Fremdprogramm entdeckt" oder so etwas in der Art.

Danke im Vorraus.

€dit: Habe es gerade selber rausgefunden .
Code:
CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)Bypass,NULL,NULL,NULL);
Habe des vergessen
Hallo,
ich habe zur Zeit nicht die aktuellen Addys für den Bypass "parat", jedoch gehe ich einmal davon aus, dass sie aktuell sind.
Jedoch will ich dich darauf hinweisen, dass deine Funktion die OFF Bytes nicht besitzt und anscheinend
die ON Bytes fehlerhaft sind:
Code:
WriteASM((void*)ASM_Quickplant,(PBYTE)"\xEB\x39",2)
Ich habe mir hier aus dem Addy Thread gerade mal die von Trademark geposteten Addys + Bytes gesucht.
Code:
QuickPlant: 0x4F6A11
Off Bytes: x7D x16
On Bytes: xEB x36

QuickDefuse: 0x4F22B0
Off Bytes: x7D x07
On Bytes: xEB x39
spätestens jetzt sollte dir etwas auffallen .
Sollten die Bytes hier nicht stimmen, ist es nicht mein Verschulden :P
Chowniіqhtz is offline  
Thanks
1 User
Old 08/14/2012, 15:15   #169
 
elite*gold: 0
Join Date: Jul 2011
Posts: 3,812
Received Thanks: 1,840
Quote:
Originally Posted by Chowniіqhtz View Post
Hallo,
ich habe zur Zeit nicht die aktuellen Addys für den Bypass "parat", jedoch gehe ich einmal davon aus, dass sie aktuell sind.
Jedoch will ich dich darauf hinweisen, dass deine Funktion die OFF Bytes nicht besitzt und anscheinend
die ON Bytes fehlerhaft sind:
Code:
WriteASM((void*)ASM_Quickplant,(PBYTE)"\xEB\x39",2)
Ich habe mir hier aus dem Addy Thread gerade mal die von Trademark geposteten Addys + Bytes gesucht.
Code:
QuickPlant: 0x4F6A11
Off Bytes: x7D x16
On Bytes: xEB x36

QuickDefuse: 0x4F22B0
Off Bytes: x7D x07
On Bytes: xEB x39
spätestens jetzt sollte dir etwas auffallen .
Sollten die Bytes hier nicht stimmen, ist es nicht mein Verschulden :P
Ich habe extra nur die Onbytes genommen, ich wollte es nur austesten
Funktioniert jetzt aber alles.

Code:
if (XR_UnlAmmo)
	WriteASM((void *)ASM_UNLAMMO,(PBYTE)"\xC3",1);
else
	WriteASM((void *)ASM_UNLAMMO,(PBYTE)"\x56",1);
Kp, wer die funktion gefunden hat
xRoute66x is offline  
Thanks
2 Users
Old 08/14/2012, 19:09   #170
 
elite*gold: 0
Join Date: Nov 2007
Posts: 24
Received Thanks: 1
My WTW doesn't work, it won't go all the way trough the wall.
Like this:

Code:
#define MEM_WTW 0x85CB20
		switch(CH_WTW)
		{
			case 1:
				MemWrite<float>((void*)MEM_WTW, 0); break;//on
		}
jeffrey1994 is offline  
Old 08/14/2012, 20:15   #171
 
elite*gold: 0
Join Date: Jul 2011
Posts: 3,812
Received Thanks: 1,840
Quote:
Originally Posted by jeffrey1994 View Post
My WTW doesn't work, it won't go all the way trough the wall.
Like this:

Code:
#define MEM_WTW 0x85CB20
		switch(CH_WTW)
		{
			case 1:
				MemWrite<float>((void*)MEM_WTW, 0); break;//on
		}
On Value of WTW are -999.

Code:
if (CH_WTW)
MemWrite<float>((void*)MEM_WTW, -999);
else
MemWrite<float>((void*)MEM_WTW, 6);
xRoute66x is offline  
Old 08/14/2012, 20:28   #172
 
elite*gold: LOCKED
Join Date: Aug 2012
Posts: 130
Received Thanks: 37
Quote:
if (CH_WTW)
MemWrite<float>((void*)MEM_WTW, -999);
else
MemWrite<float>((void*)MEM_WTW, 6);
Höö O.o

if (CH_WTW)
{
MemWrite<double>((void*)MEM_WTW, -999);
}
else
{
MemWrite<double>((void*)MEM_WTW, 6);
}

Und wenn <float>
dann musst du nicht MemWrite verwenden sondern FailUpdate.

if (CH_WTW)
{
FailUpdate<float>((void*)MEM_WTW, -999);
}
else
{
FailUpdate<float>((void*)MEM_WTW, 6);
}
Failor !
.SiroSkill'' is offline  
Old 08/14/2012, 21:10   #173
 
elite*gold: 0
Join Date: Jul 2011
Posts: 3,812
Received Thanks: 1,840
Quote:
Originally Posted by .SiroSkill'' View Post
Höö O.o

if (CH_WTW)
{
MemWrite<double>((void*)MEM_WTW, -999);
}
else
{
MemWrite<double>((void*)MEM_WTW, 6);
}

Und wenn <float>
dann musst du nicht MemWrite verwenden sondern FailUpdate.

if (CH_WTW)
{
FailUpdate<float>((void*)MEM_WTW, -999);
}
else
{
FailUpdate<float>((void*)MEM_WTW, 6);
}
Failor !
Das ist irgendwie scheis egal du freak?
Ich kann es nennen wie ich will
Benutze die WTW Source ja gar nicht mehr, habe vorher immer float benutzt


AutoMedic NoMenu
Code:
if(GetAsyncKeyState('M'))
WriteASM((void*)ASM_AutoMedic,(PBYTE)"\xEB\x3B",2);
if(GetAsyncKeyState('N'))
WriteASM((void*)ASM_AutoMedic,(PBYTE)"\x75\x15",2);
Die Addy bekommt ihr aber nicht
xRoute66x is offline  
Old 08/14/2012, 22:20   #174
 
elite*gold: LOCKED
Join Date: Aug 2012
Posts: 130
Received Thanks: 37
Quote:
Originally Posted by xroute66x™ :) View Post
Ah ****
Habe mich verschrieben mit "MemWrite" meine ja "FailUpdate".
Benutze die WTW Source ja gar nicht mehr, habe vorher immer float benutzt


AutoMedic NoMenu
Code:
Code Removed
Die Addy bekommt ihr aber nicht
Nim denn AutoMedic source raus denn kann man zu Menu source umcoden und die Asm addys sind Public ! O.o

und wieder der gleich fehler ! WriteASM da muss FailUpdate hin xDDDD

Obwohl, das ist ASM Source xDD ne doch WriteASM or MemWrite von bypass >.<
.SiroSkill'' is offline  
Old 08/14/2012, 22:29   #175
 
elite*gold: 351
Join Date: Jul 2012
Posts: 427
Received Thanks: 430
Quote:
Originally Posted by .SiroSkill'' View Post
Nim denn AutoMedic source raus denn kann man zu Menu source umcoden und die Asm addys sind Public ! O.o

und wieder der gleich fehler ! WriteASM da muss FailUpdate hin xDDDD

Obwohl, das ist ASM Source xDD ne doch WriteASM or MemWrite von bypass >.<
Wenn man keine Ahnung hat, einfach mal die Fresse halten.

zu Route:
Ich würde eine Source nie als "NoMenu Source" bezeichnen.
Alle source Codes kann man in einem No - als auch in einem Menu anwenden.

NoMenu:
Code:
if(GetAsyncKeyState('M'))
WriteASM((void*)ASM_AutoMedic,(PBYTE)"\xEB\x3B",2);
if(GetAsyncKeyState('N'))
WriteASM((void*)ASM_AutoMedic,(PBYTE)"\x75\x15",2);
Menu:
Code:
if(AutoMedic) {
WriteASM((void*)ASM_AutoMedic,(PBYTE)"\xEB\x3B",2);
}else{
WriteASM((void*)ASM_AutoMedic,(PBYTE)"\x75\x15",2); }
Beides möglich
Chowniіqhtz is offline  
Thanks
4 Users
Old 08/14/2012, 23:52   #176
 
elite*gold: LOCKED
Join Date: Dec 2009
Posts: 4,650
Received Thanks: 5,731
Quote:
Originally Posted by .SiroSkill'' View Post
Nim denn AutoMedic source raus denn kann man zu Menu source umcoden und die Asm addys sind Public ! O.o

und wieder der gleich fehler ! WriteASM da muss FailUpdate hin xDDDD

Obwohl, das ist ASM Source xDD ne doch WriteASM or MemWrite von bypass >.<
Man merkt das du keine ahnung von irgend was hast weder coding noch sonst war und nur alles kopierst und einfügst


es ist scheiß egal was man benutzt und wie man das nennt es ist sogar schon unnötig dein sogenanntes "failupdate" zu benutzten du kannst das direkt mit virtualprotect patchen lassen und das wars

und zu deinem "ASM Source codes etc"

Es ist scheißegal ob du WriteASM, MemWrite oder MemEdit bentzt oder wie auch immer du das nennen willst weil alles auf der selben basis läuft und diese ist Bytes zu changen


Genauso wie ihr alle so schlau seit und z.b. immer (PBYTE)"\xEB\x3B",2)
dies verwendet währt ihr schlau und würdet nicht wollen das man eure dll dumped obwohl bei euch eh nichts besonderes drin ist fürdet ihr es entweder so machen:

Code:
WriteASM((void*)ASM_AutoMedic,(0xEB,0x3B),2);

oder einfach

Code:
BYTE MedicON[] = {0xEB,0x3B};

WriteASM((void*)ASM_AutoMedic,MedicON,2);

ist im grunde das selbe nur das falls man eure dll dumpen würde da kein string ist und man einfach nach "\xEB suchen muss schon findet man eure ganzen addys on bytes etc....



achja und noch eins warum zur Hölle lässt ihr die ganzen bytes dauern changen

also warum macht ihr das:

Code:
if(AutoMedic) 
{
WriteASM((void*)ASM_AutoMedic,(PBYTE)"\xEB\x3B",2);
}
else
{
WriteASM((void*)ASM_AutoMedic,(PBYTE)"\x75\x15",2); 
}
solange ihr die funktion an habt dann wird er dauernd versuchen die on bytes auf EB... zu changen aber was bringt das

solange ihr nicht noch eine 2. funktion habt welche die selbe addy verwendet aber andere on bytes hat dann kann es 1. sein das es unnötig laggt bzw beides am ende nicht funktioniert ist nur ein dummes beispiel ich weiß aber viel sinnvoller wäre es wenn ihr das einfach so macht:
Code:
bool  medicbool = false;
if(AutoMedic == 1 && !medicbool ) 
{
//WriteASM((void*)ASM_AutoMedic,(PBYTE)"\xEB\x3B",2);
medicbool = true;
}
if(AutoMedic == 0 && medicbool ) 
{
//WriteASM((void*)ASM_AutoMedic,(PBYTE)"\x75\x15",2); 
medicbool = false;
}

beziehungsweise

Code:
bool  medicbool = false;
if(AutoMedic) 
{
if(!medicbool ) 
{
//WriteASM((void*)ASM_AutoMedic,(PBYTE)"\xEB\x3B",2);
medicbool = true;
}
}
else
{
if(medicbool ) 
{
//WriteASM((void*)ASM_AutoMedic,(PBYTE)"\x75\x15",2); 
medicbool = false;
}
}
Den es reicht schon wenn ihr die Bytes 1x changed den im normal fall dürfte sich das nicht zurück changen

ich kenne Chowniіqhtz nicht aber es sieht stark danach aus als könne er 1000 mal mehr als du .SiroSkill'' obwohl das ist ja eh nicht schwer


ich will mal sehen was du machst wenn der dreckige public bypass gepatched wurde und nicht mehr geht entweder gibt es dann 50% weniger hacks hier oder 50% der hacks funktionieren einfach nicht, weil der bypass euren hack ud macht und dort fremdprogramm entdeckt etc kommt weil ihr da alles nur herreinkopiert oder eine bedeutung einer funktion zu kennen hauptsache ihr habt sie ok fast alle haben so mal angefangen ich habe das damals auch gemacht aber ich habe daraus gelernt das wenn man das tut einfach mal drauf achten sollte und versuchen die sachen zu verstehen...



genauso wie Burner ich habe nix gegen dich ich kenne dich auch nicht aber man sollte schon wissen was macht macht bevor man irgend was macht nicht so wie deine aussagen

Quote:
Keine Ahnung ob es funktioniert, gerade geschrieben^^

entweder weißt du was du macht und was verendert wird bzw was in der exe geschieht oder du lässt es sein


ihr hoffe ihr versteht das ich meine und mir ist es egal ob ich Rechtschreibfehler drin habe etc weils mir egal ist
Angel-Piece is offline  
Thanks
4 Users
Old 08/15/2012, 01:57   #177
 
Willi35's Avatar
 
elite*gold: 9
Join Date: Oct 2010
Posts: 395
Received Thanks: 812
Dieses Thema schweift leicht vom Thema ab, leider kann man es nicht mehr ändern die aktuelle Situation von WarRock. Man kann nur sagen, es wird sich auch nichts ändern da viele nur den größten Cheat haben möchten und die Relevation von Public und ViP eigentlich abschweift.

Diese Relavationen sieht man hier:

Wenn man dann schon ließt "Public ViP HACK with .....", da fragt man sich als Programmierer. Ja was meint den der "Programmierer" des Cheats von WarRock. Will er den Cheat für Public releasen oder für ViP. Natürlich wird dann auch klar, dass in diesem Cheat "besondere" Funktion enthalten die etwas mehr Spaß machen, als die "normalen" Funktionen.

Zur Memory Geschichte:

Es ist zwar alles gut und schön, dass jetzt fast alle die Memory Funktion von UnknownPK benutzen, dagegen habe ich auch nix. Aber wenn man sich hier die Funktion anschaut wie Sie angewendet wird, merkt man sofort das die Programmierer keine Ahnung haben wieso eigentlich man die Funktion braucht.

Wie Nexon vorgegangen ist habe ich hier ein Beispiel:

Früher:

Code:
int Speed_Default_Value = 96;

// ... irgentwo im WR Dschungel Code

if(/* Wenn Spieler läuft (so genannter DAMAFLY) */)
{
SetDamafly(Speed_Default_Value);

// .....
Jetzige Anwendung:

Code:
#define  Speed_Default_Value 96 // Kann die Deklarierung auch auf static setzen hat danach den gleichen Efekt.

// ... irgentwo im WR Dschungel Code

if(/* Wenn Spieler läuft (so genannter DAMAFLY) */)
{
SetDamafly(Speed_Default_Value);

// .....
Ich erkläre dieses Beispiel nicht, da man es als Programmierer verstehen sollte. Es liegt einfach an der Rechtevergabe mit diesen Parametern:

Quote:
#define PAGE_NOACCESS 0x01
#define PAGE_READONLY 0x02
#define PAGE_READWRITE 0x04
#define PAGE_WRITECOPY 0x08
#define PAGE_EXECUTE 0x10
#define PAGE_EXECUTE_READ 0x20
#define PAGE_EXECUTE_READWRITE 0x40
#define PAGE_EXECUTE_WRITECOPY 0x80
#define PAGE_GUARD 0x100
#define PAGE_NOCACHE 0x200
#define PAGE_WRITECOMBINE 0x400
Dann könnte eigentlich sich mit der Cheat .DLL alle Rechte geben lassen, wäre auch Weg den ich jetzt nicht erläutern werde. Dabei share ich diese Funktionen von meiner Klasse ide ich SCHON seit Jahren benutze Public. Das heißt nicht geklaut oder sonst was.

Code:
VOID SetDWORD(DWORD Adress,DWORD Value)
{
	unsigned long Protection;
	VirtualProtect((void*)Adress, sizeof(Value), PAGE_READWRITE, &Protection);
	memcpy((void*)Adress, &Value, sizeof(Value));
	VirtualProtect((void*)Adress, sizeof(Value), Protection, 0);
}

VOID SetDouble(DWORD Adress, DOUBLE Value)
{
	unsigned long Protection;
	VirtualProtect((void*)Adress, sizeof(Value), PAGE_READWRITE, &Protection);
	memcpy((void*)Adress, &Value, sizeof(Value));
	VirtualProtect((void*)Adress, sizeof(Value), Protection, 0);
}

VOID SetFloat(DWORD Adress, FLOAT Value)
{
	unsigned long Protection;
	VirtualProtect((void*)Adress, sizeof(Value), PAGE_READWRITE, &Protection);
	memcpy((void*)Adress, &Value, sizeof(Value));
	VirtualProtect((void*)Adress, sizeof(Value), Protection, 0);
}

VOID SetInt(DWORD Adress, INT Value)
{
	unsigned long Protection;
	VirtualProtect((void*)Adress, sizeof(Value), PAGE_READWRITE, &Protection);
	memcpy((void*)Adress, &Value, sizeof(Value));
	VirtualProtect((void*)Adress, sizeof(Value), Protection, 0);
}

VOID SetLong(DWORD Adress, LONG Value)
{
	unsigned long Protection;
	VirtualProtect((void*)Adress, sizeof(Value), PAGE_READWRITE, &Protection);
	memcpy((void*)Adress, &Value, sizeof(Value));
	VirtualProtect((void*)Adress, sizeof(Value), Protection, 0);
}
Template sind einfache schlechte Anwendung bei der Objektiven Programmierung und haben zu viele Nachteile, deswegen benutze ich keine.
Willi35 is offline  
Thanks
7 Users
Old 08/15/2012, 03:10   #178
 
elite*gold: 0
Join Date: Sep 2011
Posts: 112
Received Thanks: 165
@request

Midfunction for Windows XP
AdrenalinaPL is offline  
Old 08/15/2012, 18:05   #179
 
Raz9r's Avatar
 
elite*gold: 297
Join Date: Dec 2010
Posts: 1,129
Received Thanks: 1,687
Quote:
Originally Posted by Willi35 View Post
Template sind einfache schlechte Anwendung bei der Objektiven Programmierung und haben zu viele Nachteile, deswegen benutze ich keine.
Dazu möchte ich einmal zwei Dinge anmerken:
Template-Funktionen sind in der Objektorientierten Programmierung (nicht "objektiv") in der Art, wie sie in C++ ISO '98 eingebunden sind, ungeeignet.
Mit Template Klassen kann man sich das Leben einfacher machen und doch erzeugen sie häufig eine Menge Müll im Code. Aber ihre Vorteile für objektorientierte Sprachen sind einfach zu wichtig, als dass man sie einfach weglassen könnte.
Optimiert wurde das ganze - mein zweiter Punkt - in C++11 (ISO '11, C++0x). Hier wurden die Template-Funktionen und -Klassen dahingehend optimiert, effizienter zu sein und auch leichter in der Anwendung. So ist in C++11 folgender Code problemlos verwendbar und auf keine Art und weise ineffizienter als dein Code:

Code:
template<typename value_type>
int setValue(value_type *const pointer, const value_type valueToSet)
{
  static HANDLE currentProcess = GetCurrentProcess();
  unsigned protectionToRestore = 0;
  VirtualProtect(reinterpret_cast<void *>(pointer), sizeof(value_type), PAGE_READWRITE, &protectionToRestore);
  __movsb(reinterpret_cast<void *>(pointer), reinterpret_cast<void *>(&valueToSet), sizeof(value_type));
  VirtualProtect(reinterpret_cast<void *>(pointer), sizeof(value_type), protectionToRestore, nullptr);
  return FlushInstructionCache(currentProcess, reinterpret_cast<void *>(pointer), sizeof(value_type));
}

template<typename value_type>
inline int setValue(void *const pointer, const value_type valueToSet)
{
  return setValue<value_type>(reinterpret_cast<value_type *const>(pointer), valueToSet);
}
Dieser Code ist kürzer und leichter zu verstehen als deiner und durch C++11 sogar leichter zu benutzen, da das Template-Parameter nicht einmal angegeben werden muss sondern der Typ des Parameters automatisch verwendet wird.
Als kleine Randnotiz noch: Du solltest deine Variable "Protection" initialisieren.
Raz9r is offline  
Old 08/15/2012, 19:48   #180
 
Willi35's Avatar
 
elite*gold: 9
Join Date: Oct 2010
Posts: 395
Received Thanks: 812
Quote:
Dazu möchte ich einmal zwei Dinge anmerken:
Template-Funktionen sind in der Objektorientierten Programmierung (nicht "objektiv") in der Art, wie sie in C++ ISO '98 eingebunden sind, ungeeignet.
Danke für deine Berechtigung meiner schreibweiße. Natürlich haben Templates Vorteile, aber auch Nachteile, die bei meinem Menu Aufbau zum Nachteil zieht. Deswegen ich Sie nicht verwende.

Quote:
Dieser Code ist kürzer und leichter zu verstehen als deiner und durch C++11 sogar leichter zu benutzen, da das Template-Parameter nicht einmal angegeben werden muss sondern der Typ des Parameters automatisch verwendet wird.
Als kleine Randnotiz noch: Du solltest deine Variable "Protection" initialisieren.
Da ich objektorientiert Arbeite benutze ich nicht eine höhres Warnlevel und sehe mich nicht dazu gezwungen Sie initialisieren mit NULL. Wenn man auf nativ programmiert sollte man das Warnlevel erhöhen, damit vermeidet man unsälige Fehler.

Quote:
__movsb(reinterpret_cast<void *>(pointer), reinterpret_cast<void *>(&valueToSet), sizeof(value_type));
Dein Code ist zwar schön anzu sehen, aber leider bevorzuge ich die Funktionen, die am "schnellsten" "Arbeiten" und somit memcpy. Natürlich ist dein Source Code voll kommen richtig und bitte nicht als Kritik sehen.
Willi35 is offline  
Closed Thread


Similar Threads Similar Threads
WarRock EU - Code Snippets
07/12/2012 - WarRock - 7490 Replies
Hi Leute, in diesem Thread könnt ihr: -> Nach Sourcecodes fragen(Beispiel unten) -> Eure Sourcecodes posten(Wenn sie nicht von euch sind mit Credits!) -> Fragen ob eure Source evtl. einen Fehler hat -> Fragen was welcher Fehler bedeuted -> Sourcecodes entnehmen(Bitte beim Release dann Credits angeben!)



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


Powered by vBulletin®
Copyright ©2000 - 2026, 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 ©2026 elitepvpers All Rights Reserved.