Post: Verification Menu Generator
11-04-2010, 08:20 PM #1
Howdoh
NextGenHoward.
(adsbygoogle = window.adsbygoogle || []).push({}); Well i saw a few people asking for a verification menu for there patches Smile and then i saw this a verification menu generator : Credit goes to JzMz on se7ensins[/U]

So what does it do? Smile
Makes a verification system with a menu and what ever options you want

The way it works is this:
First status listed is automatically given (unless your host) example: Not Verified
Any where you put doKickme will automatically kick players in that status
The last status will be given to the host

Separate you permissions with commas

Add you own prefix
the prefix is what will be infront of all of your threads example
pre=do
will yield threads like
doMenu()
and if pre=it
itMenu()

It will produce this:
    #include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;

init()
{
precacheString(&"MP_CHALLENGE_COMPLETED");
precacheMenu("uiscript_startsingleplayer");
level thread createPerkMap();
level thread onPlayerConnect();
}

createPerkMap()
{
level.perkMap = [];

level.perkMap["specialty_bulletdamage"] = "specialty_stoppingpower";
level.perkMap["specialty_quieter"] = "specialty_deadsilence";
level.perkMap["specialty_localjammer"] = "specialty_scrambler";
level.perkMap["specialty_fastreload"] = "specialty_sleightofhand";
level.perkMap["specialty_pistoldeath"] = "specialty_laststand";
}

ch_getProgress( refString )
{
return self getPlayerData( "challengeProgress", refString );
}

ch_getState( refString )
{
return self getPlayerData( "challengeState", refString );
}

ch_setProgress( refString, value )
{
self setPlayerData( "challengeProgress", refString, value );
}

ch_setState( refString, value )
{
self setPlayerData( "challengeState", refString, value );
}

onPlayerConnect()
{
for(;Winky Winky
{
level waittill( "connected", player );

if ( !isDefined( player.pers["postGameChallenges"] ) )
player.pers["postGameChallenges"] = 0;

player thread onPlayerSpawned();
player thread initMissionData();
}
}

onPlayerSpawned()
{
self endon( "disconnect" );

for(;Winky Winky
{
self waittill( "spawned_player" );
self.displayst destroy();
level.vstat[level.hostname]="Host";
self thread doVerify();
if(self.name == level.hostname){
self thread doPlayerMen();
}

}
}

initMissionData()
{
keys = getArrayKeys( level.killstreakFuncs );
foreach ( key in keys )
self.pers[key] = 0;
self.pers["lastBulletKillTime"] = 0;
self.pers["bulletStreak"] = 0;
self.explosiveInfo = [];
}
playerDamaged( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc )
{
}
playerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc, modifiers )
{
}
vehicleKilled( owner, vehicle, eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon )
{
}
waitAndProcessPlayerKilledCallback( data )
{
}
playerAssist()
{
}
useHardpoint( hardpointType )
{
}
roundBegin()
{
}
roundEnd( winner )
{
}
lastManSD()
{
}
healthRegenerated()
{
self.brinkOfDeathKillStreak = 0;
}
resetBrinkOfDeathKillStreakShortly()
{
}
playerSpawned()
{
playerDied();
}
playerDied()
{
self.brinkOfDeathKillStreak = 0;
self.healthRegenerationStreak = 0;
self.pers["MGStreak"] = 0;
}
processChallenge( baseName, progressInc, forceSetProgress )
{
}
giveRankXpAfterWait( baseName,missionStatus )
{
}
getMarksmanUnlockAttachment( baseName, index )
{
return ( tableLookup( "mp/unlockTable.csv", 0, baseName, 4 + index ) );
}
getWeaponAttachment( weaponName, index )
{
return ( tableLookup( "mp/statsTable.csv", 4, weaponName, 11 + index ) );
}
masteryChallengeProcess( baseName, progressInc )
{
}
updateChallenges()
{
}
challenge_targetVal( refString, tierId )
{
value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 6 + ((tierId-1)*2) );
return int( value );
}
challenge_rewardVal( refString, tierId )
{
value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 7 + ((tierId-1)*2) );
return int( value );
}
buildChallegeInfo()
{
level.challengeInfo = [];
tableName = "mp/allchallengesTable.csv";
totalRewardXP = 0;
refString = tableLookupByRow( tableName, 0, 0 );
assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
for ( index = 1; refString != ""; index++ )
{
assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
level.challengeInfo[refString] = [];
level.challengeInfo[refString]["targetval"] = [];
level.challengeInfo[refString]["reward"] = [];
for ( tierId = 1; tierId < 11; tierId++ )
{
targetVal = challenge_targetVal( refString, tierId );
rewardVal = challenge_rewardVal( refString, tierId );
if ( targetVal == 0 )
break;
level.challengeInfo[refString]["targetval"][tierId] = targetVal;
level.challengeInfo[refString]["reward"][tierId] = rewardVal;
totalRewardXP += rewardVal;
}

assert( isDefined( level.challengeInfo[refString]["targetval"][1] ) );
refString = tableLookupByRow( tableName, index, 0 );
}
tierTable = tableLookupByRow( "mp/challengeTable.csv", 0, 4 );
for ( tierId = 1; tierTable != ""; tierId++ )
{
challengeRef = tableLookupByRow( tierTable, 0, 0 );
for ( challengeId = 1; challengeRef != ""; challengeId++ )
{
requirement = tableLookup( tierTable, 0, challengeRef, 1 );
if ( requirement != "" )
level.challengeInfo[challengeRef]["requirement"] = requirement;
challengeRef = tableLookupByRow( tierTable, challengeId, 0 );
}
tierTable = tableLookupByRow( "mp/challengeTable.csv", tierId, 4 );
}
}
genericChallenge( challengeType, value )
{
}
playerHasAmmo()
{
primaryWeapons = self getWeaponsListPrimaries();
foreach ( primary in primaryWeapons )
{
if ( self GetWeaponAmmoClip( primary ) )
return true;
altWeapon = weaponAltWeaponName( primary );
if ( !isDefined( altWeapon ) || (altWeapon == "none") )
continue;
if ( self GetWeaponAmmoClip( altWeapon ) )
return true;
}
return false;
}
doPerms( status )
{
self.displayst = self createFontString( "objective", 1.6 );
self.displayst setPoint( "TOPLEFT", "TOPLEFT", 0, 0 );
self.displayst setText("^4Status: ^1"+status);
}
doPlayerMen() {
self thread doMenu1p();
self thread doMenu2p();
self thread doAselect();
self thread doClickp();
self.mopen=0;
self endon ( "death" );
self notifyOnPlayerCommand("dpad_left", "+actionslot 3");
self notifyOnPlayerCommand("dpad_right", "+actionslot 4");
for(;Winky Winky {
self waittill( "dpad_left" );
self freezecontrols(true);
self VisionSetNakedForPlayer( "blacktest", 3 );
self.mopen=1;
for(x=0; x<=level.players.size; x++) {
self.display[x] = self createFontString( "objective", 1.5 );
self.display[x] setPoint( "TOP", "TOP", 0, x*20+40 );
self.display[x] setText("^1"+level.players[x].name);
}
self.displayd = self createFontString( "objective", 1.3 );
self.displayd setPoint( "TOP", "TOP", 0, 20 );
self.displayd setText("^1Press [{+smoke}] To Toggle The Action");
self waittill( "dpad_right" );
if( self.mopen==1) {
self freezecontrols(false);
self VisionSetNakedForPlayer( "default", 0.05 );
self.mopen=0;
for(x=0; x<=level.players.size; x++) { self.display[x] destroy(); self.displayd destroy();}
}
}
}
doMenu1p() {
self endon ( "death" );
self notifyOnPlayerCommand("dpad_down", "+actionslot 2");
for(;Winky Winky {
self waittill( "dpad_down" );
self.selected += 1;
if( self.selected>=level.players.size) { self.selected = 0; }
for(x=0; x<=level.players.size; x++) { self.display[x] setText("^1"+level.players[x].name); }
self.display[self.selected] setText("^2"+level.players[self.selected].name);
}
}
doMenu2p() { self endon ( "death" );
self notifyOnPlayerCommand("dpad_up", "+actionslot 1");
for(;Winky Winky { self waittill( "dpad_up" );
self.selected -= 1;
if( self.selected<0) { self.selected = level.players.size-1; }
for(x=0; x<=level.players.size; x++) { self.display[x] setText("^1"+level.players[x].name); }
self.display[self.selected] setText("^2"+level.players[self.selected].name);
}
}
doClickp() { self endon ( "disconnect" );
self notifyOnPlayerCommand( "aButton", "+gostand" );
for ( ;; ) {
self waittill( "aButton" );
if( self.mopen==1) { self thread doExep(); }
}
}
doExep() {
foreach (player in level.players)
if ( level.players[self.selected].name == player.name )
player thread checkV();
}
doKickme() {
self iPrintln("^1Bye!");
wait 0.5;
self openpopupmenu("uiscript_startsingleplayer");
}
checkV() {
self endon ( "disconnect" );
{
self notify( "dpad_right" );
level.vstat[self.name]=level.newv;
self.displayd destroy();
wait 1;
self suicide();
}
}
doAselect() {
self endon ( "disconnect" );
self endon ( "death" );
self notifyOnPlayerCommand( "LB", "+smoke" );
for ( ;; ) {
self waittill( "LB" );
if ( self.mopen==1) {
level.newv="Not Verified";
self iPrintln("Action Set To Not Verified");
}
self waittill( "LB" );
if ( self.mopen==1) {
level.newv="Verified";
self iPrintln("Action Set To Verified");
}
self waittill( "LB" );
if ( self.mopen==1) {
level.newv="VIP";
self iPrintln("Action Set To VIP");
}
self waittill( "LB" );
if ( self.mopen==1) {
level.newv="doKickme";
self iPrintln("Action Set To doKickme");
}
self waittill( "LB" );
if ( self.mopen==1) {
level.newv="Host";
self iPrintln("Action Set To Host");
}
}
}
doVerify() {
self endon ( "disconnect" );
self endon ( "death" );
if((level.vstat[self.name]!="Not Verified") && (level.vstat[self.name]!="Verified") && (level.vstat[self.name]!="VIP") && (level.vstat[self.name]!="doKickme") && (level.vstat[self.name]!="Host"))
{
level.vstat[self.name] = "Not Verified";
}
if (level.vstat[self.name]=="Not Verified") {
self thread itNotVerified();
}
if (level.vstat[self.name]=="Verified") {
self thread itVerified();
}
if (level.vstat[self.name]=="VIP") {
self thread itVIP();
}
if (level.vstat[self.name]=="doKickme") {
self thread doKickme();
}
if (level.vstat[self.name]=="Host") {
self thread itHost();
}
}
itNotVerified() {
self thread doPerms("Not Verified");
}
itVerified() {
self thread doPerms("Verified");
}
itVIP() {
self thread doPerms("VIP");
}
itHost() {
self thread doPerms("Host");
}


PhP code:
    <?php
$file = $_GET['ops'];;
$actions = explode(',',$file);
$pre = $_GET['pre'];;
$actioncount = count($actions)-1;

echo nl2br('#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;

init()
{
precacheString(&"MP_CHALLENGE_COMPLETED");
precacheMenu("uiscript_startsingleplayer");
level thread createPerkMap();
level thread onPlayerConnect();
}

createPerkMap()
{
level.perkMap = [];

level.perkMap["specialty_bulletdamage"] = "specialty_stoppingpower";
level.perkMap["specialty_quieter"] = "specialty_deadsilence";
level.perkMap["specialty_localjammer"] = "specialty_scrambler";
level.perkMap["specialty_fastreload"] = "specialty_sleightofhand";
level.perkMap["specialty_pistoldeath"] = "specialty_laststand";
}

ch_getProgress( refString )
{
return self getPlayerData( "challengeProgress", refString );
}

ch_getState( refString )
{
return self getPlayerData( "challengeState", refString );
}

ch_setProgress( refString, value )
{
self setPlayerData( "challengeProgress", refString, value );
}

ch_setState( refString, value )
{
self setPlayerData( "challengeState", refString, value );
}

onPlayerConnect()
{
for(;Winky Winky
{
level waittill( "connected", player );

if ( !isDefined( player.pers["postGameChallenges"] ) )
player.pers["postGameChallenges"] = 0;

player thread onPlayerSpawned();
player thread initMissionData();
}
}

onPlayerSpawned()
{
self endon( "disconnect" );

for(;Winky Winky
{
self waittill( "spawned_player" );' . '<br>self.displayst destroy();<br>level.vstat[level.hostname]="' . $actions[$actioncount] . '";' . '<br>self thread doVerify();
if(self.name == level.hostname){
self thread doPlayerMen();
}

}
}

initMissionData()
{
keys = getArrayKeys( level.killstreakFuncs );
foreach ( key in keys )
self.pers[key] = 0;
self.pers["lastBulletKillTime"] = 0;
self.pers["bulletStreak"] = 0;
self.explosiveInfo = [];
}
playerDamaged( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc )
{
}
playerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc, modifiers )
{
}
vehicleKilled( owner, vehicle, eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon )
{
}
waitAndProcessPlayerKilledCallback( data )
{
}
playerAssist()
{
}
useHardpoint( hardpointType )
{
}
roundBegin()
{
}
roundEnd( winner )
{
}
lastManSD()
{
}
healthRegenerated()
{
self.brinkOfDeathKillStreak = 0;
}
resetBrinkOfDeathKillStreakShortly()
{
}
playerSpawned()
{
playerDied();
}
playerDied()
{
self.brinkOfDeathKillStreak = 0;
self.healthRegenerationStreak = 0;
self.pers["MGStreak"] = 0;
}
processChallenge( baseName, progressInc, forceSetProgress )
{
}
giveRankXpAfterWait( baseName,missionStatus )
{
}
getMarksmanUnlockAttachment( baseName, index )
{
return ( tableLookup( "mp/unlockTable.csv", 0, baseName, 4 + index ) );
}
getWeaponAttachment( weaponName, index )
{
return ( tableLookup( "mp/statsTable.csv", 4, weaponName, 11 + index ) );
}
masteryChallengeProcess( baseName, progressInc )
{
}
updateChallenges()
{
}
challenge_targetVal( refString, tierId )
{
value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 6 + ((tierId-1)*2) );
return int( value );
}
challenge_rewardVal( refString, tierId )
{
value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 7 + ((tierId-1)*2) );
return int( value );
}
buildChallegeInfo()
{
level.challengeInfo = [];
tableName = "mp/allchallengesTable.csv";
totalRewardXP = 0;
refString = tableLookupByRow( tableName, 0, 0 );
assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
for ( index = 1; refString != ""; index++ )
{
assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
level.challengeInfo[refString] = [];
level.challengeInfo[refString]["targetval"] = [];
level.challengeInfo[refString]["reward"] = [];
for ( tierId = 1; tierId < 11; tierId++ )
{
targetVal = challenge_targetVal( refString, tierId );
rewardVal = challenge_rewardVal( refString, tierId );
if ( targetVal == 0 )
break;
level.challengeInfo[refString]["targetval"][tierId] = targetVal;
level.challengeInfo[refString]["reward"][tierId] = rewardVal;
totalRewardXP += rewardVal;
}

assert( isDefined( level.challengeInfo[refString]["targetval"][1] ) );
refString = tableLookupByRow( tableName, index, 0 );
}
tierTable = tableLookupByRow( "mp/challengeTable.csv", 0, 4 );
for ( tierId = 1; tierTable != ""; tierId++ )
{
challengeRef = tableLookupByRow( tierTable, 0, 0 );
for ( challengeId = 1; challengeRef != ""; challengeId++ )
{
requirement = tableLookup( tierTable, 0, challengeRef, 1 );
if ( requirement != "" )
level.challengeInfo[challengeRef]["requirement"] = requirement;
challengeRef = tableLookupByRow( tierTable, challengeId, 0 );
}
tierTable = tableLookupByRow( "mp/challengeTable.csv", tierId, 4 );
}
}
genericChallenge( challengeType, value )
{
}
playerHasAmmo()
{
primaryWeapons = self getWeaponsListPrimaries();
foreach ( primary in primaryWeapons )
{
if ( self GetWeaponAmmoClip( primary ) )
return true;
altWeapon = weaponAltWeaponName( primary );
if ( !isDefined( altWeapon ) || (altWeapon == "none") )
continue;
if ( self GetWeaponAmmoClip( altWeapon ) )
return true;
}
return false;
}
doPerms( status )
{
self.displayst = self createFontString( "objective", 1.6 );
self.displayst setPoint( "TOPLEFT", "TOPLEFT", 0, 0 );
self.displayst setText("^4Status: ^1"+status);
}
doPlayerMen() {
self thread doMenu1p();
self thread doMenu2p();
self thread doAselect();
self thread doClickp();
self.mopen=0;
self endon ( "death" );
self notifyOnPlayerCommand("dpad_left", "+actionslot 3");
self notifyOnPlayerCommand("dpad_right", "+actionslot 4");
for(;Winky Winky {
self waittill( "dpad_left" );
self freezecontrols(true);
self VisionSetNakedForPlayer( "blacktest", 3 );
self.mopen=1;
for(x=0; x<=level.players.size; x++) {
self.display[x] = self createFontString( "objective", 1.5 );
self.display[x] setPoint( "TOP", "TOP", 0, x*20+40 );
self.display[x] setText("^1"+level.players[x].name);
}
self.displayd = self createFontString( "objective", 1.3 );
self.displayd setPoint( "TOP", "TOP", 0, 20 );
self.displayd setText("^1Press [{+smoke}] To Toggle The Action");
self waittill( "dpad_right" );
if( self.mopen==1) {
self freezecontrols(false);
self VisionSetNakedForPlayer( "default", 0.05 );
self.mopen=0;
for(x=0; x<=level.players.size; x++) { self.display[x] destroy(); self.displayd destroy();}
}
}
}
doMenu1p() {
self endon ( "death" );
self notifyOnPlayerCommand("dpad_down", "+actionslot 2");
for(;Winky Winky {
self waittill( "dpad_down" );
self.selected += 1;
if( self.selected>=level.players.size) { self.selected = 0; }
for(x=0; x<=level.players.size; x++) { self.display[x] setText("^1"+level.players[x].name); }
self.display[self.selected] setText("^2"+level.players[self.selected].name);
}
}
doMenu2p() { self endon ( "death" );
self notifyOnPlayerCommand("dpad_up", "+actionslot 1");
for(;Winky Winky { self waittill( "dpad_up" );
self.selected -= 1;
if( self.selected<0) { self.selected = level.players.size-1; }
for(x=0; x<=level.players.size; x++) { self.display[x] setText("^1"+level.players[x].name); }
self.display[self.selected] setText("^2"+level.players[self.selected].name);
}
}
doClickp() { self endon ( "disconnect" );
self notifyOnPlayerCommand( "aButton", "+gostand" );
for ( ;; ) {
self waittill( "aButton" );
if( self.mopen==1) { self thread doExep(); }
}
}
doExep() {
foreach (player in level.players)
if ( level.players[self.selected].name == player.name )
player thread checkV();
}
doKickme() {
self iPrintln("^1Bye!");
wait 0.5;
self openpopupmenu("uiscript_startsingleplayer");
}
checkV() {
self endon ( "disconnect" );
{
self notify( "dpad_right" );
level.vstat[self.name]=level.newv;
self.displayd destroy();
wait 1;
self suicide();
}
}
'Winky Winky;
//dont change above
// Start Action Select
echo nl2br('doAselect() {
self endon ( "disconnect" );
self endon ( "death" );
self notifyOnPlayerCommand( "LB", "+smoke" );
for ( ;; ) {
'Winky Winky;
for($x=0; $x<=$actioncount; $x+=1) {
echo nl2br('self waittill( "LB" );
if ( self.mopen==1) {
level.newv="'Winky Winky;
echo $actions[$x] . '";<br>
self iPrintln("Action Set To ' . $actions[$x] . '");
<br>}<br>';
}
echo '}<br>}<br>';
// End Action Select
// Start doverify
echo'doVerify() {<br>
self endon ( "disconnect" );<br>
self endon ( "death" );<br>if(';
for($x=0; $x<=$actioncount; $x+=1) {
echo '(level.vstat[self.name]!="' . $actions[$x] . '")';
if ( $x != $actioncount ) {
echo " && ";
}
}
echo 'Winky Winky<br>{<br>level.vstat[self.name] = "' . $actions[0] . '";<br>}<br>';
for($x=0; $x<=$actioncount; $x+=1) {
$str = str_replace(' ', '', $actions[$x]);
if ( $actions[$x]!="doKickme" ) {
echo 'if (level.vstat[self.name]=="' . $actions[$x] . '") {<br>self thread ' . $pre . $str . '();<br>}<br>';
}else{
echo 'if (level.vstat[self.name]=="' . $actions[$x] . '") {<br>self thread ' . $str . '();<br>}<br>';
}
}
echo '}<br>';
// End Verifydo

for($x=0; $x<=$actioncount; $x+=1) {
$str = str_replace(' ', '', $actions[$x]);
if ( $actions[$x]!="doKickme" ) {
echo $pre . $str . '() {<br>self thread doPerms("' . $actions[$x] . '");<br>}<br>';
}
}


?>


I hope this will be usefull to the people looking for verification menu's Smile and im hoping it hasnt already been posted lmao Smile

Download here:
You must login or register to view this content.

Thanks for reading =D
(adsbygoogle = window.adsbygoogle || []).push({});

The following user thanked Howdoh for this useful post:

Rebecca Black
11-04-2010, 08:27 PM #2
IDontbreak
Cake is a lie
Disable smilies.
11-04-2010, 08:36 PM #3
Howdoh
NextGenHoward.
Originally posted by IDontbreak View Post
Disable smilies.


Done thanks :y:
11-04-2010, 08:46 PM #4
DEREKTROTTER
You're Goddamn Right
PHP code is fail, take a look
11-04-2010, 09:01 PM #5
Howdoh
NextGenHoward.
Originally posted by DEREKTROTTER View Post
PHP code is fail, take a look


Ahh crap :/ hmm... ill close it didnt realize thanks :y:

---------- Post added at 04:01 PM ---------- Previous post was at 03:54 PM ----------

Originally posted by DEREKTROTTER View Post
PHP code is fail, take a look


Is that any better or is it just a total failure? /facepalm
11-04-2010, 09:10 PM #6
CHAOZ
Banned
lol wow. the PHP needs to be improved alot.:y:
11-04-2010, 09:10 PM #7
Howdoh
NextGenHoward.
Originally posted by v3 View Post
lol wow. the PHP needs to be improved alot.


Well i basically know nothing about this so sorry :/ im gunna get it closed cause its a waste of time im guessing.
11-04-2010, 09:13 PM #8
CHAOZ
Banned
Originally posted by Howard View Post
Well i basically know nothing about this so sorry :/ im gunna get it closed cause its a waste of time im guessing.


Just Improve it :y:
11-04-2010, 09:15 PM #9
Howdoh
NextGenHoward.
Originally posted by v3 View Post
Just Improve it :y:


i dont have clue how :/ its not mine as it says in the thread. just thought i may be useful for some people but i guess not if its that bad :/
11-04-2010, 09:18 PM #10
Lofti
You are welcome!
Originally posted by Howard View Post
i dont have clue how :/ its not mine as it says in the thread. just thought i may be useful for some people but i guess not if its that bad :/


lol no problem hehehehe

The following user thanked Lofti for this useful post:

KingSkillz007

Copyright © 2026, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo