Raised This Month: $32 Target: $400
 8% 

Solved Betting system to database


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
4ever16
Veteran Member
Join Date: Apr 2015
Old 06-08-2019 , 09:28   Betting system to database
Reply With Quote #1

Can someone make a betting system which sends data to database?

- Only spectators can bet.
- Bet is only active for 20 seconds.
- Spectators gets a message at round start. Bet on the winner write (BET T or BET CT)
- After bet is made server prints (YOU BET ON T)
- When bet is done you cannot change your bet even if retry or reconnect is made.

- In database: Steam id / Bets won / bets lost

Commands: bet CT & bet T

Something simular to this (bet.amxx): https://forums.alliedmods.net/showthread.php?p=1060370

Last edited by 4ever16; 12-31-2019 at 00:24.
4ever16 is offline
4ever16
Veteran Member
Join Date: Apr 2015
Old 06-21-2019 , 06:30   Re: Betting system to database.
Reply With Quote #2

BUMP!
4ever16 is offline
instinctpt1
Senior Member
Join Date: Dec 2016
Location: Chandigarh, India
Old 06-23-2019 , 02:14   Re: Betting system to database.
Reply With Quote #3

I remember miki made a plugin somewhat like this and i posted that on my forum
Here is a link to my forum CDN : http://cdn2.navaitech.com/index.php?...menu-plugin.8/

PHP Code:
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>

#define VERSION "1.0"

#define RatioWin        2.0    // Set winning Ratio Here

enum _:eTeamBets    {    NONE 0,    T,    CT    };
new 
szBetsMoney[ ] = {    100,    250,    500,    1000,    2500,    5000    };
new 
szTeamName[eTeamBets][ ] = {    "No One",    "Terror",    "Counter"    };

new 
szBetsMoneyID[33], iBetsTeam[33], bool:bSetBest[33] = false;
new 
g_iMaxPlayers;

public 
plugin_init()
{
    
register_plugin
    
(
        
"Server BETS",
        
VERSION,
        
"Mi-Ki"
    
);
    
    
RegisterHam(Ham_Killed,    "player",    "HamHook_Player_Killed",    true);
    
    
register_event("SendAudio""EventHook_TWin",    "a",    "2&%!MRAD_terwin");
    
register_event("SendAudio""EventHook_CtWin",    "a",    "2&%!MRAD_ctwin");
    
register_event("TextMsg",    "EventHook_RoundEnd",    "a",    "2&#Game_C""2&#Game_w""2&#Game_will_restart_in");
    
    
g_iMaxPlayers get_maxplayers();
    
    
register_clcmd("say /bet""Bet_ShowMenu", -1"Open bets menu");
}

public 
HamHook_Player_Killed(const iVictim)
{
    if (!
is_user_connected(iVictim))
        return 
HAM_IGNORED;
    
    
ChatColor(iVictim"!y[!gServer BET!y] say !g/bet !yin chat To Place a Bet");
    
    return 
HAM_IGNORED;
}

public 
EventHook_TWin()        EndRound(T);
public 
EventHook_CtWin()    EndRound(CT);
public 
EventHook_RoundEnd()    EndRound(NONE);

public 
Bet_ShowMenu(const iPlayer)
{
    if (
Check_1x1())
    {
        
ChatColor(iPlayer"!y[!gServer BET!y] Bets Have Been Placed ; Wait for End");
        return 
PLUGIN_HANDLED;
    }
    
    if (
is_user_alive(iPlayer))
    {
        
ChatColor(iPlayer"!y[!gServer BET!y] Only Deads can Bet :D");
        return 
PLUGIN_HANDLED;
    }
    
    new 
Buffer[256], MenuID;
    
formatex(Buffercharsmax(Buffer),
        
"\y[\wServer BETTING SYSTEM\y] ^n\yYour Balance: \w[\r%i$\w]^n\yBet Rates: \w[\r%i$\w]^n\ySelect Team: \w[\r%s\w]",
        
cs_get_user_money(iPlayer), szBetsMoneyszBetsMoneyID[iPlayer] ], szTeamName[iBetsTeam[iPlayer]]);
    
    
MenuID menu_create(Buffer"BetsHandler");
    
    
menu_additem(MenuID"Terror""1");
    
menu_additem(MenuID"Counter""2");    
    
menu_additem(MenuID"Change Amount""3");
    
    
formatex(Buffercharsmax(Buffer), "%s"bSetBest[iPlayer] ? "*\d You have Already Placed a Bet" "=> \yPlace \rBet");
    
menu_additem(MenuIDBuffer"4");
    
    
menu_setprop(MenuIDMPROP_EXITNAME"Exit");    
    
menu_display(iPlayerMenuID0);
    
    return 
PLUGIN_HANDLED;
}

public 
BetsHandler(const iPlayer, const iMenu, const iItem)
{
    if(
iItem == MENU_EXIT)
    {
        
menu_destroy(iMenu);
        return 
PLUGIN_HANDLED;
    }
    
    if (
bSetBest[iPlayer])
    {
        
ChatColor(iPlayer"!y[!gServer BET!y] You have Already Placed a Bet");
        return 
PLUGIN_HANDLED;
    }
    
    new 
szData[6], szName[64], iCallbackiAccesiKey;
    
menu_item_getinfo(iMenuiItemiAccesszDatacharsmax(szData), szNamecharsmax(szName), iCallback);
    
iKey str_to_num(szData);
    
    switch (
iKey)
    {
        case 
1:    iBetsTeam[iPlayer] = T;
        case 
2iBetsTeam[iPlayer] = CT;
        case 
3:
        {
            new 
iTemp szBetsMoneyID[iPlayer] += 1;
            
szBetsMoneyID[iPlayer] = ( iTemp charsmax(szBetsMoney) ) ? iTemp;
        }
        case 
4:
        {
            if (
iBetsTeam[iPlayer] < || iBetsTeam[iPlayer] > CT)
            {
                
ChatColor(iPlayer"!y[!gServer BET!y] Select a Team first");
                
Bet_ShowMenu(iPlayer);
                return 
PLUGIN_HANDLED;
            }
            
            if (
cs_get_user_money(iPlayer) < szBetsMoneyszBetsMoneyID[iPlayer] ])
            {
                
ChatColor(iPlayer"!y[!gServer BET!y] Dont have Enough Money");
                
Bet_ShowMenu(iPlayer);
                return 
PLUGIN_HANDLED;
            }
            
            
bSetBest[iPlayer] = true;
            
ChatColor(iPlayer"!y[!gServer BET!y] The Bet is Made: !team%i!g$ !yon!team%s"szBetsMoneyszBetsMoneyID[iPlayer] ], szTeamName[iBetsTeam[iPlayer]]);
        }
    }
    
    
menu_destroy(iMenu);
    
    
Bet_ShowMenu(iPlayer);
    
    return 
PLUGIN_HANDLED;
}

public 
EndRound(const iWinTeam)
{
    for(new 
iPlayer 1iPlayer <= g_iMaxPlayersiPlayer++)
    {
        if (
bSetBest[iPlayer])
        {
            new 
iMoney cs_get_user_money(iPlayer);
            
            if (
iWinTeam == NONE)
            {
                
ChatColor(iPlayer"!y[!gServer BET!y] You WON");
            }
            else if (
iBetsTeam[iPlayer] == iWinTeam)
            {
                new 
iAward floatround(szBetsMoneyszBetsMoneyID[iPlayer] ] * RatioWin);
                
cs_set_user_money(iPlayeriMoney iAward);
                
ChatColor(iPlayer"!y[!gServer BET!y] Your Winnings are: !team%i!g$"iAward);
            }
            else if (
iBetsTeam[iPlayer] != iWinTeam)
            {
                
cs_set_user_money(iPlayeriMoney szBetsMoneyszBetsMoneyID[iPlayer] ]);
                
ChatColor(iPlayer"!y[!gServer BET!y] Your !teamLost!y. Better Luck next Time ;)");
            }
        }
        
        
bSetBest[iPlayer] = false;
        
iBetsTeam[iPlayer] = NONE;
        
szBetsMoneyID[iPlayer] = NONE;
    }
}

public 
client_authorized(iPlayer)
{
    
bSetBest[iPlayer] = false;
    
iBetsTeam[iPlayer] = NONE;
    
szBetsMoneyID[iPlayer] = NONE;
}

#if AMXX_VERSION_NUM < 183
public client_disconnect(iPlayer){
#else
public client_disconnected(iPlayer){
#endif

    
bSetBest[iPlayer] = false;
    
iBetsTeam[iPlayer] = NONE;
    
szBetsMoneyID[iPlayer] = NONE;
}

stock bool:Check_1x1()
{
    new 
iNum[2];
    for(new 
iPlayer 1iPlayer <= g_iMaxPlayersiPlayer++)
    {
        if(!
is_user_connected(iPlayer) || !is_user_alive(iPlayer))    continue;
        
        switch(
get_user_team(iPlayer))
        {
            case 
1: ++iNum[0];
            case 
2: ++iNum[1];
        }
    }
    
    if((
iNum[0] == 1) && (iNum[1] == 1))
        return 
true;
    
    return 
false;
}

stock ChatColor(const iPlayer,  const szInput[],  any:...)
{
    new 
iCount 1szPlayers[32];
    static 
szMessage[191];
    
    
vformat(szMessagecharsmax(szMessage), szInput3);
    
    
replace_all(szMessagecharsmax(szMessage), "!g""^4");    // Green Color
    
replace_all(szMessagecharsmax(szMessage), "!y""^1");    // Default Color
    
replace_all(szMessagecharsmax(szMessage), "!team""^3");    // Team Color
    
replace_all(szMessagecharsmax(szMessage), "!team2""^0");    // Team2 Color
    
    
if(iPlayerszPlayers[0] = iPlayer; else get_players(szPlayersiCount"ch");
    {
        for(new 
0iCounti++)
        {
            if(!
is_user_connected(szPlayers[i]))    continue;
            
            static 
g_MsgSayText;
            if(
g_MsgSayText || (g_MsgSayText get_user_msgid("SayText")))
            {
                
message_begin(MSG_ONE_UNRELIABLEg_MsgSayText_szPlayers[i]);
                
write_byte(szPlayers[i]);
                
write_string(szMessage);
                
message_end();
            }
        }
    }

instinctpt1 is offline
4ever16
Veteran Member
Join Date: Apr 2015
Old 06-23-2019 , 11:14   Re: Betting system to database.
Reply With Quote #4

Not what i requested.
4ever16 is offline
4ever16
Veteran Member
Join Date: Apr 2015
Old 07-01-2019 , 09:56   Re: Betting system to database
Reply With Quote #5

Bump!
4ever16 is offline
4ever16
Veteran Member
Join Date: Apr 2015
Old 12-27-2019 , 07:45   Re: Betting system to database
Reply With Quote #6

Bump!
4ever16 is offline
AmXDusT
Member
Join Date: Feb 2019
Location: Italy / Albania
Old 12-27-2019 , 23:30   Re: Betting system to database
Reply With Quote #7

Hi, do players win/lose money when betting/winning/losing?
AmXDusT is offline
4ever16
Veteran Member
Join Date: Apr 2015
Old 12-28-2019 , 11:54   Re: Betting system to database
Reply With Quote #8

Quote:
Originally Posted by AmXDusT View Post
Hi, do players win/lose money when betting/winning/losing?
No because only spectators can bet.
Also no because the data win/lost is sent to database only.

Its for a website.

Last edited by 4ever16; 12-28-2019 at 11:55.
4ever16 is offline
AmXDusT
Member
Join Date: Feb 2019
Location: Italy / Albania
Old 12-29-2019 , 02:30   Re: Betting system to database
Reply With Quote #9

PHP Code:
#include < amxmodx >
#include < sqlx >

#define COLORED_CHAT    //comment this to remove the colored chat 

//#define UPDATE_NICK     //uncomment this to update nick in the db whenever player has different nick

#if defined COLORED_CHAT
    #if AMXX_VERSION_NUM < 183
        #include < cromchat >
    #endif
#endif

// sql stuff
new const host[] = "";
new const 
user[] = "";
new const 
pass[] = "";
new const 
db[]   = "";

new const 
table[] = "db_bets";


new const 
Float:TIME 20.0;            // when to disable bets
new const CHAT_PREFIX[] = "[BETS]";

new 
Handle:tuple;

new Array:
hSaveTeamBet;
new 
Trie:hSaveSteamID;

enum _:BetUtils
{
    
PlayerSteamID30 ],
    
PlayerName32 ],
    
Vote
}
enum _:Teams
{
    
TEAM_UNASSIGNED 0,
    
TEAM_T          1,
    
TEAM_CT         2,
    
TEAM_SPECTATOR  3,
}

new 
bool:canBet;

public 
plugin_init()
{
    
register_plugin"Bets DB""1.0""DusT" );

    
register_clcmd"say""CmdSay" );
    
// events taken from instinctpt1's plugin
    
register_event("TextMsg",    "RoundEnd",    "a",    "2&#Game_C""2&#Game_w""2&#Game_will_restart_in");
    
register_event"SendAudio""T_Wins""a""2&%!MRAD_terwin" );
    
register_event"SendAudio""CT_Wins""a""2&%!MRAD_ctwin" );
    
register_event"HLTV""RoundStart""a""1=0""2=0" );

    
tuple SQL_MakeDbTuplehostuserpassdb );
}

public 
plugin_cfg()
{
    
hSaveSteamID TrieCreate();
    
hSaveTeamBet ArrayCreate64);
    
set_task0.1"SQL_Init" );
}

public 
plugin_end()
{
    
SQL_FreeHandletuple );
    
ArrayDestroyhSaveTeamBet );
    
TrieDestroyhSaveSteamID );
}

public 
RoundStart()
{
    
canBet true;
    
set_taskTIME"DisableBet" );

    new 
players32 ], num;
    
get_playersplayersnum"e""SPECTATOR" );

    for( new 
inumi++ )
        
#if defined COLORED_CHAT
        
client_print_colorplayers], print_team_red"^3%s ^4Bet on the TEAM Winner!! say ^3^"bet CT^"^4 or ^3^"bet T^"."CHAT_PREFIX );
        
#else
        
client_printplayers], print_chat"%s Bet on the TEAM Winner!! say ^"bet CT^" or ^"bet T^"."CHAT_PREFIX );
        
#endif
}

public 
DisableBet()
    
canBet false;

public 
RoundEnd()
    
TeamWinsTEAM_UNASSIGNED );

public 
CT_Wins()
    
TeamWinsTEAM_CT );

public 
T_Wins()
    
TeamWinsTEAM_T );

public 
CmdSayid )
{
    if( 
TEAM_T <= get_user_teamid ) <= TEAM_CT )
        return 
PLUGIN_CONTINUE;

    new 
argv64 ];
    
read_argv1argvcharsmaxargv ) );

    new 
cmd], team];
    
parseargvcmdcharsmaxcmd ), teamcharsmaxteam ) );

    if( 
equalicmd"bet" ) )
    {
        if( !
canBet )
        {
            
#if defined COLORED_CHAT
            
client_print_coloridprint_team_red"^3%s ^4You cannot vote right now."CHAT_PREFIX );
            
#else
            
client_printidprint_chat"%s You cannot vote right now."CHAT_PREFIX );
            
#endif
            
return PLUGIN_CONTINUE;
        }

        new 
betBetUtils ];
        
get_user_authididbetPlayerSteamID ], charsmaxbetPlayerSteamID ] ) );
        
get_user_nameidbetPlayerName ], charsmaxbetPlayerName ] ) );
        if( 
TrieKeyExistshSaveSteamIDbetPlayerSteamID ] ) || !team] )
        {
            
#if defined COLORED_CHAT
            
client_print_coloridprint_team_red"^3%s ^4You have already voted for this round."CHAT_PREFIX );
            
#else
            
client_printidprint_chat"%s You have already voted for this round."CHAT_PREFIX );
            
#endif
            
return PLUGIN_CONTINUE;
        }

        new 
iTeam;
        switch( 
team] )
        {
            case 
'C','c':
            {
                if( 
team] == 'T' || team] == 't' )
                {
                    
iTeam TEAM_CT;
                }
            }
            case 
'T','t':
            {
                
iTeam TEAM_T;
            }
        }

        if( 
iTeam )
        {
            
#if defined COLORED_CHAT
            
client_print_coloridprint_team_red"^3%s ^4You voted for ^3%s."CHAT_PREFIXiTeam == TEAM_CT"CT":"T" );
            
#else
            
client_printidprint_chat"%s You voted for %s."CHAT_PREFIXiTeam == TEAM_CT"CT":"T" );
            
#endif

            
betVote ] = iTeam;
            
TrieSetCellhSaveSteamIDbetPlayerSteamID ], ArrayPushArrayhSaveTeamBetbetsizeof bet ) );
        }
    }
    return 
PLUGIN_CONTINUE;
}

public 
TeamWinsteam )
{
    if( 
team == TEAM_CT || team == TEAM_T )
    {
        new 
max ArraySizehSaveTeamBet );
        new 
betBetUtils ];
        new 
bool:isWinner;
        new 
query384 ];
        new 
escName64 ];
        for( new 
imaxi++ )
        {  
            
ArrayGetArrayhSaveTeamBetibetsizeof bet );
            new 
id find_player"c"betPlayerSteamID ] );
            if( 
id )
            {
                
#if defined COLORED_CHAT
                
client_print_coloridprint_team_red"^3%s ^4You ^3%s^4 the bet!"CHAT_PREFIXteam==betVote ]? "WON":"LOST" );
                
#else
                
client_printidprint_chat"%s You %s the bet!"CHAT_PREFIXteam==betVote ]? "WON":"LOST" );
                
#endif
            
}

            
isWinner team==betVote ]? true:false;

            
SQL_QuoteStringEmpty_HandleescNamecharsmaxescName ), betPlayerName ] );
            
#if defined UPDATE_NICK
            
formatexquerycharsmaxquery ), "INSERT INTO `%s` VALUES( NULL, '%s', '%s', %d, %d ) ON DUPLICATE KEY UPDATE `player_nick`= '%s', `bets_won` = `bets_won` + %d, `bets_lost` = `bets_lost` + %d;"tableescNamebetPlayerSteamID ], isWinner1:0isWinner0:1escNameisWinner1:0isWinner0:);
            
#else
            
formatexquerycharsmaxquery ), "INSERT INTO `%s` VALUES( NULL, '%s', '%s', %d, %d ) ON DUPLICATE KEY UPDATE `bets_won` = `bets_won` + %d, `bets_lost` = `bets_lost` + %d;"tableescNamebetPlayerSteamID ], isWinner1:0isWinner0:1isWinner1:0isWinner0:);
            
#endif
            
SQL_ThreadQuerytuple"IgnoreHandle"query );
        }
    }
    
ArrayClearhSaveTeamBet );
    
TrieClearhSaveSteamID );
}

public 
SQL_Init()
{
    new 
query256 ];
    
formatexquerycharsmaxquery ), "CREATE TABLE IF NOT EXISTS `%s` ( id INT NOT NULL AUTO_INCREMENT, player_nick VARCHAR(32) NOT NULL, player_id VARCHAR(30) NOT NULL UNIQUE, bets_won INT NOT NULL, bets_lost INT NOT NULL, PRIMARY KEY(id) );"table );

    
SQL_ThreadQuerytuple"IgnoreHandle"query );
}

public 
IgnoreHandlefailStateHandle:queryerror[], errNum )
{
    if( 
errNum )
    {
        
set_fail_stateerror );
    }
    
SQL_FreeHandlequery );


Last edited by AmXDusT; 01-08-2020 at 18:16. Reason: added player name
AmXDusT is offline
4ever16
Veteran Member
Join Date: Apr 2015
Old 12-29-2019 , 11:20   Re: Betting system to database
Reply With Quote #10

Thanks will try this out!

One small thing i forgott.

At round end server prints to players who bet.

YOU WON the BET.
YOU LOST the BET.

Last edited by 4ever16; 12-29-2019 at 12:42.
4ever16 is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 02:50.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode