Esempio n. 1
0
    /**
     * Kjøpe ut en spiller
     */
    protected function show_free_player()
    {
        $up_id = (int) getval("free");
        // hent informasjon om spilleren
        $expire = etterlyst::get_freeze_expire();
        $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT SUM(hl_amount_valid) AS sum_hl_amount_valid, SUM(IF(hl_time < {$expire}, hl_amount_valid, 0)) AS sum_can_remove\n\t\t\tFROM hitlist\n\t\t\tWHERE hl_up_id = {$up_id}\n\t\t\tGROUP BY hl_up_id");
        $hl = $result->fetch();
        if (!$hl) {
            ess::$b->page->add_message('Spilleren <user id="' . $hl['hl_up_id'] . '" /> har ingen dusør på seg.', "error");
            redirect::handle("etterlyst");
        }
        // kan ikke kjøpe ut noe?
        if ($hl['sum_can_remove'] == 0) {
            ess::$b->page->add_message('Du må vente lenger for å kunne kjøpe ut dusøren til <user id="' . $up_id . '" />.', "error");
            redirect::handle("etterlyst");
        }
        $least = min(max(etterlyst::MIN_AMOUNT_BUYOUT, etterlyst::MIN_AMOUNT_BUYOUT_RATIO * $hl['sum_can_remove']), $hl['sum_can_remove']);
        // kjøpe ut?
        if (isset($_POST['amount'])) {
            $amount = game::intval($_POST['amount']);
            // under minstebeløpet?
            if ($amount < $least) {
                ess::$b->page->add_message("Beløpet kan ikke være mindre enn " . game::format_cash($least) . ".", "error");
            } else {
                // beregn kostnad
                $m = $up_id == $this->up->id ? 3 : 2;
                $result = \Kofradia\DB::get()->query("SELECT {$amount} * {$m}, {$amount} > {$hl['sum_can_remove']}, {$amount} * {$m} > " . $this->up->data['up_cash']);
                $row = $result->fetch(\PDO::FETCH_NUM);
                $price = $row[0];
                // for høyt beløp?
                if ($row[1]) {
                    ess::$b->page->add_message("Beløpet var for høyt.", "error");
                } elseif ($row[2]) {
                    ess::$b->page->add_message("Du har ikke nok penger på hånda. Du må ha " . game::format_cash($price) . " på hånda for å kunne betale ut " . game::format_cash($amount) . ".", "error");
                } else {
                    \Kofradia\DB::get()->beginTransaction();
                    // forsøk å trekk fra pengene
                    $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash - {$price} WHERE up_id = " . $this->up->id . " AND up_cash >= {$price}");
                    if ($a == 0) {
                        ess::$b->page->add_message("Du har ikke nok penger på hånda. Du må ha " . game::format_cash($price) . " på hånda for å kunne betale ut " . game::format_cash($amount) . ".", "error");
                        \Kofradia\DB::get()->commit();
                    } else {
                        // forsøk å trekk fra pengene fra hitlist
                        \Kofradia\DB::get()->exec("SET @t := {$amount}");
                        \Kofradia\DB::get()->exec("\n\t\t\t\t\t\t\tUPDATE hitlist h, (\n\t\t\t\t\t\t\t\tSELECT\n\t\t\t\t\t\t\t\t\thl_id,\n\t\t\t\t\t\t\t\t\tGREATEST(0, LEAST(@t, hl_amount_valid)) AS to_remove,\n\t\t\t\t\t\t\t\t\t@t := GREATEST(0, @t - hl_amount_valid)\n\t\t\t\t\t\t\t\tFROM hitlist\n\t\t\t\t\t\t\t\tWHERE hl_up_id = {$up_id} AND @t > 0 AND hl_time < {$expire}\n\t\t\t\t\t\t\t\tORDER BY hl_time DESC\n\t\t\t\t\t\t\t) r\n\t\t\t\t\t\t\tSET h.hl_amount_valid = h.hl_amount_valid - to_remove\n\t\t\t\t\t\t\tWHERE h.hl_id = r.hl_id");
                        \Kofradia\DB::get()->exec("DELETE FROM hitlist WHERE hl_amount_valid = 0");
                        // har vi noe til overs?
                        $result = \Kofradia\DB::get()->query("SELECT @t");
                        $a = $result->fetchColumn(0);
                        if ($a > 0) {
                            \Kofradia\DB::get()->rollback();
                            ess::$b->page->add_message("Beløpet var for høyt.", "error");
                        } else {
                            \Kofradia\DB::get()->commit();
                            putlog("LOG", "ETTERLYST: " . $this->up->data['up_name'] . " kjøpte ut dusør for UP_ID={$up_id} på " . game::format_cash($amount) . '. Betalte ' . game::format_cash($price) . '.');
                            if ($up_id == $this->up->id) {
                                ess::$b->page->add_message("Du kjøpte ut en dusør på " . game::format_cash($amount) . ' for deg selv. Du måtte betale ' . game::format_cash($price) . ' for dette.');
                            } else {
                                ess::$b->page->add_message("Du kjøpte ut en dusør på " . game::format_cash($amount) . ' for <user id="' . $up_id . '" />. Du måtte betale ' . game::format_cash($price) . ' for dette.');
                            }
                            redirect::handle("etterlyst");
                        }
                    }
                }
            }
        }
        ess::$b->page->add_js_domready('$("select_amount").focus();');
        echo '
<div class="bg1_c xxsmall">
	<h1 class="bg1">Etterlyst - kjøp ut spiller<span class="left2"></span><span class="right2"></span></h1>
	<div class="bg1"><boxes />
		<dl class="dd_right">
			<dt>Spiller</dt>
			<dd><user id="' . $up_id . '" /></dd>
			<dt>Total dusør</dt>
			<dd>' . game::format_cash($hl['sum_hl_amount_valid']) . '</dd>
			<dt>Dusør som kan kjøpes ut</dt>
			<dd>' . game::format_cash($hl['sum_can_remove']) . '</dd>
		</dl>
		<form action="" method="post">
			<input type="hidden" name="up_id" value="' . $up_id . '" />
			<dl class="dd_right">
				<dt>Dusør å kjøpe ut</dt>
				<dd><input type="text" name="amount" id="select_amount" value="' . htmlspecialchars(postval("amount", game::format_cash($hl['sum_can_remove']))) . '" class="styled w100" /></dd>
			</dl>
			<p class="c">' . show_sbutton("Kjøp ut") . '</p>
			<p class="c"><a href="etterlyst">Avbryt</a> - <a href="etterlyst?add">Velg en annen spiller</a></p>
			<p>' . ($up_id == $this->up->id ? 'Du må betale 3 ganger beløpet du velger å kjøpe ut for når du kjøper ut deg selv.' : 'Du må betale det dobbelte av beløpet du velger å kjøpe ut en annen spiller for.') . '</p>
		</form>
	</div>
</div>';
    }