psybernaut |
03-16-2006 11:06 PM |
Quote:
Originally Posted by Andreas
This assumption is wrong. I will not hand over this hack to someone else.
|
ok... like I said, I'm not looking to step on toes. I'd just like to see this great mod moving forward again :)
geo1 - sorry about that problem, vcash is an unsigned int so it wraps to a large number instead of going negative.
Here's a fix that will set the bookies cash to 0 instead of going negative. NOTE: a bookie can exploit this by putting all their cash in the bank (for vbbux/ebux/ucash) before settling bets, so it's not perfect! This applies to all cash systems, just replace the entire vbookie_take_bookie_cash() function.
In includes/functions_vbookie.php, find:
Code:
// psybernaut mod
function vbookie_take_bookie_cash($userid, $amount)
{
global $vbulletin;
switch ($vbulletin->options['vbookiecash'])
{
case 'vcash':
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET vbookie_cash=vbookie_cash-$amount WHERE userid=$userid");
break;
case 'ucash':
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET ucash=ucash-$amount WHERE userid=$userid");
break;
case 'ebux':
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET ebux=ebux-$amount WHERE userid=$userid");
break;
case 'custom':
($hook = vBulletinHook::fetch_hook('vbookie_take_bookie_cash')) ? eval($hook) : false;
}
}
Replace with:
Code:
// psybernaut mod
function vbookie_take_bookie_cash($userid, $amount)
{
global $vbulletin;
$bookie = $vbulletin->db->query_first("SELECT * FROM " . TABLE_PREFIX . "user WHERE userid=$userid");
switch ($vbulletin->options['vbookiecash'])
{
case 'vcash':
if($amount > $bookie['vbookie_cash'])
{
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET vbookie_cash=0 WHERE userid=$userid");
}
else
{
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET vbookie_cash=vbookie_cash-$amount WHERE userid=$userid");
}
break;
case 'ucash':
if($amount > $bookie['ucash'])
{
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET ucash=0 WHERE userid=$userid");
}
else
{
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET ucash=ucash-$amount WHERE userid=$userid");
}
break;
case 'ebux':
if($amount > $bookie['ebux'])
{
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET ebux=0 WHERE userid=$userid");
}
else
{
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET ebux=ebux-$amount WHERE userid=$userid");
}
break;
case 'custom':
($hook = vBulletinHook::fetch_hook('vbookie_take_bookie_cash')) ? eval($hook) : false;
}
}
If you implemented the hook for vbBux, edit it (the 'vBookie With vbPlaza - Take Bookie Cash' hook) and replace the php code with this:
Code:
// take the bookies money
$bookie = $vbulletin->db->query_first("SELECT * FROM " . TABLE_PREFIX . "user WHERE userid=$userid");
if($amount > $bookie['vbbux'])
{
$amount = $amount - $bookie['vbbux'];
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET vbbux=0 WHERE userid=$userid");
if($amount > $bookie['vbbank'])
{
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET vbbank=0 WHERE userid=$userid");
}
else
{
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET vbbank=vbbank-$amount WHERE userid=$userid");
}
}
else
{
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET vbbux=vbbux-$amount WHERE userid=$userid");
}
Quote:
Originally Posted by geo1
psybernaut:if i'm using vcash,would i still need to carry those other hacks below as well?
|
No. You only need that part if you're using vbBux.
I'll update my original post to include these changes, so only make this change if you already made the mod previously and need to fix the 'paying out more that you have' issue.
EDIT: Updated the vbbux hook to deduct money from the bookie's bank account if they don't have enough cash on hand.
|