Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

przerobienie lastmanbets


  • Zamknięty Temat jest zamknięty
3 odpowiedzi w tym temacie

#1 Mysliwy^^

    Wszechwidzący

  • Użytkownik

Reputacja: 10
Początkujący

  • Postów:264
  • GG:
  • Lokalizacja:Mragowo
Offline

Napisano 14.01.2009 09:33

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>

// ---------- Adjust below settings to your liking ---------------------------------------
//#define DEBUGMODE                // remove this comment to compile in debugmode
#define IWANTPRIZES                // comment this if you don't want prizes
#define XTRA_HEALTHBOOST        100 // how much extra health a health boost prize should give
// When you win money over $16000, the plugin automatically "buys" you prizes for that money until that money is all used up.
// You can change these values. Ie by default an extra life costs 1000, extra health 100 and armour 10. The plugin first tries to buy you as many extra lives
// it can (ie until less than $1000 remains), then goes on to buy extra health, and then extra armour. With that said, make sure extra life is still the most expensive
// and extra armour the cheapest prize, or you will run into trouble.
#define PRIZEPRICE_EXTRALIFE    1000
#define PRIZEPRICE_EXTRAHEALTH    100
#define PRIZEPRICE_EXTRAARMOUR    10

#define HUDCHANNEL_T            2 // Hud channels. You probably don't need to change these, but you can if you find that some of hud-displaying plugins are interfered
#define HUDCHANNEL_CT            3 // by the red/blue messages telling how much each player was bet on.
#define HUDMESSAGE_HOLDTIME        25.0 // For how many seconds (after last placed bet) should the red/blue messages stay onscreen. Must be a float (end with a decimal) value.


// __________________Bot settings here (you don't need to touch these)__________________
// A bot can be a "gambler", betting on the person with the lowest sum of HP and armour, else he's playing it "safe". To become a gambler
// each bot needs to get a random value below a certain (individual) value. This value in turn is gotten by choosing a random value between BOTGAMBLERMIN and BOTGAMBLERMAX.
// Ie the bot gamble value could end up as 0.3, and then it's a 30% chance that the bot will bet on the weaker remaining player.
#define BOTGAMBLERMAX            0.4
#define BOTGAMBLERMIN            0.1
// A random float from 0.0 to 1.0 decides how much $ a bot will bet. A setting will be used if the random float ends at least this value.
#define RATIO_HIGH                0.9
#define RATIO_MEDIUM            0.6
// Depending on ratio, this is how much of the bot's current money the bot will bet. MAXBET_LOW can at most let the bot set about one third of his total money sum.
#define MAXBET_LOW                0.3 // about one third here
#define MAXBET_MEDIUM            0.5 // half money maximum here
#define MAXBET_HIGH                1.0 // bot could bet all of his money here
// ---------- Adjust above settings to your liking ---------------------------------------

#define MENUBUTTON1                (1<<0)
#define MENUBUTTON2                (1<<1)
#define MENUBUTTON3                (1<<2)
#define MENUBUTTON4                (1<<3)
#define MENUBUTTON5                (1<<4)
#define MENUBUTTON6                (1<<5)
#define MENUBUTTON7                (1<<6)
#define MENUBUTTON8                (1<<7)
#define MENUBUTTON9                (1<<8)
#define MENUBUTTON0                (1<<9)
#define MENUSELECT1                0
#define MENUSELECT2                1
#define MENUSELECT3                2
#define MENUSELECT4                3
#define MENUSELECT5                4
#define MENUSELECT6                5
#define MENUSELECT7                6
#define MENUSELECT8                7
#define MENUSELECT9                8
#define MENUSELECT0                9
#define TEAM_T                    1
#define TEAM_CT                    2

// Time in seconds (must be float) from 1vs1 situation appears until bettings start - if the player that died when it was 2vs1 has respawned, the betting will be called off.
#define INITBETTINGSTIME        1.0
// Time in seconds (must be float) from a player dies until respawn, if having any extra lives. If round ended during this time, respawn will be called off. Must be lower than INITBETTINGSTIME.
#define RESPAWNTIME                0.5

#define TASKID_RESPAWN            100 // just some value. don't change
#define TASKID_BETTINGS            200 // don't change
#define TASKID_BETTIMER            300 // don't change
#define TASKID_BETTIMERDISPLAY    400    // don't change

// Hud settings
#define TRED                    200
#define TGREEN                    0
#define TBLUE                    0
#define TX                        0.25

#define CTRED                    0
#define CTGREEN                    0
#define CTBLUE                    200
#define CTX                        0.75

#define Y                        0.35
#define EFFECTS                    0
#define FXTIME                    6.0
#define FADEINTIME                0.1
#define FADEOUTTIME                0.2

// Global vars below
//new const CT[] = "CT"
//new const T[] = "TERRORIST"
new const OVERRIDEPREVIOUSMENU[] = "lastmanbets_overridemenus"
new const CVAR_DEFAULTBET[] = "lastmanbets_defaultbet"
new const CVAR_BETTIME[] = "lastmanbets_bettime"
new const VAULTKEY_POT[] = "lastmanbets_pot"
new g_names[3][33]
new g_betperson[33]
new g_betamount[33]
new g_t
new g_ct
new bool:g_betting = false
new g_pot = 0
new g_betmenu
new bool:g_round
enum BETSETTING {BET_LOW, BET_MEDIUM, BET_HIGH}
#if defined IWANTPRIZES
new g_extralives[33] = {0, ...}
new g_extrahealth[33] = {0, ...}
new g_extraarmour[33] = {0, ...}
new bool:g_freezenewround[33] = {false, ...} // to prevent from giving prizes several times on newround (could happen ~2 times for some reason)
#endif
// Global vars above

public death_event() {
#if defined IWANTPRIZES
    new victim = read_data(2) // victim needed by IWANTPRIZES and DEBUGMODE, else not
    //client_print(0, print_chat, "death_event, victim: %d, g_round: %d, g_extralives[victim]: %d", victim, g_round, g_extralives[victim])
    if (g_extralives[victim]) {
        new team = get_user_team(victim)
        if (team == TEAM_T || team == TEAM_CT) {
            new idd[1]
            idd[0] = victim
            set_task(RESPAWNTIME, "respawn", TASKID_RESPAWN + victim, idd, 1)

        // Return here. If victim died and can respawn, this means a 1vs1 has not happened yet. Victim will not respawn if round ended - and if round ended, bet shouldn't start anyway.
        //client_print(0, print_chat, "death_event, end 1")
            return PLUGIN_CONTINUE
        }
    }
#endif // defined IWANTPRIZES

    if (!g_round) {
        //client_print(0, print_chat, "death_event, end 2")
        return PLUGIN_CONTINUE
    }

    new cts[32], ts[32], ctsnum = 0, tsnum = 0
    new const MAXPLAYERS = get_maxplayers()

    for (new i = 1; i <= MAXPLAYERS; i++) {
        if (!is_user_connected(i) || !is_user_alive(i))
            continue

        switch (cs_get_user_team(i)) {
            case TEAM_T: ts[tsnum++] = i
            case TEAM_CT: cts[ctsnum++] = i
            default: {
                // A user that is not alive but not on T _or_ CT, who is he anyway?? <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/biggrin.gif' class='bbc_emoticon' alt=':-)' />
                return PLUGIN_CONTINUE
            }
        }

        if (tsnum > 1 || ctsnum > 1) {
            //client_print(0, print_chat, "Deathevent ends in loop, not 1vs1: CT: %d, T: %d", ctsnum, tsnum)
            return PLUGIN_CONTINUE
        }

    }
    // (These two get_players had problems in earlier versions, they are now replaced by manual code finding players)
    //get_players(cts, ctsnum, "ae", CT) // match alive and team
    //get_players(ts, tsnum, "ae", T) // match alive and team

    if (ctsnum != 1 || tsnum != 1) {
        //client_print(0, print_chat, "death_event, end 3, CT: %d, T: %d", ctsnum, tsnum)
        return PLUGIN_CONTINUE
    }

    get_user_name(ts[0], g_names[TEAM_T], 32)
    get_user_name(cts[0], g_names[TEAM_CT], 32)

    g_t = ts[0]
    g_ct = cts[0]

#if defined DEBUGMODE
    new victimdebug = read_data(2) // victim needed by IWANTPRIZES and DEBUGMODE, else not
    new victimname[32]
    get_user_name(victimdebug, victimname, 31)
    log_amx("Betting will maybe start in %f seconds (if %s that just died does not respawn, or the round ends)", INITBETTINGSTIME, victimname)
#endif
    set_task(INITBETTINGSTIME, "initbettings", TASKID_BETTINGS)

    return PLUGIN_CONTINUE
}

displaybetshud() {
    //client_print(0, print_chat, "%s obstawil $%d na %s.", name, g_betamount[id], g_names[g_betperson[id]])
    new const MAXPLAYERS = get_maxplayers()

    // First calculate how much each player has been bet on.
    new betamounts[2] = {0, 0}, betcount[2] = {0, 0} // t, ct

    for (new i = 1; i <= MAXPLAYERS; i++) {
        if (!is_user_connected(i) // no one can win money from a player that has disconnected, even though he bet...
        || g_betperson[i] == 0) // this player didn't bet yet
            continue

        betamounts[g_betperson[i] - 1] += g_betamount[i] // -1 because person will be a team number, either 1 (t) or 2 (ct).
        betcount[g_betperson[i] - 1]++
    }

    const MESSAGESIZE = 511
    new tMessage[MESSAGESIZE + 1], ctMessage[MESSAGESIZE + 1]

    format(tMessage, MESSAGESIZE, "%s^n$%d from %d bets", g_names[TEAM_T], betamounts[0], betcount[0])
    format(ctMessage, MESSAGESIZE, "%s^n$%d from %d bets", g_names[TEAM_CT], betamounts[1], betcount[1])

    for (new i = 1; i <= MAXPLAYERS; i++) {
        if (!is_user_connected(i) || is_user_bot(i))
            continue

        // display hud stuff to this person
        set_hudmessage(TRED, TGREEN, TBLUE, TX, Y, EFFECTS, FXTIME, HUDMESSAGE_HOLDTIME, FADEINTIME, FADEOUTTIME, HUDCHANNEL_T)
        show_hudmessage(i, tMessage)

        set_hudmessage(CTRED, CTGREEN, CTBLUE, CTX, Y, EFFECTS, FXTIME, HUDMESSAGE_HOLDTIME, FADEINTIME, FADEOUTTIME, HUDCHANNEL_CT)
        show_hudmessage(i, ctMessage)
    }
}

#if defined IWANTPRIZES // keeping all prizes-only functions within this big block, don't forget to move fns out of it when they are used by nonprize compiles
public respawn(idd[1]) {
    new team = get_user_team(idd[0])
    if (team != TEAM_T && team != TEAM_CT)
        return

    // Call any bets off. If we have a respawner, a 1vs1 situation is impossible.

#if defined DEBUGMODE
    new name[32]
    get_user_name(idd[0], name, 31)
    log_amx("%s %s %s", name, g_round ? "respawns!" : "would've respawned if the round didn't just end... no respawn this time!", task_exists(TASKID_BETTINGS) ? "A betting was about to happen but will called off." : "A betting wasn't about to happen anyway, no action taken.")
#endif

    if (task_exists(TASKID_BETTINGS)) // probably not entirely necessary
        remove_task(TASKID_BETTINGS) // this should be necessary, though

    if (!g_round)
        return

    g_extralives[idd[0]]--
    spawn(idd[0])
    new name2[32]
    get_user_name(idd[0], name2, 31)
    client_print(0, print_chat, "%s odrodzil sie, majac %d jeszcze li%s zyc extra!", name2, g_extralives[idd[0]], g_extralives[idd[0]] == 1 ? "fe" : "ves")
}

public client_connect(id) {
    resetprizes(id)

    return PLUGIN_CONTINUE
}

prize(id, moneyover16k) {
    new lives = 0, healths = 0, armours = 0, origmoney = moneyover16k

    while (moneyover16k >= PRIZEPRICE_EXTRALIFE) {
        g_extralives[id]++
        moneyover16k -= PRIZEPRICE_EXTRALIFE
        lives++
    }
    while (moneyover16k >= PRIZEPRICE_EXTRAHEALTH) {
        g_extrahealth[id]++
        moneyover16k -= PRIZEPRICE_EXTRAHEALTH
        healths++
    }
    while (moneyover16k >= PRIZEPRICE_EXTRAARMOUR) {
        g_extraarmour[id]++
        moneyover16k -= PRIZEPRICE_EXTRAARMOUR
        armours++
    }
    client_print(id, print_chat, "For winning $%d over $16000, you win these prizes: %d Xtra lives, %d health boosts, %d assault suits", origmoney, lives, healths, armours)
}

setprizes(id) {
    new bool:extrahealthused = false, bool:extraarmourused = false
    // Add extra health
    if (g_extrahealth[id] > 0) {
        g_extrahealth[id]--
        new idd[1]
        idd[0] = id
        set_task(0.5, "delayedhealthboost", 0, idd, 1)
        extrahealthused = true
    }

    // Add extra armour
    new userarmour = get_user_armor(id)
    if (g_extraarmour[id] > 0 && userarmour < 100) {
        g_extraarmour[id]--

        give_item(id, "item_assaultsuit")
        extraarmourused = true
    }

    if (g_extralives[id] + g_extrahealth[id] + g_extraarmour[id] != 0)
        client_print(id, print_chat, "Pozostalo nagrod: %d Extra zyc, %d Regeneracji zycia%s, %d Szybkich atakow%s", g_extralives[id], g_extrahealth[id], extrahealthused ? " (1 just used)" : "", g_extraarmour[id], extraarmourused ? " (1 just used)" : "")
}

public delayedhealthboost(idd[1]) {
    set_user_health(idd[0], get_user_health(idd[0]) + XTRA_HEALTHBOOST)
}

remove_respawntasks() {
    for (new i = 1; i < 33; i++)
        remove_task(TASKID_RESPAWN + i)
}

public unsetfreeze(idd[1]) {
    g_freezenewround[idd[0]] = false
}

public restartgame_event() {
    for (new i = 1; i < 33; i++)
        resetprizes(i)

    return PLUGIN_CONTINUE
}

resetprizes(id) {
    g_extralives[id] = 0
    g_extrahealth[id] = 0
    g_extraarmour[id] = 0
    g_freezenewround[id] = false
}

#if defined DEBUGMODE
public giveprize(id, level, cid) {
    if (!cmd_access(id, level, cid, 4)) {
        return PLUGIN_HANDLED
    }

    new giveto, theprize, prizes
    new buffer[10]
    read_argv(1, buffer, 9)
    giveto = str_to_num(buffer)
    read_argv(2, buffer, 9)
    theprize = str_to_num(buffer)
    read_argv(3, buffer, 9)
    prizes = str_to_num(buffer)

    switch (theprize) {
        case 1: {
            g_extralives[giveto] += prizes
        }
        case 2: {
            g_extrahealth[giveto] += prizes
        }
        case 3: {
            g_extraarmour[giveto] += prizes
        }
        default: {
            console_print(id, "Only 1-3 works...")
            return PLUGIN_HANDLED
        }

    }

    console_print(id, "Dal %d nagrode z puli %d dla %d.", prizes, theprize, giveto)

    return PLUGIN_HANDLED
}

public giveprizeall(id, level, cid) {
    if (!cmd_access(id, level, cid, 3)) {
        return PLUGIN_HANDLED
    }

    new theprize, prizes
    new buffer[10]
    read_argv(1, buffer, 9)
    theprize = str_to_num(buffer)
    read_argv(2, buffer, 9)
    prizes = str_to_num(buffer)

    new const MAXCLIENTS = get_maxplayers()

    for (new i = 1; i <= MAXCLIENTS; i++) {
        if (!is_user_connected(i))
            continue
        switch (theprize) {
            case 1: {
                g_extralives[i] = prizes
            }
            case 2: {
                g_extrahealth[i] = prizes
            }
            case 3: {
                g_extraarmour[i] = prizes
            }
            default: {
                console_print(id, "Only 1-3 works...")
                return PLUGIN_HANDLED
            }
        }
    }

    console_print(id, "Ustawil %d nagrode z puli %d dla wszystkich.", prizes, theprize)

    return PLUGIN_HANDLED
}
#endif // defined DEBUGMODE
#endif // defined IWANTPRIZES

public newround_event(id) {
#if defined IWANTPRIZES
    if (g_freezenewround[id])
        return PLUGIN_CONTINUE
    //log_amx("newround_event called for %d", id)

    g_freezenewround[id] = true

    new idd[1]
    idd[0] = id
    set_task(1.0, "unsetfreeze", 0, idd, 1)

    setprizes(id)
#endif // defined IWANTPRIZES

    if (!g_round)
        g_round = true

    return PLUGIN_CONTINUE
}

hudtimerstarter() {
    new timeend[1]
    timeend[0] = get_systime() + get_cvar_num(CVAR_BETTIME)
    hudtimerdisplay(timeend)
    set_task(1.0, "hudtimerdisplay", TASKID_BETTIMERDISPLAY, timeend, 1, "b")
}

public hudtimerdisplay(timeend[1]) {
    new const MAXPLAYERS = get_maxplayers()
    new secondsleft = timeend[0] - get_systime()
    new msg[64]

    if (secondsleft > 0) {
        msg = "Obstawianie jest jeszcze mozliwe przez %d sekund"
        format(msg, 63, msg, secondsleft)
    }
    else
        msg = "Nie udalo Ci sie obstawic..."

    new usermenu, userkeys, bool:nooneisinmenu = true
    for (new i = 1; i <= MAXPLAYERS; i++) {
        if (!is_user_connected(i) || is_user_alive(i) || is_user_bot(i))
            continue
        else
            nooneisinmenu = false

        get_user_menu(i, usermenu, userkeys) // get user menu
        if (usermenu == g_betmenu) {
            // Display time left here
            client_print(i, print_center, msg)
        }
    }

    // End loops if no one is in menu...
    if (nooneisinmenu) {
        remove_task(TASKID_BETTIMER)
        remove_task(TASKID_BETTIMERDISPLAY)
    }
}

public initbettings() {
    if (!g_round) { // if round already ended, call bets off
#if defined DEBUGMODE
        log_amx("Bettings was about to start, but the round ended, so no bettings will occur this time.")
#endif
        return
    }

    // Start timer here
    set_task(get_cvar_float(CVAR_BETTIME), "closebetmenu", TASKID_BETTIMER)
    hudtimerstarter()

    new const DEFAULTBET = get_cvar_num(CVAR_DEFAULTBET)
    g_betting = true

    for (new i = 1; i < 33; i++) // Reset votes
        g_betperson[i] = 0

    new bool:overridepreviousmenu, bool:bot, currentmenu, CsTeams:team, keys
    if (get_cvar_num(OVERRIDEPREVIOUSMENU))
        overridepreviousmenu = true
    else
        overridepreviousmenu = false

    new const MAXPLAYERS = get_maxplayers()
#if defined DEBUGMODE
    log_amx("Bettings will now start. This server supports %d players.", MAXPLAYERS)
    new name[32]
#endif
    for (new i = 1; i <= MAXPLAYERS; i++) {
        if (!is_user_connected(i) || is_user_alive(i)) { // Online, dead players only
#if defined DEBUGMODE
            if (!is_user_connected(i)) {
                //log_amx("Player #%d is not connected and will not be able to vote.", i)
            }
            else {
                get_user_name(i, name, 31)
                log_amx("Player #%d (%s) is alive and will not be able to vote.", i, name)
            }
#endif
            continue
        }

        bot = bool:is_user_bot(i)
        if (!bot && !overridepreviousmenu) {
            // If already in a menu, don't bother. This isn't that important...
            get_user_menu(i, currentmenu, keys) // currentmenu should be 0 when user is in no menu, only then it's ok to show a bet menu :-]
            if (currentmenu > 0) {
#if defined DEBUGMODE
                get_user_name(i, name, 31)
                log_amx("Player #%d (%s) is already in another menu (%d) - your %s cvar is defined to not show bet menu to ppl who already have a menu open. (Bet menu has id %d)", i, name, currentmenu, OVERRIDEPREVIOUSMENU, g_betmenu)
#endif
                continue
            }
        }

        // Must be on T or CT team
        team = cs_get_user_team(i)
        if (team != CS_TEAM_T && team != CS_TEAM_CT) {
#if defined DEBUGMODE
            get_user_name(i, name, 31)
            log_amx("Player #%d (%s) is not on team 1 (T) or 2 (CT). Actually the player is on team %d and thus can't bet.", i, name, int:team)
#endif
            continue
        }

        // Must have at least DEFAULTBET dollars to participate...
        if (cs_get_user_money(i) < DEFAULTBET) {
#if defined DEBUGMODE
            get_user_name(i, name, 31)
            log_amx("Player #%d (%s) does only have $%d, which is below the $%d needed to be able to vote.", i, name, cs_get_user_money(i), DEFAULTBET)
#endif
            client_print(i, print_chat, "Nie posiadasz $%d potrzebnych do minimalnego obstawienia zakladu.", DEFAULTBET)
            continue
        }

        g_betamount[i] = DEFAULTBET

        if (bot) {
            // Bots "bet"
            //client_print(0, print_chat, "%d should vote and is a bot!", deadplayers[i])
            new botid[1]
            botid[0] = i
            set_task(random_float(1.0, 5.0), "botbet", 0, botid, 1)
#if defined DEBUGMODE
            get_user_name(i, name, 31)
            log_amx("Player #%d (%s) is a bot and will bet...", i, name)
#endif
        }
        else {
            //client_print(deadplayers[i], print_chat, "starting bet for you")
#if defined DEBUGMODE
            get_user_name(i, name, 31)
            log_amx("Player #%d (%s) is a normal player and IS shown the bet menu and thus gets the chance to bet this time...", i, name)
#endif
            startbet(i)
        }
    }

    displaybetshud()
}

public botbet(botid[1]) {
    if (!g_betting || !is_user_connected(botid[0])) // bot may have been disconnected during the time...
        return PLUGIN_CONTINUE

    // Bot will bet.
    // Bot can bet any even $100 value... and should choose the player with most hp+armour, and possibly best frags/deaths ratio, and then it could turn all over to the other guy for
    // gambling purpose.

    // Gambling ratio could be set somewhere between 0.1 and 0.5...
    new const Float:GAMBLER_RATIO = random_float(BOTGAMBLERMIN, BOTGAMBLERMAX)
    new bool:gambler = false // this bot is not a gambler... yet
    if (random_float(0.0, 1.0) <= GAMBLER_RATIO)
        gambler = true // ok, this bot wants to be a gambler <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/biggrin.gif' class='bbc_emoticon' alt=':-)' />

    new nongamblerschoice = getnongamblerschoice()

    new choice = gambler ? (nongamblerschoice == TEAM_T ? TEAM_CT : TEAM_T) : nongamblerschoice
    /*if (gambler) {
        if (nongamblerschoice == TEAM_T)
            choice = TEAM_CT
        else
            choice = TEAM_T
    }*/

    new money = cs_get_user_money(botid[0])
    money -= money % 100 // 553 - (553 % 100) would be 553 - (53) would be 500, ie even amount in hundreds...
    money = botbetmoney(money)
    if (money == 0) // Bot didn't bet this time...
        return PLUGIN_CONTINUE

    g_betamount[botid[0]] = money
    placebet(botid[0], choice)

    return PLUGIN_CONTINUE
}

// Decides how much money the will bot bet.
botbetmoney(money) {
    // Low (0.0 > 0.6), medium (0.6 > 0.9), high (0.9 > 1.0)
    // Low == max 30% of money
    // Medium == max 50% of money
    // High == max 100% of money

    new const Float:RATIO = random_float(0.0, 1.0)
    new BETSETTING:betSetting = BET_LOW
    if (RATIO >= RATIO_HIGH)
        betSetting = BET_HIGH
    else if (RATIO >= RATIO_MEDIUM)
        betSetting = BET_MEDIUM

    new Float:pctOfMoneyToBet
    switch (betSetting) {
        case BET_LOW: pctOfMoneyToBet = random_float(0.0, MAXBET_LOW) // MAXBET_LOW    0.3
        case BET_MEDIUM: pctOfMoneyToBet = random_float(0.0, MAXBET_MEDIUM) // MAXBET_MEDIUM    0.5
        //case BET_HIGH: pctOfMoneyToBet = random_float(0.0, MAXBET_HIGH) // MAXBET_HIGH    1.0
        default: pctOfMoneyToBet = random_float(0.0, MAXBET_HIGH) // MAXBET_HIGH    1.0
    }

    money = floatround(money * pctOfMoneyToBet)

    money -= money % 100 // to have equal 100s...

    return money
}

getnongamblerschoice() {
    new choice
    new t_hp = get_user_health(g_t), ct_hp = get_user_health(g_ct), t_armour = get_user_armor(g_t), ct_armour = get_user_armor(g_ct)
    if (t_hp + t_armour > ct_hp + ct_armour)
        choice = TEAM_T
    else if (t_hp + t_armour < ct_hp + ct_armour)
        choice = TEAM_CT
    else // They're equal
        choice = random_num(TEAM_T, TEAM_CT)

    return choice
}

startbet(id) {
    if (!g_betting) {
        client_print(id, print_center, "Obstawiles za pozno!")
        return
    }

    new menuBody[512], flags = MENUBUTTON1|MENUBUTTON2|MENUBUTTON0, money = cs_get_user_money(id)

    new t_hp = get_user_health(g_t), ct_hp = get_user_health(g_ct), t_armour = get_user_armor(g_t), ct_armour = get_user_armor(g_ct)

    new len = format(menuBody, 511, "Obstawiamy walke: y%sw vs. y%sw! Wplacajcie pieniadze! Kto wygra?^n^n1. %s (HP: %d, Kamizelka: %d)^n2. %s (HP: %d, Kamizelka: %d)^n^nAktualne zaklady: $y%dw^n", g_names[TEAM_T], g_names[TEAM_CT], g_names[TEAM_T], t_hp, t_armour, g_names[TEAM_CT], ct_hp, ct_armour, g_betamount[id])

    if (g_pot > 0)
        len += format(menuBody[len], 511 - len, "^nAktualna stawka $y%dw^n", g_pot)

    new const DEFAULTBET = get_cvar_num(CVAR_DEFAULTBET)

    // +1x
    if (money >= g_betamount[id] + DEFAULTBET) {
        flags |= MENUBUTTON3
        len += format(menuBody[len], 511 - len, "w")
    }
    else
        len += format(menuBody[len], 511 - len, "d")
    len += format(menuBody[len], 511 - len, "3. Obstaw $%d na^n", DEFAULTBET)

    // +10x
    if (money >= g_betamount[id] + DEFAULTBET * 10) {
        flags |= MENUBUTTON4
        len += format(menuBody[len], 511 - len, "w")
    }
    else
        len += format(menuBody[len], 511 - len, "d")
    len += format(menuBody[len], 511 - len, "4. Obstaw $%d na^n", DEFAULTBET * 10)


    // -1x
    if (g_betamount[id] - DEFAULTBET >= DEFAULTBET) {
        flags |= MENUBUTTON5
        len += format(menuBody[len], 511 - len, "w")
    }
    else
        len += format(menuBody[len], 511 - len, "d")
    len += format(menuBody[len], 511 - len, "5. Zmniejsz stawke $%d na^n", DEFAULTBET)

    // -10x
    if (g_betamount[id] - DEFAULTBET * 10 >= DEFAULTBET) {
        flags |= MENUBUTTON6
        len += format(menuBody[len], 511 - len, "w")
    }
    else
        len += format(menuBody[len], 511 - len, "d")
    len += format(menuBody[len], 511 - len, "6. Zmniejsza stawke $%d na^nw", DEFAULTBET * 10)

    len += format(menuBody[len], 511 - len, "7. Obstaw wszystko!")
    flags |= MENUBUTTON7

    len += format(menuBody[len], 511 - len, "^n^n0. Nie dzięki, nie ryzykuje")

    show_menu(id, flags, menuBody)
    //client_print(id, print_chat, "Menu dostepne dla Ciebie:")
}

public menu_fn(id, key) {
    //client_print(id, print_chat, "Wybierz odpowiedni klawisz: %d", key)
    new bool:stayinmenu = true
    new const DEFAULTBET = get_cvar_num(CVAR_DEFAULTBET)
    switch (key) {
        case MENUSELECT1: {
            // bet on t
            placebet(id, TEAM_T)
            stayinmenu = false
        }
        case MENUSELECT2: {
            // bet on ct
            placebet(id, TEAM_CT)
            stayinmenu = false
        }
        case MENUSELECT3: {
            // raise bet
            alterbet(id, DEFAULTBET)
        }
        case MENUSELECT4: {
            // lower bet
            alterbet(id, DEFAULTBET * 10)
        }
        case MENUSELECT5: {
            // raise bet
            alterbet(id, -DEFAULTBET)
        }
        case MENUSELECT6: {
            // lower bet
            alterbet(id, -DEFAULTBET * 10)
        }
        case MENUSELECT7: {
            // bet all
            betall(id)
        }
        case MENUSELECT0: {
            // no bet
            if (g_betting)
                client_print(id, print_chat, "Racja, nie obstawiaj nic. Pilnuj swojej kasy!")
            stayinmenu = false
        }
    }

    if (stayinmenu)
        startbet(id)

    return PLUGIN_HANDLED
}

placebet(id, choice) {
    if (!is_user_connected(id))
        return

    if (g_betting) {
        g_betperson[id] = choice
        altermoney(id, -g_betamount[id])
        new name[33]
        get_user_name(id, name, 32)
        client_print(0, print_chat, "%s obstawil $%d na %s.", name, g_betamount[id], g_names[g_betperson[id]])

        displaybetshud()
    }
    else
        client_print(id, print_center, "Za pozno, nie bedzie z Ciebie zaden hazardzista!")
}

alterbet(id, money) {
    g_betamount[id] += money
}

betall(id) {
    g_betamount[id] = cs_get_user_money(id)
}

altermoney(id, money) { // calc 16000+ bonuses here?
    new newmoney = cs_get_user_money(id) + money
#if defined IWANTPRIZES
    if (newmoney > 16000)
        prize(id, newmoney - 16000)
#endif

    cs_set_user_money(id, newmoney, 1)
}

roundendtasks(const TEAM) {
#if defined IWANTPRIZES
    remove_respawntasks()
#endif
    g_round = false
    if (g_betting) {
        closebetmenu()
        remove_task(TASKID_BETTIMER) // stop the timer that will close the menu...
        remove_task(TASKID_BETTIMERDISPLAY) // stop the timer that displays the time left until menu closes...
        if (TEAM == TEAM_T || TEAM == TEAM_CT)
            calculatebets(TEAM)
        else // round ended in a draw... payback all bet money
            payback()
    }
}

public roundend_t_event() {
    roundendtasks(TEAM_T)
}
public roundend_ct_event() {
    roundendtasks(TEAM_CT)
}
public roundend_draw_event() {
    roundendtasks(0)
}

public closebetmenu() {
    new const MAXPLAYERS = get_maxplayers()
    new usermenu, userkeys
    for (new i = 1; i <= MAXPLAYERS; i++) {
        if (!is_user_connected(i) || is_user_alive(i) || is_user_bot(i))
            continue

        get_user_menu(i, usermenu, userkeys) // get user menu
        if (usermenu == g_betmenu) // Hide it here!
            client_cmd(i, "slot10") // client_print(players[i], print_chat, "Hey, round's over and you didn't bet yet... close that menu!")
    }
}

payback() {
    // End betting here
    g_betting = false
    for (new i = 1; i < 33; i++) {
        if (i == g_t || i == g_ct || !is_user_connected(i) || g_betperson[i] == 0) // the remaining players didn't bet, and don't interact with disconnected players, and don't give anything to those who didn't bet
            continue

        altermoney(i, g_betamount[i])
        client_print(i, print_chat, "Runda zakonczona. Trzymaj swoje $%d z powrotem.", g_betamount[i])
    }
}

calculatebets(result) {
    // End betting here
    g_betting = false

    // Find all who voted for right player, store how much they voted
    new totalrightbets = 0, overallbets = 0
    for (new i = 1; i < 33; i++) {
        if (g_betperson[i] == result)
            totalrightbets += g_betamount[i]

        if (g_betperson[i] == TEAM_T || g_betperson[i] == TEAM_CT)
            overallbets += g_betamount[i]
    }

    // Did anyone make a bet at all?
    if (overallbets == 0) {
        client_print(0, print_chat, "Nikt nie obstawial, graly 2 cieniasy...?")
        return
    }

    // Print total bets.
    client_print(0, print_chat, "Total bets: $%d ($%d on winning team)", overallbets, totalrightbets)

    // Now hand out money...
    new Float:wonmoney, name[33], Float:highestwonmoney = -1.0, nr_of_highestwinners = 0, highestwinners[32],CsTeams:team
    for (new i = 1; i < 33; i++) {
        if (i == g_t || i == g_ct || !is_user_connected(i)) // the remaining players didn't bet, and don't interact with disconnected players...
            continue

        team = cs_get_user_team(i)
        if (team != CS_TEAM_T && team != CS_TEAM_CT) // spectators don't get anything
            continue

        get_user_name(i, name, 32)
        if (totalrightbets > 0 && g_betperson[i] == result) { // Just to avoid divison by 0 (which shouldn't happen, but...)
            // This player should have money. How much? ((g_betamount[i] / totalrightbets) * overallbets)
            wonmoney = (float(g_betamount[i]) / float(totalrightbets)) * float(overallbets)
            client_print(i, print_chat, "Wygrales!! Dostajesz tyle ile obstawiles, $%d, a dodatkowo jeszcze $%d!", g_betamount[i], floatround(wonmoney) - g_betamount[i])
            server_print("%s Wygral zaklad! otrzymal swoja wplate, $%d, a dodatkowo jeszcze $%d!", name, g_betamount[i], floatround(wonmoney) - g_betamount[i])
            altermoney(i, floatround(wonmoney))
            if (wonmoney - g_betamount[i] > highestwonmoney) {
                nr_of_highestwinners = 0
                highestwinners[nr_of_highestwinners++] = i
                highestwonmoney = wonmoney - g_betamount[i]
            }
            else if (wonmoney - g_betamount[i] == highestwonmoney) {
                highestwinners[nr_of_highestwinners++] = i
            }
        }
        else if (g_betperson[i] == 0) {
            client_print(i, print_chat, "Tym razem nie obstawiasz.")
            server_print("%s nie ma szmalu...", name)
        }
        else {
            client_print(i, print_chat, "Szybko straciles $%d !", g_betamount[i])
            server_print("%s przegral $%d zakladajac sie...", name, g_betamount[i])
        }
    }

    //statsworker(highestwinners, nr_of_highestwinners, highestwonmoney)

    if (nr_of_highestwinners == 0) { // Did anyone make the right bet? If not, move the bet money to the pot.
        client_print(0, print_chat, "Nikt nie wygral zakldu. Suma $%d zostala dodana do banku. Wartosc banku: $%d", overallbets, g_pot += overallbets)
        set_vaultpot(g_pot)
        return
    }
    else if (nr_of_highestwinners == 1) { // Winner takes it all.
        get_user_name(highestwinners[0], name, 32)
        if (g_pot != 0) {
            client_print(0, print_chat, "%s wygral $%d i spustoszyl bank zabierajac jeszcze $%d z banku, wyjal $%d!", name, floatround(highestwonmoney), g_betamount[highestwinners[0]], g_pot)
            give_pot(nr_of_highestwinners, highestwinners)
        }
        else {
            if (highestwonmoney >= 1.0)
                client_print(0, print_chat, "%s wygral $%d $%d z zakladu, bank zastal pusty.", name, floatround(highestwonmoney), g_betamount[highestwinners[0]])
        }
    }
    else { // Winners share it all.
        new msg[128], len = 0
        if (g_pot > 0) {
            len += format(msg[len], 127 - len, "Podzielila sie pula z banku, $%d: ", g_pot)
            give_pot(nr_of_highestwinners, highestwinners)
        }
        else
            len += format(msg[len], 127 - len, "Najwieksi szczesciarze: ")

        for (new i = 0; i < nr_of_highestwinners; i++) {
            get_user_name(highestwinners[i], name, 32)
            len += format(msg[len], 127 - len, "%s ", name)
        }
    }
}

/*
statsworker(highestwinners[32], const NROFHIGHESTWINNERS, Float:highestwonmoney) {
    // Build result table of last bet
}
*/

set_vaultpot(value) {
    new potstr[16]
    num_to_str(value, potstr, 15)
    set_vaultdata(VAULTKEY_POT, potstr)
}

give_pot(nr_of_winners, winners[32]) {
    new pot = g_pot
    g_pot = 0
    set_vaultpot(0) // empty pot in vault

    if (nr_of_winners == 1) {
        altermoney(winners[0], pot)
        return
    }

    if (nr_of_winners == 0) {
        log_amx("%s: Error in script - division by zero error in give_pot! nr_of_winners: %d", nr_of_winners)
        return
    }
    new share = pot/nr_of_winners
    for (new i = 0; i < nr_of_winners; i++)
        altermoney(winners[i], share)
}

/*
public killtest(id, level, cid) {
    if (!cmd_access(id, level, cid, 1))
        return PLUGIN_HANDLED

    new const MAXPLAYERS = get_maxplayers()

    new bool:tSkonad = false, bool:ctSkonad = false, team

    for (new i = 1; i <= MAXPLAYERS; i++) {
        if (!is_user_connected(i) || !is_user_alive(i))
            continue

        if (tSkonad && ctSkonad) {
            user_kill(i, 1)
            continue
        }

        team = cs_get_user_team(i)

        if (team == TEAM_T) {
            if (tSkonad || i == id)
                user_kill(i, 1)
            else
                tSkonad = true
        }
        else if (team == TEAM_CT) {
            if (ctSkonad || i == id)
                user_kill(i, 1)
            else
                ctSkonad = true
        }
        else {
            // Some odd team... just kill!
            user_kill(i, 1)
        }
    }

    return PLUGIN_HANDLED
}
*/

public plugin_init() {

    register_event("DeathMsg", "death_event", "a")
    register_event("SendAudio", "roundend_t_event", "a", "2&%!MRAD_terwin")
    register_event("SendAudio", "roundend_ct_event", "a", "2&%!MRAD_ctwin")
    register_event("SendAudio", "roundend_draw_event", "a", "2&%!MRAD_rounddraw")
    register_event("ResetHUD", "newround_event", "b")

#if defined IWANTPRIZES
    register_event("TextMsg", "restartgame_event", "a", "2&#Game_C","2&#Game_w")
    register_event("TextMsg", "restartgame_event", "a", "2&#Game_will_restart_in")
#if defined DEBUGMODE
    register_concmd("0gp", "giveprize", ADMIN_CFG, "<id> <1-3> <#> - give # 1-3 prizes to id")
    register_concmd("0gpa", "giveprizeall", ADMIN_CFG, "<1-3> <#> - give # 1-3 prizes to all")
#endif
#endif
    //register_clcmd("0killtest", "killtest", ADMIN_CFG, "- kills you and leaves two people alive on each team...")
    register_cvar(OVERRIDEPREVIOUSMENU, "1")
    register_cvar(CVAR_DEFAULTBET, "100")
    register_cvar(CVAR_BETTIME, "20")

    g_betmenu = register_menuid("It's")
    register_menucmd(g_betmenu, 1023, "menu_fn")

    if (vaultdata_exists(VAULTKEY_POT))
        g_pot = get_vaultdata(VAULTKEY_POT)

}




i gdy skompiluje ten sma po zmianie mapy gdy wpisze amx_plugins dostaje komunikat
unknown unknown unknown lastmanbets.amx running


przez co zaklady wylaczaja mi sie przy samym obstawianiu czy ktos moglby to uzupelnic?[/code]
  • +
  • -
  • 0

#2 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 14.01.2009 13:00

unknown unknown unknown

Jest spowodowane nie zdeklarowaniem nazwy plugu, autora i wersji. Ale to nie powinno wywolywac problemow
  • +
  • -
  • 0

#3 Mysliwy^^

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 10
Początkujący

  • Postów:264
  • GG:
  • Lokalizacja:Mragowo
Offline

Napisano 14.01.2009 13:05

ale jednak gdy naciskam przycisk zwiekszajacy czy zmniejszajacy stawke to mi sie wylacza;/ probowalem zmieniac jezyki servera i za kazdym razem to samo;/ ten sma jest przerobka Kurka probowalem tez tego robina przerobki ale mimo tego dalej jest to samo
  • +
  • -
  • 0

#4 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 15.01.2009 13:29

pierwsza linijka w plugin init powinna wyglądać tak:
register_plugin("nazwa","wersja","autor")

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych