/** * 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>'; }