vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 3.0 Full Releases (https://vborg.vbsupport.ru/forumdisplay.php?f=33)
-   -   V3Arcade - Pay for Play (Permissions Based) (https://vborg.vbsupport.ru/showthread.php?t=75026)

Dechevious 01-23-2005 10:00 PM

V3Arcade - Pay for Play (Permissions Based)
 
What this hack does and how it operates:

This hack was requested by Detomah (and a substantial number of others over the years) which will allow you, the admin, to control the number of games that can be played, based on the users access permission level.

The concept/design/installation of this mod is quite simple.

Example:

Usergroup A: You assign how many 'credits' they are assigned.
Usergroup B: You assign how many 'credits' they are assigned.

Lets say you set the default 'credits' to 50 for Usergroup A
Lets say you set the default 'credits' to 100 for Usergroup B

The cost to play 1 game is 1 credit.

1 Game Play is defined when the user selects the game to play and it loads. (Not when it submits a score, as he could play, and simply not submit, thus cheating by not recording his play).

When a user selects the game he wishes to play, a check is made to see if his access level can play. If no, hes given the standard no permission page. If yes, another check is made to get the users access level credit quota, then compares it wiith how many gameplays the user has remaining. If the user has the credits, 1 will be deducted, and the game will load for play. If he has no remaining credits, he will be given the 'You have no more play credits page'. (A simple match equation).

You could create a 'Cost per Game' if you really wanted to, but in this progammers eyes, its more trouble then its actually worth. It wouldnt take much to implement this to work in that fashion.

Likewise, you could change a variable or two, to allow it to work with any of the existing 'Point Systems' which you currently have in place. I dont use any of them, but its also easily done.

This mod is more or less for those who want to offer their user a 'Premium' access level package. Each premium access level would allow them additional game play credits.

Now for the hack:

QUERIES TO BE RUN: (Dont forget to add your prefix if needed)

Code:

ALTER TABLE user ADD COLUMN totalplays smallint(5) unsigned NOT NULL default '0';

ALTER TABLE usergroup ADD COLUMN playquota smallint(5) unsigned NOT NULL default '0';

IN FILE: arcade.php FIND:

Code:

// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array();

DIRECTLY BELOW IT ADD:

Code:

$gameplaysremaining = $permissions['playquota'] - $bbuserinfo['totalplays'];
FIND:

Code:

// ############################ PLAY PAGE ################################
if ($_GET['do']=="play") {

        // pre-cache templates used by all actions
        $globaltemplates = array(
                'ARCADE',
                'arcade_header',
                'arcade_play'
        );
        require_once('./global.php');
        require_once('./includes/functions_user.php');
        require_once('./includes/functions_arcade.php');

DIRECTLY BELOW IT ADD:

Code:

// ### PAY FOR PLAY MOD BY DECHEVIOUS - BEGIN

if ($bbuserinfo['totalplays'] > $permissions['playquota'] OR ($bbuserinfo['totalplays'] == $permissions['playquota']))
{
eval(print_standard_error('error_yourplayquotaexceeded'));
}

$addaplay = $bbuserinfo['totalplays'];
$addaplay = $addaplay + 1;
$DB_site->query("UPDATE " . TABLE_PREFIX . "user SET totalplays='$addaplay' WHERE userid = $bbuserinfo[userid]");

// ### PAY FOR PLAY MOD BY DECHEVIOUS - END

SAVE YOUR FILE - EDITS ARE COMPLETE - MOVE ONTO NEXT STEP.

IN FILE: admin/usergroup.php FIND:

Code:

'pmquota' => 0, 'pmsendmax' => 5, 'attachlimit' => 1000000,
REPLACE IT WITH:

Code:

'pmquota' => 0, 'playquota' => 0, 'pmsendmax' => 5, 'attachlimit' => 1000000,
FIND:

Code:

print_yes_no_row("Can Delete Leaderboard Scores? <dfn>Allows usergroup to delete scores and comments left by other members</dfn>", 'usergroup[candelscores]', $ug_bitfield['candelscores']);
DIRECTLY UNDER IT ADD:

Code:

print_input_row("How many Game Credits are allowed ? <dfn>You can restrict user to how many games he can play in the arcade</dfn>", 'usergroup[playquota]', $usergroup['playquota'], 1, 20);
SAVE YOUR FILE - EDITS ARE COMPLETE - MOVE ONTO NEXT STEP.

IN FILE: admin/user.php FIND:

Code:

$display = array('username' => 1, 'options' => 1, 'email' => 1, 'joindate' => 1, 'lastvisit' => 1, 'posts' => 1);
REPLACE IT WITH:

Code:

$display = array('username' => 1, 'options' => 1, 'email' => 1, 'joindate' => 1, 'lastvisit' => 1, 'posts' => 1, 'totalplays' => 1);
FIND:

Code:

$searchquery = "
                SELECT
                user.userid, reputation, username, usergroupid, birthday_search, email,
                parentemail,(options & $_USEROPTIONS[coppauser]) AS coppauser, homepage, icq, aim, yahoo, msn, signature,
                usertitle, joindate, lastvisit, lastpost, posts, ipaddress, userfield.*
                FROM " . TABLE_PREFIX . "user AS user
                LEFT JOIN " . TABLE_PREFIX . "userfield AS userfield ON(userfield.userid = user.userid)
                LEFT JOIN " . TABLE_PREFIX . "usertextfield AS usertextfield ON(usertextfield.userid = user.userid)
                WHERE $condition
                ORDER BY $orderby $direction
                LIMIT $limitstart, $limitnumber
        ";

REPLACE IT WITH:

Code:

$searchquery = "
                SELECT
                user.userid, reputation, username, usergroupid, birthday_search, email,
                parentemail,(options & $_USEROPTIONS[coppauser]) AS coppauser, homepage, icq, aim, yahoo, msn, signature,
                usertitle, joindate, lastvisit, lastpost, posts, totalplays, ipaddress, userfield.*
                FROM " . TABLE_PREFIX . "user AS user
                LEFT JOIN " . TABLE_PREFIX . "userfield AS userfield ON(userfield.userid = user.userid)
                LEFT JOIN " . TABLE_PREFIX . "usertextfield AS usertextfield ON(usertextfield.userid = user.userid)
                WHERE $condition
                ORDER BY $orderby $direction
                LIMIT $limitstart, $limitnumber
        ";

FIND:

Code:

print_input_row($vbphrase['post_count'], 'user[posts]', $user['posts']);
DIRECTLY BELOW IT ADD:

Code:

print_input_row("Total Games Played", 'user[totalplays]', $user['totalplays']);
FIND:

Code:

$user['posts'] = intval($user['posts']);
DIRECTLY BELOW IT ADD:

Code:

$user['totalplays'] = intval($user['totalplays']);
FIND:

Code:

print_yes_no_row($vbphrase['display_post_count'], 'display[posts]', 1);
DIRECTLY BELOW IT ADD:

Code:

print_yes_no_row("Total Arcade Plays", 'display[totalplays]',1);
FIND:

Code:

if ($display['posts'])
        {
                $header[] = $vbphrase['post_count'];
        }

DIRECTLY BELOW IT ADD:

Code:

if ($display['totalplays'])
        {
                $header[] = $vbphrase['total_plays'];
        }

FIND:

Code:

if ($display['posts'])
                {
                        $cell[] = vb_number_format($user['posts']);
                }

DIRECTLY BELOW IT ADD:

Code:

if ($display['totalplays'])
                {
                        $cell[] = vb_number_format($user['totalplays']);
                }

SAVE YOUR FILE - EDITS ARE COMPLETE - MOVE ONTO NEXT STEP.

Goto Phrase Manager, Add a Phrase.

"Front-End Error Messages"

Varname: yourplayquotaexceeded

TEXT:

Code:

You have reached the limit of arcade credits which is assigned to your usergroup. You can obtain more play credits <a href="http://whateveryouwantittogotohere.com">Here</a> or by contacting the system admin.
Add another Phrase, this time in "GLOBAL Phrases".

Varname: total_plays

TEXT: Total Games Played

IN TEMPLATE: arcade_header FIND:

Code:

|  <a href="arcade.php?do=challenges">Challenges</a> |
CHANGE IT TO: (note this line above may vary, dependant on which hacks you already have installed)

Code:

|  <a href="arcade.php?do=challenges">Challenges</a> | You can play $gameplaysremaining more Games
Save everything, upload your files, whamo, presto, changeo, your done. Now goto your admincp and assign the number of play credits each user group is allowed, and your ready to roll.

Enjoy! (Screen shots are attached)

Polo 01-24-2005 08:39 PM

sounds interesting thanks for sharing Dechevious

PixelFx 01-25-2005 01:09 AM

Quote:

Originally Posted by Polo
sounds interesting thanks for sharing Dechevious

Sounds neat, can someone add a ushop / ucash action for this?

T3MEDIA 01-25-2005 02:05 AM

Sooo lets get this straight.. I am part of Usergroup b.... I run out of credits... does it put me back into usergroup again?

Dechevious 01-25-2005 02:50 AM

Quote:

Originally Posted by T3MEDIA
Sooo lets get this straight.. I am part of Usergroup b.... I run out of credits... does it put me back into usergroup again?

This hack does not do that. When your out, your out. You could assign a default usergroup to be placed into once that does occur, with some minor modifications.

T3MEDIA 01-25-2005 03:46 AM

Quote:

Originally Posted by Dechevious
This hack does not do that. When your out, your out. You could assign a default usergroup to be placed into once that does occur, with some minor modifications.

Sorry I see I made a typo. I ment...
If I am part of Usergroup B... 100 credits.
I run out.
Will I go back to Usergroup A who all have 0 credits.
or will I just be Usergroup B with no money.

Dechevious 01-25-2005 05:02 AM

Quote:

Originally Posted by T3MEDIA
Sorry I see I made a typo. I ment...If I am part of Usergroup B... 100 credits. I run out. Will I go back to Usergroup A who all have 0 credits.
or will I just be Usergroup B with no money.

With the hack as is, you will just be out of credits, and thats the end of it until you do whatever is required by the admin, to get more credits. Your access level will not change.

HOWEVER - Just for you my friend, I have created the following addon which which allow you to do just that!

Updated: 01-25-2005 - The following is an 'Add On' mod which will allow you to define a default usergroup that the user will be placed into, once he has used up all of his game plays. This will remove the user from his/her 'premium' access level and place them into a 'normal' access level that you define in your usergroup manager. Further, it will reset his credit level (IE: totalplays) back to 0. In doing so, it makes it much easier for that user to resubscribe, and regain instant access via subscription.

This 'Add-On' assumes you have already installed the hack, as is, above.

Run the following Query to set the field in your SQL DB - Dont forget to add your prefix if needed:

Code:

ALTER TABLE usergroup ADD COLUMN expiretousergroupid smallint(5) unsigned NOT NULL default '0';
IN FILE: admin/undergroup.php FIND:

Code:

'pmquota' => 0, 'playquota' => 0, 'pmsendmax' => 5, 'attachlimit' => 1000000,
REPLACE IT WITH THE FOLLOWING:

Code:

'pmquota' => 0, 'playquota' => 0, 'expiretousergroupid' => 0, 'pmsendmax' => 5, 'attachlimit' => 1000000,
FIND:

Code:

print_input_row("How many Games can they Play ? <dfn>You can restrict them to how many games they can play in the arcade</dfn>", 'usergroup[playquota]', $usergroup['playquota'], 1, 20);
DIRECTLY BELOW IT ADD:

Code:

print_chooser_row("What usergroup is assigned when all plays are used ? <dfn>This will become their new DEFAULT usergroup.</dfn>" , 'usergroup[expiretousergroupid]', 'usergroup', $usergroup['expiretousergroupid']);
        if (!empty($user['membergroupids']))
        {
                $usergroupids = $user['usergroupid'] . (!empty($user['membergroupids']) ? ',' . $user['membergroupids'] : '');
                print_chooser_row($vbphrase['display_usergroup'], 'user[displaygroupid]', 'usergroup', iif($user['displaygroupid'] == 0, -1, $user['displaygroupid']), $vbphrase['default'], 0, "WHERE usergroupid IN ($usergroupids)");
        }
        $tempgroup = $user['usergroupid'];
        $user['usergroupid'] = 0;

Save the File, Upload it and move onto the next step.

IN FILE: arcade.php FIND:

Code:

if ($bbuserinfo['totalplays'] > $permissions['playquota'] OR ($bbuserinfo['totalplays'] == $permissions['playquota']))
{

DIRECTLY BELOW THIS ADD:

Code:

$expirestogroup = $permissions['expiretousergroupid'];
$DB_site->query("UPDATE " . TABLE_PREFIX . "user SET usergroupid='$expirestogroup', totalplays=0 WHERE userid = $bbuserinfo[userid]");

Save the File, Upload it. All modifications are now complete!

Make sure you now also define the default access level the user will be placed in once his game plays are complete.

I updated the usergroupmanager.gif thumbnail as well, in this post.

Enjoy!

Regs 01-25-2005 01:38 PM

Is this any different that the Arcade Pass hack?

Can't the same thing be done by using that in combination with the built-in uShop action 'buy usergroup access'?

Dechevious 01-25-2005 02:37 PM

Quote:

Originally Posted by Regs
Is this any different that the Arcade Pass hack?

Can't the same thing be done by using that in combination with the built-in uShop action 'buy usergroup access'?

Yes, its different than the arcade pass hack.

I dont use the ushop to know that it is, and or is not, capable of doing what this hack does. However, if uShop can specify that a -usergroup- can play 'x' number of games, and maintain those rights, while also removing those rights when the quota has been met, then perhaps it can do similarly the same thing. You would need to ask that hacks author for those details. I've never been partial to using an external program, to work with another. I find it best to code it when needed, where needed, as needed, for the even keeled flow and operation.

T3MEDIA 01-25-2005 07:32 PM

Quote:

Originally Posted by Dechevious
This hack does not do that. When your out, your out. You could assign a default usergroup to be placed into once that does occur, with some minor modifications.

awsome huck up. SO I KNOW you have a LOT of hacks in your arcade.php it woked no problem right?

Here is a tiny thing though. can you make your hack put them back into the usergroup they were last in.

Reason. I have promotions. I dont want to assume a user was in C when they was really in A. and B is the good credits usergroup.

last question...
can this be done never tired so I learned ask frist.

Priamary is Reg user. call it A
secondary is b arcade pass
scondayr is c call is hummm girls on the site.

see where I am getting at? I would like this hack to work off secondary groups so the priamary stays the same. that could fix my promotions issue.
however IF they are in the b group its like a bonus.

let me know if it can even be done.

PS would be nice to have a out of credits page. that would be insane if your using paypal addicted users would really get into that.


All times are GMT. The time now is 05:11 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01122 seconds
  • Memory Usage 1,810KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (33)bbcode_code_printable
  • (6)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (2)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (10)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete