/** * Publiser utgivelse */ protected function pub_publish(ff_avis_utgivelse $ffn) { // allerede publisert if ($ffn->data['ffn_published'] != 0) { ess::$b->page->add_message("Utgivelsen er allerede publisert.", "error"); redirect::handle(); } // kontroller beskrivelse $desc_plain = strip_tags(game::format_data($ffn->data['ffn_description'])); if (mb_strlen($desc_plain) < 30) { ess::$b->page->add_message("Beskrivelsen for utgivelsen må inneholde minimum 30 bokstaver/tall før den kan publiseres.", "error"); redirect::handle(); } // sjekk når siste publisering ble utført $result = \Kofradia\DB::get()->query("SELECT ffn_published_time FROM ff_newspapers WHERE ffn_ff_id = {$this->ff->id} AND ffn_published != 0 ORDER BY ffn_published_time DESC LIMIT 1"); $last = $result->rowCount() > 0 ? $result->fetchColumn(0) : 0; // har det gått lang nok tid? $delay = ff_avis::FFN_PUBLISH_DELAY + $last - time(); if ($delay > 0) { ess::$b->page->add_message("Du må vente " . game::timespan(ff_avis::FFN_PUBLISH_DELAY, game::TIME_FULL) . " mellom hver utgivelse som utføres. Gjenstår før neste utgivelse kan publiseres: " . game::timespan($delay, game::TIME_FULL) . ".", "error"); redirect::handle(); } // hent artiklene med pris $result = \Kofradia\DB::get()->query("SELECT ffna_id, ffna_up_id, ffna_title, ffna_price FROM ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} ORDER BY ffna_title"); // for få artikler? if ($result->rowCount() < 4) { ess::$b->page->add_message("Utgivelsen må inneholde minimum 4 artikler for å bli publisert.", "error"); redirect::handle(); } // kun eier if (!$this->ff->access(1)) { ess::$b->page->add_message("Kun " . htmlspecialchars($this->ff->type['priority'][1]) . " kan publisere utgivelsen.", "error"); redirect::handle(); } // finn total pris for artiklene $articles = array(); $articles_price = 0; while ($row = $result->fetch()) { $articles_price += $row['ffna_price']; $articles[] = $row; } $total_price = $articles_price + ff_avis::FFN_PUBLISH_COST; // godkjenne publisering? if (isset($_POST['approve'])) { $price = game::intval(postval("price")); $sid = postval("sid"); // kontroller pris if ($price != $total_price) { ess::$b->page->add_message("Det ser ut som prisen har endret seg. Prøv på nytt.", "error"); } elseif ($sid != login::$info['ses_id']) { ess::$b->page->add_message("Ugyldig.", "error"); } elseif ($total_price > 0 && $this->ff->data['ff_bank'] < $total_price) { ess::$b->page->add_message("Det er ikke nok penger i firmabanken.", "error"); } else { \Kofradia\DB::get()->beginTransaction(); // trekk fra pengene fra firmabanken if ($total_price > 0 && !$this->ff->bank(ff::BANK_BETALING, $total_price, "Publisering av utgivelse: {$ffn->data['ffn_title']} (id: {$ffn->id})")) { \Kofradia\DB::get()->commit(); // var tidligere rollback, men trenger ikke være det ess::$b->page->add_message("Det er ikke nok penger i firmabanken.", "error"); } else { // oppdater utgivelsen \Kofradia\DB::get()->exec("UPDATE ff_newspapers SET ffn_published = 1, ffn_published_time = " . time() . ", ffn_published_up_id = " . login::$user->player->id . " WHERE ffn_id = {$ffn->id}"); // utbetal til journalistene \Kofradia\DB::get()->exec("UPDATE users_players, ff_members, (SELECT ffna_up_id, SUM(ffna_price) AS ffna_sum, COUNT(ffna_price) AS ffna_count FROM ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} AND ffna_price > 0 GROUP BY ffna_up_id) AS ref SET up_bank = up_bank + ffna_sum, up_bank_received = up_bank_received + ffna_sum, up_bank_profit = up_bank_profit + ffna_sum, up_bank_num_received = up_bank_num_received + ffna_count, up_log_new = up_log_new + ffna_count, ffm_earnings = ffm_earnings + ffna_sum WHERE ffna_up_id = up_id AND ffm_up_id = up_id AND ffm_ff_id = {$this->ff->id}"); // lagre overføringslogg \Kofradia\DB::get()->exec("INSERT INTO bank_log (bl_sender_up_id, bl_receiver_up_id, amount, time) SELECT " . login::$user->player->id . ", ffna_up_id, ffna_price, " . time() . " FROM users_players, ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} AND ffna_up_id = up_id AND ffna_price > 0"); // spillelogg \Kofradia\DB::get()->exec("INSERT INTO users_log (time, ul_up_id, type, note, num) SELECT " . time() . ", ffna_up_id, " . gamelog::$items['bankoverforing'] . ", CONCAT(ffna_price, ':Utbetaling for avisartikkel.'), " . login::$user->player->id . " FROM users_players, ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} AND ffna_up_id = up_id AND ffna_price > 0"); \Kofradia\DB::get()->commit(); // live-feed livefeed::add_row('Avisutgivelsen <a href="' . ess::$s['relative_path'] . '/ff/avis?ff_id=' . $this->ff->id . '&ffn=' . $ffn->id . '">' . htmlspecialchars($ffn->data['ffn_title']) . '</a> ble publisert av <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $this->ff->id . '">' . htmlspecialchars($this->ff->data['ff_name']) . '</a>.'); ess::$b->page->add_message("Utgivelsen er nå publisert."); redirect::handle(); } } } echo ' <p class="c">Publiser utgivelse | <a href="avis?ff_id=' . $this->ff->id . '&u&ffn=' . $ffn->id . '">Tilbake</a></p> <div class="section center w200"> <h2>Utgivelsesinformasjon</h2> <dl class="dd_right"> <dt>Tittel</dt> <dd>' . htmlspecialchars($ffn->data['ffn_title']) . '</dd> <dt>Opprettet</dt> <dd>' . ess::$b->date->get($ffn->data['ffn_created_time'])->format() . '</dd> <dt>Salgspris</dt> <dd>' . game::format_cash($ffn->data['ffn_cost']) . '</dd> </dl> </div> <div class="section center w200"> <h2>Beskrivelse av utgivelsen</h2>' . (($d = $this->ff->format_description($ffn->data['ffn_description'])) != '' ? ' <div class="p">' . $d . '</div>' : ' <p>Ingen beskrivelse.</p>') . ' </div> <form action="" method="post"> <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <input type="hidden" name="price" value="' . $total_price . '" /> <div class="section center w350"> <h2>Prisoversikt</h2> <dl class="dd_right"> <dt>Publisering av utgivelse</dt> <dd>' . game::format_cash(ff_avis::FFN_PUBLISH_COST) . '</dd>'; foreach ($articles as $row) { echo ' <dt><a href="avis?ff_id=' . $this->ff->id . '&a&ffna_id=' . $row['ffna_id'] . '">' . htmlspecialchars($row['ffna_title']) . '</a> (<user id="' . $row['ffna_up_id'] . '" />)</dt> <dd>' . game::format_cash($row['ffna_price']) . '</dd>'; } echo ' </dl> <dl class="dd_right"> <dt>I firmabanken</dt> <dd>' . game::format_cash($this->ff->data['ff_bank']) . '</dd> <dt><u>Samlet kostnader</u></dt> <dd><u>' . game::format_cash($total_price) . '</u></dd> </dl> <p class="c">' . show_sbutton("Publiser utgivelsen", 'name="approve"') . '</p> </div> </form> <div class="hr fhr"><hr /></div>'; // vis utgivelsen echo $ffn->build_avis_html(); }
/** * Behandle navnbytte */ protected function page_navnbytte_handle() { ess::$b->page->add_title("Navnbytte"); echo ' <!-- søk om navnbytte --> <div class="section w200"> <h2>Søk om navnbytte</h2><boxes />'; // hent mulig søknad $result = \Kofradia\DB::get()->query("SELECT ds_id, ds_up_id, ds_time, ds_reason, ds_params FROM div_soknader WHERE ds_type = " . soknader::TYPE_FF_NAME . " AND ds_rel_id = {$this->ff->id} AND ds_reply_decision = 0"); $soknad = $result->fetch(); // har vi en aktiv søknad? if ($soknad) { $params = unserialize($soknad['ds_params']); // trekke tilbake søknaden? if (isset($_POST['withdraw'])) { if (soknader::delete($soknad['ds_id'])) { $extra = ''; // gi tilbake penger? if (isset($params['cost']) && $params['cost'] > 0) { $this->ff->bank(ff::BANK_TILBAKEBETALING, $params['cost'], 'Navnsøknad tilbaketrukket: ' . $params['name']); $extra = ' Beløpet på ' . game::format_cash($params['cost']) . ' ble satt tilbake på bankkontoen.'; } ess::$b->page->add_message("Søknaden ble trukket tilbake.{$extra}"); } redirect::handle("panel?ff_id={$this->ff->id}&a=navnbytte"); } echo ' <p>Søknad ble levert av <user id="' . $soknad['ds_up_id'] . '" /> ' . ess::$b->date->get($soknad['ds_time'])->format() . '.</p> <dl class="dd_right"> <dt>Navn som søkes</dt> <dd>' . htmlspecialchars($params['name']) . '</dd> <dt>Kostnad</dt> <dd>' . (isset($params['cost']) ? game::format_cash($params['cost']) : '0 kr') . '</dd> </dl> <p><u>Begrunnelse:</u><br />' . game::format_data($soknad['ds_reason'], "bb-opt", "Ingen begrunnelse gitt.") . '</p> <p>Søknaden er under behandling.</p> <form action="" method="post"> <p>' . show_sbutton("Trekk tilbake søknad", 'name="withdraw"') . '</p> </form>'; } else { // kan vi levere gratis søknad? $soknad_free = $this->ff->mod || $this->ff->competition || !$this->ff->params->get("name_changed") || $this->ff->params->get("name_changed") < $this->ff->params->get("sold") || $this->ff->params->get("name_changed") < $this->ff->data['ff_time_reset']; // levere søknad? if (isset($_POST['name']) && isset($_POST['reason'])) { $name = trim(postval("name")); $reason = trim(postval("reason")); // fjern evt. flere mellomromstegn etter hverandre $name = preg_replace("/ +/u", " ", $name); $_POST['name'] = $name; // samme navn som før? if ($name == $this->ff->data['ff_name']) { ess::$b->page->add_message("Du må velge et nytt navn å søke om."); } elseif (preg_match("/[^\\p{L}\\d ]/u", $name)) { ess::$b->page->add_message("Navnet kan kun inneholde bokstaver, tall og mellomrom.", "error"); } elseif (mb_strlen($name) < 2) { ess::$b->page->add_message("Minimum lengde for navnet er 2 tegn.", "error"); } elseif (mb_strlen($name) > 20) { ess::$b->page->add_message("Maksimal lengde for navnet er 20 tegn.", "error"); } elseif (empty($reason)) { ess::$b->page->add_message("Du må fylle inn en begrunnelse.", "error"); } else { $success = $soknad_free; // forsøk å trekk fra pengene if (!$soknad_free) { $success = $this->ff->bank(ff::BANK_BETALING, ff::NAME_CHANGE_COST, 'Navnsøknad: ' . $name); } // ikke nok penger i banken if (!$success) { ess::$b->page->add_message("Det er ikke nok penger i banken.", "error"); } else { // legg til søknaden soknader::add(soknader::TYPE_FF_NAME, array("name" => $name, "cost" => $soknad_free ? 0 : ff::NAME_CHANGE_COST), $reason, $this->ff->id); ess::$b->page->add_message("Du har nå levert søknad om nytt navn til {$this->ff->type['refobj']}." . ($soknad_free ? '' : ' ' . game::format_cash(ff::NAME_CHANGE_COST) . ' ble trukket fra bankkontoen.')); redirect::handle("panel?ff_id={$this->ff->id}&a=navnbytte"); } } } echo ' <form action="" method="post">' . ($soknad_free ? $this->ff->competition ? ' <p>Du kan under hele konkurranseperioden sende inn gratis søknad om navnbytte for ' . $this->ff->type['refobj'] . '. Så snart konkurranseperioden er over, vil det koste ' . game::format_cash(ff::NAME_CHANGE_COST) . ' å søke om navnbytte dersom navnet ble byttet under konkurranseperioden.</p>' : ($this->ff->mod ? ' <p>Som moderator kan du sende inn gratis søknader på vegne av ' . $this->ff->type['refobj'] . '.</p>' : ' <p>Du kan sende inn gratis søknad om navnbytte for ' . $this->ff->type['refobj'] . ' én gang (søknaden må innvilges for å telle). Neste gang vil det koste ' . game::format_cash(ff::NAME_CHANGE_COST) . '.</p>') : '') . ' <dl class="dd_right"> <dt>Ønsket navn</dt> <dd><input type="text" name="name" value="' . htmlspecialchars(postval("name", $this->ff->data['ff_name'])) . '" class="styled w100" /></dd> <dt>Kostnad (ved innvilgelse)</dt> <dd>' . ($soknad_free ? '0 kr' : game::format_cash(ff::NAME_CHANGE_COST)) . '</dd> </dl> <p>Begrunnelse</p> <p class="c"><textarea name="reason" rows="5" cols="30">' . htmlspecialchars(postval("reason")) . '</textarea></p> <p class="c">' . show_sbutton("Send inn søknad") . '</p> </form>'; } echo ' <p><a href="panel?ff_id=' . $this->ff->id . '">« Tilbake</a></p> </div>'; $this->ff->load_page(); }
/** * Kaste ut en spiller */ protected function kick_handle() { // valider sid validate_sid(); // kan vi ikke kaste ut noen spillere nå? if (login::$user->player->fengsel_check() || login::$user->player->bomberom_check() || login::$user->player->data['up_b_id'] != $this->ff->data['br_b_id'] || !$this->kick_hour_ok) { redirect::handle(); } // mangler spillervalg? if (!isset($_POST['player'])) { ess::$b->page->add_message("Du må velge en spiller du vil kaste ut.", "error"); redirect::handle(); } // er ikke spilleren i bomberommet? $up_id = (int) $_POST['player']; $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT u_email, up_id, up_name, up_access_level, up_brom_expire\n\t\t\tFROM users_players JOIN users ON up_u_id = u_id\n\t\t\tWHERE up_id = {$up_id} AND up_brom_ff_id = {$this->ff->id} AND up_brom_expire > " . time() . " AND up_access_level != 0"); $cost = $this->fam ? self::KICK_PLAYER_COST_FAMILIE : self::KICK_PLAYER_COST; $up = $result->fetch(); if (!$up) { ess::$b->page->add_message("Fant ikke spilleren.", "error"); redirect::handle(); } // sett opp skjema $form = \Kofradia\Form::getByDomain("other", login::$user); // har vi bekreftet ønsket om å kaste ut en spiller? if (isset($_POST['confirm']) && $form->validateHashOrAlert(null, "Kast ut spiller fra bomberom")) { \Kofradia\DB::get()->beginTransaction(); // forsøk å trekk fra pengene if (!$this->ff->bank(ff::BANK_BETALING, $cost, "Kaste ut spilleren [user id={$up['up_id']}] fra bomberommet")) { ess::$b->page->add_message("Det er ikke nok penger i " . ($this->fam ? "broderskapbanken" : "firmabanken") . ".", "error"); \Kofradia\DB::get()->commit(); } else { // finn en tilfeldig bydel å plassere spilleren $result = \Kofradia\DB::get()->query("SELECT id, name FROM bydeler WHERE active != 0 ORDER BY RAND() LIMIT 1"); $b_id = $result->fetchColumn(0); // forsøk å trekk ut spilleren fra bomberommet $a = \Kofradia\DB::get()->exec("\n\t\t\t\t\tUPDATE users_players\n\t\t\t\t\tSET up_brom_expire = 0, up_b_id = {$b_id}\n\t\t\t\t\tWHERE up_id = {$up['up_id']} AND up_brom_ff_id = {$this->ff->id} AND up_brom_expire = {$up['up_brom_expire']} AND up_access_level != 0"); // feilet? if ($a == 0) { // avbryt transaksjon \Kofradia\DB::get()->rollback(); ess::$b->page->add_message("Kunne ikke kaste ut spilleren fra bomberommet.", "error"); } else { // legg til hendelse hos spilleren player::add_log_static("bomberom_kicked", login::$user->player->id . ":" . urlencode($this->ff->data['ff_name']) . ":{$up['up_brom_expire']}", $this->ff->id, $up['up_id']); // send e-post til spilleren $email = new email(); $email->text = 'Hei, Din spiller ble kastet ut fra bomberommet av ' . ($this->fam ? 'broderskapet' : 'firmaet') . ' som styrer bomberommet. -- www.kofradia.no'; $email->send($up['u_email'], "Kastet ut av bomberom"); // firmalogg $this->ff->add_log("bomberom_kick", login::$user->player->id . ":{$up['up_id']}:{$up['up_brom_expire']}"); // logg putlog("DF", "BOMBEROM: {$up['up_name']} ble kastet ut av bomberommet {$this->ff->data['ff_name']} av " . login::$user->player->data['up_name'] . " " . ess::$s['spath'] . "/min_side?up_id={$up['up_id']}"); ess::$b->page->add_message('Du kastet ut <user id="' . $up['up_id'] . '" /> fra bomberommet. ' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' betalte et gebyr på ' . game::format_cash($cost) . '.'); \Kofradia\DB::get()->commit(); redirect::handle(); } } } ess::$b->page->add_title("Kaste ut spiller"); // vis informasjon echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Kaste ut spiller fra bomberommet<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p>Du er i ferd med å kaste ut ' . game::profile_link($up['up_id'], $up['up_name'], $up['up_access_level']) . ' fra bomberommet.</p> <p>Spilleren skal i utgangspunktet sitte i bomberommet til ' . ess::$b->date->get($up['up_brom_expire'])->format(date::FORMAT_SEC) . ' (' . game::counter($up['up_brom_expire'] - time()) . ' gjenstår).</p> <p>For å kaste ut spilleren må det betales en avgift på <b>' . game::format_cash($cost) . '</b> som betales fra ' . ($this->fam ? 'broderskapkontoen' : 'firmakontoen') . '.</p>'; // har vi ikke nok penger i firmakontoen? if ($this->ff->data['ff_bank'] < $cost) { echo ' <p>' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' har for øyeblikket kun ' . game::format_cash($this->ff->data['ff_bank']) . ' på konto, noe som ikke er nok. ' . ($this->ff->access(1) ? '<a href="' . ess::$s['relative_path'] . '/ff/banken?ff_id=' . $this->ff->id . '">Sett inn penger på ' . ($this->fam ? 'broderskapkontoen' : 'firmakontoen') . '</a>' : '<a href="' . ess::$s['relative_path'] . '/ff/panel?ff_id=' . $this->ff->id . '">Donér til ' . ($this->fam ? 'broderskapet' : 'firmaet') . '</a>') . ' først for å kunne kaste ut spilleren.</p> <p class="c"><a href="bomberom?ff_id=' . $this->ff->id . '">Tilbake</a></p>'; } else { echo ' <p>' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' har for øyeblikket ' . game::format_cash($this->ff->data['ff_bank']) . ' på konto.</p> <form action="" method="post"> ' . $form->getHTMLInput() . ' <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <input type="hidden" name="player" value="' . $up['up_id'] . '" /> <input type="hidden" name="kick" /> <p class="c">' . show_sbutton("Bekreft, kast ut spilleren", 'name="confirm"') . ' <a href="bomberom?ff_id=' . $this->ff->id . '">Avbryt</a></p> </form>'; } echo ' </div> </div>'; $this->ff->load_page(); }
/** * Plassere spiller i bomberom */ protected function type_bomberom_set_handle($ledige_plasser, $ant_i_bomberommet) { $player = login::$user->player; $self = true; $familie = false; // plassere en annen spiller? if ($_POST['player'] != "own") { // ingen ledige plasser? if ($ledige_plasser == 0) { ess::$b->page->add_message("Det er ingen ledige plasser til å plassere andre spillere i bomberommet.", "error", null, "bomberom_set"); redirect::handle(); } // hent spillerinfo $player = player::get(postval("player")); if (!$player || !$player->active || $player->bomberom_check() || $player->fengsel_check()) { ess::$b->page->add_message("Kan ikke plassere spilleren i bomberom.", "error", null, "bomberom_set"); redirect::handle(); } // kan ikke sette i bomberom pga. rankforskjell? if (!login::$user->player->can_set_brom($player)) { ess::$b->page->add_message('Kan ikke plassere <user id="' . $player->id . '" /> i bomberom pga. spilleren sin rank er for langt unna din rank. Se mer i <a href="&rpath;node/39">hjelp</a>.', "error", null, "bomberom_set"); redirect::handle(); } // kontroller at vi er ansvarlig eller har tilgang pga. familie if ($player->data['up_brom_up_id'] != $this->up->id) { // sjekk at vi er i en felles familie $result = \Kofradia\DB::get()->query("\n\t\t\t\t\tSELECT ffm_ff_id\n\t\t\t\t\tFROM ff, ff_members, (\n\t\t\t\t\t\tSELECT ffm_ff_id ff_id FROM ff_members WHERE ffm_up_id = " . $this->up->id . " AND ffm_status = 1\n\t\t\t\t\t) ref\n\t\t\t\t\tWHERE ffm_ff_id = ref.ff_id AND ff.ff_id = ref.ff_id AND ff_type = 1 AND ffm_up_id = {$player->id} AND ffm_status = 1\n\t\t\t\t\tLIMIT 1"); // ikke i felles familie? if ($result->rowCount() == 0) { ess::$b->page->add_message('Du kan ikke plassere <user id="' . $player->id . '" /> i bomberom.', "error", null, "bomberom_set"); redirect::handle(); } $familie = true; } // kan vi ikke flytte spilleren? if ($familie && $player->data['up_b_id'] != $this->ff->data['br_b_id']) { ess::$b->page->add_message('<user id="' . $player->id . '" /> er ikke i samme bydel som bomberommet. Du har ikke mulighet til å flytte spilleren og kan dermed ikke plassere spilleren i dette bomberommt.', "error", null, "bomberom_set"); redirect::handle(); } $self = false; } // familie og vi har allerede plassert en spiller de siste 12 timene? if ($familie) { $familie_wait = max(0, $this->up->data['up_brom_ff_time'] + bomberom::FAMILIY_MEMBERS_WAIT - time()); if ($familie_wait > 0) { ess::$b->page->add_message("Du kan ikke plassere medlemmer av noen broderskap du er med i for øyeblikket, fordi du plasserte forrige spiller fra broderskap " . ess::$b->date->get($this->up->data['up_brom_ff_time'])->format() . ". Du må vente " . game::counter($familie_wait) . ".", "error", null, "bomberom_set"); redirect::handle(); } } // sett opp timepris $price_hour = bomberom::PRICE_HOUR + $ant_i_bomberommet * bomberom::PRICE_EACH_PLAYER; if (!$self) { $price_hour *= bomberom::PRICE_FACTOR_OTHER; } if ($self && $this->ff->access(true)) { $price_hour *= bomberom::PRICE_FACTOR_OWN; } // sjekke pris? $hours = (int) $_POST['hours']; if ($hours <= 0) { ess::$b->page->add_message("Du må skrive inn et gyldig antall timer.", "error", null, "bomberom_set"); } elseif ($hours > bomberom::MAX_HOURS) { ess::$b->page->add_message("Du kan maksimalt sette en spiller i bomberom i " . bomberom::MAX_HOURS . " timer.", "error", null, "bomberom_set"); } else { // bekreftet pris? if (isset($_POST['price']) && $_POST['price'] != "") { validate_sid(); // beregn pris $price = $hours * $price_hour; // har prisen endret seg? if (postval("price") != $price) { ess::$b->page->add_message("Prisen har endret seg og du må bekrefte på nytt.", "error", null, "bomberom_set"); } else { \Kofradia\DB::get()->beginTransaction(); // 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 så mye penger på hånda.", "error", null, "bomberom_set"); } else { $expire = time() + $hours * 3600; $b_id = !$self && !$familie ? ', up_b_id = ' . $this->ff->data['br_b_id'] : ''; // sett spilleren i bomberommet $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_brom_ff_id = {$this->ff->id}, up_brom_expire = {$expire}{$b_id} WHERE up_id = {$player->id} AND up_brom_expire = {$player->data['up_brom_expire']}"); // kunne ikke plassere spilleren i bomberommet? if ($a == 0) { ess::$b->page->add_message("Kunne ikke plassere spilleren i bomberommet.", "error", null, "bomberom_set"); \Kofradia\DB::get()->rollback(); } else { // send logg til spilleren if (!$self) { $player->add_log("bomberom_set", $this->up->id . ":" . urlencode($this->ff->data['ff_name']) . ":{$expire}", $this->ff->id); } // oppdatere tidspunkt for familie? if ($familie) { \Kofradia\DB::get()->exec("UPDATE users_players SET up_brom_ff_time = " . time() . " WHERE up_id = " . $this->up->id); } // gi penger til firmaet $this->ff->bank(ff::BANK_TJENT, round($price * ff::BOMBEROM_PERCENT)); putlog("DF", "BOMBEROM ANSVARLIG: " . $this->up->data['up_name'] . " satt%c3 " . ($self ? 'seg selv' : $player->data['up_name']) . "%c i bomberom i firmaet {$this->ff->data['ff_name']} for {$hours} timer " . $player->generate_minside_url()); ess::$b->page->add_message("Du plasserte " . ($self ? 'deg selv' : '<user id="' . $player->id . '" />') . " i bomberommet med en varighet på <b>{$hours}</b> " . fword("time", "timer", $hours) . ". Det kostet deg <b>" . game::format_cash($price) . "</b>.", null, null, "bomberom_set"); \Kofradia\DB::get()->commit(); redirect::handle("?ff_id={$this->ff->id}"); } } \Kofradia\DB::get()->commit(); } } echo ' ' . ess::$b->page->message_get("bomberom_set", true, true) . ' <p>Du er i ferd med å plassere ' . ($self ? 'deg selv' : $player->profile_link()) . ' i dette bomberommet.</p> <p>For tiden er det ' . fwords("%d spiller", "%d spillere", $ant_i_bomberommet) . ' i bomberommet og ' . fwords("%d ledig plass", "%d ledige plasser", $ledige_plasser) . '.' . ($ledige_plasser == 0 ? ' Du har alikevel plass i bomberommet som medlem av firmaet.' : '') . '</p> <dl class="dd_right"> <dt>Antall timer</dt> <dd>' . fwords("<b>%d</b> time", "<b>%d</b> timer", $hours) . '</dd> <dt>Total kostnad</dt> <dd>' . game::format_cash($hours * $price_hour) . '</dd> <dt>Varighet til</dt> <dd>' . ess::$b->date->get(time() + $hours * 3600)->format(date::FORMAT_SEC) . '</dd> </dl> <form action="" method="post">' . (!$self ? ' <input type="hidden" name="player" value="' . $player->id . '" />' : '') . ' <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <input type="hidden" name="hours" value="' . $hours . '" /> <input type="hidden" name="price" value="' . $hours * $price_hour . '" /> <p class="c">' . show_sbutton("Sett spilleren i bomberom") . '</p> </form> <form action="" method="post">' . (!$self ? ' <input type="hidden" name="player" value="' . $player->id . '" />' : '') . ' <p>Endre antall timer: <input type="text" name="hours" class="styled w30" value="' . $hours . '" /> ' . show_sbutton("Nytt prisoppsett") . '</p> </form> <p class="c"><a href="./?ff_id=' . $this->ff->id . '">Tilbake</a></p>'; } }