/** * Construct */ public function __construct() { access::no_guest(); ess::$b->page->add_title("Anti-bot sjekk"); // hvilken side vi skal sendes til $this->redirect_url = getval("ret"); if (!$this->redirect_url) { $this->redirect_url = ess::$s['relative_path'] . "/"; } // sjekk etter anti-bot $name = getval("name"); $this->antibot = antibot::get($name); if (!$this->antibot->data) { ess::$b->page->add_message("Anti-bot oppføringen er ikke opprettet.", "error"); $this->redirect(); } // kuler? if ($name == "kuler") { // gjennomfør pre-check if (!$this->antibot->kuler_precheck()) { $this->redirect(); } // sett lave ventetider $this->update_delay = 2; $this->retry_delay = 2; } redirect::store("sjekk?name=" . urlencode($this->antibot->name) . '&ret=' . urlencode($this->redirect_url)); // sjekk om anti-boten ikke krever sjekk if (!$this->antibot->is_check_required()) { $this->redirect(); } // sjekk for ventetid $this->check_wait(); // hent bildene $this->load_images(); $this->form = \Kofradia\Form::getByDomain("anti-bot", login::$user); // utføre sjekk? if (isset($_POST['valider']) && isset($this->images) && !$this->wait) { $this->check(); } // nye bilder? if (isset($_POST['new'])) { $this->new_imgs(); } // vis anti-boten $this->show(); }
/** * Construct */ public function __construct() { kf_menu::$data['lotto'] = true; login::$user->player->fengsel_require_no(); login::$user->player->bomberom_require_no(); login::$user->player->energy_require(self::ENERGY * 1.3); // legg til 30 % på kravet ess::$b->page->add_title("Lotto"); $this->form = \Kofradia\Form::getByDomain("lotto", login::$user); $this->antibot = antibot::get("lotto", 21); $this->antibot->check_required(); // sjekk for aktiv runde, ventetid osv $this->check_active(); // ber vi om å kjøpe lodd? if (isset($_POST['lodd'])) { $this->lodd_kjop(); } $this->show_page(); ess::$b->page->load(); }
/** * Kontroller inndata og utfør utpressing */ public function utpress() { // wait time? if (($wait = $this->ut->getWait()) > 0) { \ess::$b->page->add_message("Du må vente " . \game::counter($wait, true) . " før du kan utføre en ny utpressing.", "error"); return; } // validate form $form_info = ''; if ($this->ut->up->data['up_utpressing_last']) { $form_info = sprintf("Siste=%s;", \game::timespan($this->ut->up->data['up_utpressing_last'], \game::TIME_ABS | \game::TIME_SHORT | \game::TIME_NOBOLD)); } else { $form_info = "First;"; } if ($wait) { $form_info .= sprintf("%%c11Ventetid=%s%%c", \game::timespan($wait, \game::TIME_SHORT | \game::TIME_NOBOLD)); } else { $form_info .= "%c9No-wait%c"; } if (!$this->form->validateHashOrAlert(postval('hash'), $form_info)) { return; } // mangler alternativ? $option = $this->ut->getOption(postval("opt")); if (!$option) { \ess::$b->page->add_message("Du må velge et alternativ.", "error"); return; } // lagre valg for neste gang \ess::session_put("utpressing_opt_key", postval("opt")); // forsøk utpressing $result = $this->ut->utpress($option); if ($msg = $result->getMessage()) { \ess::$b->page->add_message($msg); } // oppdater anti-bot $this->antibot->increase_counter(); }
/** * Våpentrening */ protected function page_training_show() { // sett opp og test for anti-bot $this->training_antibot = new antibot(login::$user->id, "training", 7); if (MAIN_SERVER) { $this->training_antibot->check_required(); } // sett opp skjema $this->training_form = \Kofradia\Form::getByDomain("training", login::$user); // ventetid? $wait = max(0, login::$user->player->data['up_weapon_training_next'] - time()); // skal vi trene våpenet? if (isset($_POST['wt']) && $this->training_form->validateHashOrAlert(null, "Våpentrening")) { // kan vi ikke trene nå? if ($wait > 0) { redirect::handle(); } // finnes ikke valget? $id = (int) postval("training_id"); if (!isset(self::$trainings[$id])) { ess::$b->page->add_message("Du må velge et alternativ.", "error"); redirect::handle(); } $opt = self::$trainings[$id]; // lagre valget for neste gang ess::session_put("training_id", $id); // har ikke nok cash? if ($opt['price'] > login::$user->player->data['up_cash']) { ess::$b->page->add_message("Du har ikke nok penger til å utføre våpentreningen."); redirect::handle(); } $f = self::TRAINING_MAX * $opt['percent']; $next_old = login::$user->player->data['up_weapon_training_next'] ? ' = ' . login::$user->player->data['up_weapon_training_next'] : ' IS NULL'; // utfør våpentrening $a = \Kofradia\DB::get()->exec("\n\t\t\t\tUPDATE users_players\n\t\t\t\tSET up_weapon_training = up_weapon_training + (1 - up_weapon_training) * {$f}, up_weapon_training_next = " . (time() + $opt['wait']) . ", up_cash = up_cash - {$opt['price']}\n\t\t\t\tWHERE up_id = " . login::$user->player->id . " AND up_cash >= {$opt['price']} AND up_weapon_training_next{$next_old}"); // ikke oppdatert? if ($a == 0) { ess::$b->page->add_message("Kunne ikke utføre våpentrening.", "error"); } else { $this->training_antibot->increase_counter(); ess::$b->page->add_message("Du trente opp våpenet ditt og våpentreningen økte med " . game::format_num((1 - login::$user->player->data['up_weapon_training']) * $f * 100, 2) . " %."); } redirect::handle(); } $training = login::$user->player->data['up_weapon_training'] * 100; echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Våpentrening<span class="left2"></span><span class="right2"></span></h1> <div class="bg1">'; if ($wait > 0) { echo ' <p class="c">Du må vente ' . game::counter($wait, true) . ' før du kan trene våpenet på nytt.</p>'; } else { // vis alternativene echo ' <form action="" method="post"> ' . $this->training_form->getHTMLInput() . ' <table class="table tablemt center"> <thead> <tr> <th>Pris</th> <th>Ventetid</th> </tr> </thead> <tbody>'; $i = 0; $match = ess::session_get("training_id") ?: 0; foreach (self::$trainings as $id => $row) { echo ' <tr class="box_handle' . (++$i % 2 == 0 ? ' color' : '') . '"> <td class="r"><input type="radio" name="training_id"' . ($match == $id ? ' checked="checked"' : '') . ' value="' . $id . '" />' . game::format_cash($row['price']) . '</td> <td class="r">' . game::timespan($row['wait']) . '</td> </tr>'; } echo ' </tbody> </table> <p class="c">' . show_sbutton("Utfør", 'name="wt"') . '</p> </form>'; } echo ' <div class="progressbar p' . ($training < 28 ? ' levelcrit' : ($training < 35 ? ' levelwarn' : '')) . '"> <div class="progress" style="width: ' . round(min(100, $training)) . '%"> <p>Våpentrening: ' . ($training == 100 ? '100' : game::format_num($training, 2)) . ' %</p> </div> </div> <p>Du har en <b>' . htmlspecialchars(login::$user->player->weapon->data['name']) . '</b> med <b>' . game::format_num(login::$user->player->data['up_weapon_bullets']) . '</b> ' . fword('kule', 'kuler', login::$user->player->data['up_weapon_bullets']) . '.</p> <p>Våpentreningen din synker jevnlig i løpet av dagen, og du er nødt til å trene for å holde oppe våpentreningen din. Hvis våpentreningen din faller under 25 %, risikerer du å miste våpenet ditt.</p> <p>Bedre våpentrening fører til:</p> <ul class="spacer"> <li>Du forbedrer treffsikkerheten din</li> <li>Du øker skuddtakten samtidig som treffsikkerheten forblir den samme</li> </ul> </div> </div>'; }
/** * Behandle forespørsel */ protected function handle_page() { $this->krim->up->fengsel_require_no(); $this->krim->up->bomberom_require_no(); $this->krim->up->energy_require(kriminalitet::ENERGY_KRIM * 1.3); // legg til 30 % på kravet // sett opp skjema $this->form = \Kofradia\Form::getByDomain("kriminalitet", login::$user); // sett opp antibot og sjekk om den skal utføres nå $this->antibot = antibot::get("kriminalitet", 12); $this->antibot->check_required(); ess::$b->page->add_title("Kriminalitet"); // hent informasjon om forrige forsøk $this->krim->get_last_info(); // hent inn alternativene $this->krim->options_load(); // utføre handling? if (isset($_POST['theid'])) { $this->utfor(); } echo ' <div class="bg1_c medium"> <h1 class="bg1">Kriminalitet<span class="left2"></span><span class="right2"></span></h1> <p class="h_right"><a href="' . ess::$s['rpath'] . '/node/3">Hjelp</a></p> <div class="bg1" style="padding-bottom: 1em"> <p>Her kan du gjøre enkle forbrytelser. Type forbrytelse er forskjellig fra bydel til bydel. Sannsynligheten justerer seg etter resultatet av forrige forsøk.</p>'; // siste utført? if ($this->krim->last) { echo ' <p>Du utførte kriminalitet sist den ' . ess::$b->date->get($this->krim->last['last'])->format(date::FORMAT_SEC) . ' på ' . game::$bydeler[$this->krim->last['b_id']]['name'] . '.</p>'; } echo ' <boxes />'; // er det noe ventetid? if ($this->krim->wait) { echo ' <p>Du må vente ' . game::counter($this->krim->wait, true) . ' før du kan utføre kriminalitet på nytt.</p>'; } // har vi ingen alternativer? if (count($this->krim->options) == 0) { echo ' <p>Det er ingen alternativer å utføre i denne bydelen. Prøv en annen bydel.</p>'; } else { ess::$b->page->add_css(' .krim_boks { clear: both; position: relative; padding: 0 0 0 85px; border: 1px solid #232323; background-color: #222222; margin: 0.7em 0 0; background-repeat: no-repeat; background-position: 0; height: 75px; } .krim_boks p, .krim_boks h4 { margin: 0; padding: 0; position: absolute } .krim_boks p { color: #CCCCCC } .krim_boks.krim_color { background-color: #262626; } .krim_boks.krim_last { background-color: #2D1E1E; } .krim_boks .krim_img { float: left; margin-right: 5px; } .krim_boks h4 { top: 8px; } .krim_strength { bottom: 23px; } .krim_rank { bottom: 23px; right: 8px; } .krim_info { bottom: 8px; } .krim_wait { right: 8px; bottom: 8px; } .krim_cash { right: 8px; top: 8px; font-weight: bold; }'); if ($this->krim->wait) { ess::$b->page->add_js_domready(' $$("div.krim_boks input").setStyle("display", "none");'); } else { ess::$b->page->add_js_domready(' $$("div.krim_boks").each(function(elm) { elm.setStyle("cursor", "pointer"); elm.addEvents({ "mouseover": function() { this.setStyle("background-color", "#181818"); }, "mouseout": function() { this.setStyle("background-color", ""); }, "click": function() { $("theid") .set("value", this.get("rel")) .form.submit(); } }); elm.set("title", "Klikk for å utføre"); elm.getElement("input").setStyle("display", "none"); });'); } echo ' <form action="" method="post"> ' . $this->form->getHTMLInput() . ' <input type="hidden" name="theid" value="" id="theid" />'; $i = 0; $show_id = ess::session_get("krim_last_id"); foreach ($this->krim->options as $row) { $rank = game::format_num($row['points']); echo ' <div class="krim_boks' . (++$i % 2 == 0 ? ' krim_color' : '') . ($show_id == $row['id'] ? ' krim_last' : '') . '" style="background-image: url(' . STATIC_LINK . '/krim/' . (empty($row['img']) ? 'none.png' : $row['img']) . ')" rel="' . $row['id'] . '"> <h4> <input type="submit" name="id' . $row['id'] . '" value="Utfør" /> ' . htmlspecialchars($row['name']) . ' </h4> <p class="krim_strength">' . game::format_num(round($row['prob'] * 100, 1), 1) . ' % sannsynlighet</p> <p class="krim_rank">Poeng: ' . $rank . '</p> <p class="krim_info">' . game::format_number($row['success']) . ' av ' . game::format_number($row['count']) . ' vellykkede forsøk (' . ($row['count'] == 0 ? '0' : game::format_number($row['success'] / $row['count'] * 100, 1)) . ' %)</p> <p class="krim_wait">Ventetid: ' . $row['wait_time'] . ' sek.</p> <p class="krim_cash">' . game::format_cash($row['cash_min']) . ' til ' . game::format_cash($row['cash_max']) . '</p> </div>'; } echo ' </form>'; } echo ' </div> </div>'; }
/** * Overføre penger */ protected function overfor() { $mottaker = postval("mottaker"); $amount = game::intval(postval("amount")); // kontroller at vi har nok penger $result = \Kofradia\DB::get()->query("SELECT {$amount} <= up_bank FROM users_players WHERE up_id = " . $this->up->id); $amount_ok = $result->fetchColumn(0) == 1; // sjekk beløpet if ($amount <= 0) { ess::$b->page->add_message("Ugyldig beløp.", "error"); return; } if ($amount < 50) { ess::$b->page->add_message("Du må sende minimum 50 kr.", "error"); return; } if (!$amount_ok) { ess::$b->page->add_message("Du har ikke så mye penger i banken.", "error"); return; } // har vi ikke tilgang (NoStatUser) if (access::is_nostat() && !access::has("admin")) { ess::$b->page->add_message("Du er NoStatUser og kan ikke sende penger!", "error"); return; } // sjekk session if (postval("sid") != login::$info['ses_id']) { ess::$b->page->add_message("Startet du ikke overføringen selv? :o", "error"); return; } // sjekk mottaker $result = \Kofradia\DB::get()->query("SELECT up_id, up_u_id, up_name, up_access_level, up_bank_ff_id FROM users_players WHERE up_name = " . \Kofradia\DB::quote($mottaker) . " ORDER BY up_access_level = 0, up_last_online DESC LIMIT 1"); $player = $result->fetch(); // ingen gyldig mottaker? if (!$player) { ess::$b->page->add_message("Fant ikke mottakeren.", "error"); return; } // seg selv? if ($player['up_id'] == $this->up->id) { ess::$b->page->add_message("Du kan ikke sende til deg selv.", "error"); return; } // død mottaker? if ($player['up_access_level'] == 0) { ess::$b->page->add_message('<user id="' . $player['up_id'] . '" /> er død. Hvem skal motta pengene?!'); return; } $result = \Kofradia\DB::get()->query("SELECT uc_info FROM users_contacts WHERE uc_u_id = {$player['up_u_id']} AND uc_contact_up_id = " . $this->up->id . " AND uc_type = 2"); $blokkert = $result->rowCount() > 0; $blokkert_info = $blokkert ? $result->fetchColumn(0) : false; // sjekk bankkontoen til mottaker $bank = page_banken_bank::get($player['up_bank_ff_id']); // ingen bankkonto? if (!$bank) { ess::$b->page->add_message("Mottakeren har ingen bankkonto du kan sende til.", "error"); return; } // blokkert? if ($blokkert && !access::has("crewet")) { // blokkert $reason = game::bb_to_html($blokkert_info); $reason = empty($reason) ? '' : ' Begrunnelse: ' . $reason; ess::$b->page->add_message("Denne spilleren har blokkert deg, og du kan derfor ikke sende personen penger.{$reason}", "error"); return; } $note = mb_substr(postval("note"), 0, 100); // hoppe over overføringstapet? $skip_bog = false; if (isset($_POST['skip_bog']) && access::is_nostat()) { $skip_bog = true; $this->bank->overforingstap = 0; $bank->overforingstap = 0; } // regn ut hvor mye penger som skal bli til overs etc $result = \Kofradia\DB::get()->query("SELECT ROUND({$amount} * {$this->bank->overforingstap}), ROUND({$amount} * {$bank->overforingstap}), ROUND({$amount} * {$this->bank->overforingstap}) + ROUND({$amount} * {$bank->overforingstap}), {$amount} - ROUND({$amount} * {$this->bank->overforingstap}) - ROUND({$amount} * {$bank->overforingstap}), {$amount} - ROUND({$amount} * {$this->bank->overforingstap})"); $info = $result->fetch(\PDO::FETCH_NUM); // 0 -> tap sender // 1 -> tap mottaker // 2 -> tap totalt // 3 -> til overs (det som mottakeren får) // 4 -> mellombeløp (utgangsbeløpet - tap sender) // kontrollere at overføringen ikke blir utført flere ganger $form = \Kofradia\Form::getByDomain("banken_" . $player['up_id'], login::$user); // bekreftet? if (isset($_POST['confirm']) && isset($_POST['ovt_s']) && isset($_POST['ovt_m']) && $form->validateHashOrAlert()) { // kontroller overføringstapene (slik at det ikke har skjedd noen endringer) $ovt_s = postval("ovt_s"); $ovt_m = postval("ovt_m"); if ($ovt_s != $this->bank->overforingstap || $ovt_m != $bank->overforingstap) { // det har endret seg login::data_set("banken_ovt_endret", true); } else { // start transaksjon \Kofradia\DB::get()->beginTransaction(); // send pengene $a = \Kofradia\DB::get()->exec("UPDATE users_players AS s, users_players AS m SET s.up_bank = s.up_bank - {$amount}, m.up_bank = m.up_bank + {$info[3]} WHERE s.up_id = " . $this->up->id . " AND m.up_id = {$player['up_id']} AND s.up_bank >= {$amount}"); // mislykket? if ($a == 0) { ess::$b->page->add_message("Noe gikk galt under overføringen.", "error"); \Kofradia\DB::get()->commit(); } else { // lagre overføringslogg \Kofradia\DB::get()->exec("INSERT INTO bank_log SET bl_sender_up_id = " . $this->up->id . ", bl_receiver_up_id = {$player['up_id']}, amount = {$info[4]}, time = " . time()); // oppdater senderen \Kofradia\DB::get()->exec("UPDATE users_players SET up_bank_sent = up_bank_sent + {$info[4]}, up_bank_profit = up_bank_profit - {$info[4]}, up_bank_num_sent = up_bank_num_sent + 1, up_bank_charge = up_bank_charge + {$info[0]} WHERE up_id = " . $this->up->id); // oppdater mottakeren \Kofradia\DB::get()->exec("UPDATE users_players SET up_bank_received = up_bank_received + {$info[4]}, up_bank_profit = up_bank_profit + {$info[4]}, up_bank_num_received = up_bank_num_received + 1, up_bank_charge = up_bank_charge + {$info[1]} WHERE up_id = {$player['up_id']}"); // spillelogg (med melding) $player2 = new player($player['up_id']); $player2->add_log("bankoverforing", $info[4] . ":" . $note, $this->up->id); // legg til transaksjonsrader if ($info[0] > 0) { \Kofradia\DB::get()->exec("INSERT INTO ff_bank_transactions SET ffbt_ff_id = {$this->bank->id}, ffbt_time = " . time() . ", ffbt_amount = {$amount}, ffbt_profit = {$info[0]}"); } if ($info[1] > 0) { \Kofradia\DB::get()->exec("INSERT INTO ff_bank_transactions SET ffbt_ff_id = {$bank->id}, ffbt_time = " . time() . ", ffbt_amount = {$amount}, ffbt_profit = {$info[1]}"); } // IRC logg putlog("LOG", "%c9%uBANKOVERFØRING:%u%c (%u" . $this->up->data['up_name'] . "%u) sendte (%u" . game::format_cash($amount) . "%u (%u{$info[3]}%u)) til (%u{$player['up_name']}%u) (TAP: " . game::format_cash($info[2]) . ") " . (!empty($note) ? 'Melding: (' . $note . ')' : 'Ingen melding.')); ess::$b->page->add_message('Du overførte <b>' . game::format_cash($info[4]) . '</b> til <user id="' . $player['up_id'] . '" />.' . ($info[0] > 0 ? ' Banken din tok <b>' . game::format_cash($info[0]) . '</b> i overføringsgebyr.' : '')); \Kofradia\DB::get()->commit(); // trigger $this->up->update_money(-$amount, false, false, null); $player2->update_money($info[3], false, false, null); redirect::handle(); } } } ess::$b->page->add_css('.dl_bank dd { text-align: right }'); // vis godkjenn form echo ' <h1>Banken - overføring</h1> <form action="" method="post"> <input type="hidden" name="mottaker" value="' . htmlspecialchars($mottaker) . '" /> <input type="hidden" name="amount" value="' . $amount . '" /> <input type="hidden" name="note" value="' . htmlspecialchars($note) . '" /> <input type="hidden" name="ovt_s" value="' . $this->bank->overforingstap . '" /> <input type="hidden" name="ovt_m" value="' . $bank->overforingstap . '" /> ' . $form->getHTMLInput(); // hoppe over overføringstapet? if ($skip_bog) { echo ' <input type="hidden" name="skip_bog" />'; } echo ' <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <div style="width: 200px; padding-left: 100px; float: left"> <div class="section"> <h2>Avsender</h2> <dl class="dl_30"> <dt>Kontoeier</dt> <dd>' . game::profile_link() . '</dd> <dt>Bankfirma</dt> <dd><a href="ff/?ff_id=' . $this->bank->id . '">' . htmlspecialchars($this->bank->data['ff_name']) . '</a></dd> <dt><abbr title="Overføringstap">Overf.tap</abbr></dt> <dd>' . $this->bank->overforingstap * 100 . ' %</dd> <dt>Plassering</dt> <dd>' . (!isset(game::$bydeler[$this->bank->data['br_b_id']]) ? '<span style="color: #777777">Ukjent</span>' : htmlspecialchars(game::$bydeler[$this->bank->data['br_b_id']]['name'])) . '</dd> </dl> </div> </div> <div style="width: 200px; padding-left: 20px; float: left"> <div class="section"> <h2>Mottaker</h2> <dl class="dl_30"> <dt>Kontoeier</dt> <dd><user id="' . $player['up_id'] . '" /></dd> <dt>Bankfirma</dt> <dd><a href="ff/?ff_id=' . $bank->id . '">' . htmlspecialchars($bank->data['ff_name']) . '</a></dd> <dt><abbr title="Overføringstap">Overf.tap</abbr></dt> <dd>' . $bank->overforingstap * 100 . ' %</dd> <dt>Plassering</dt> <dd>' . (!isset(game::$bydeler[$bank->data['br_b_id']]) ? '<span style="color: #777777">Ukjent</span>' : htmlspecialchars(game::$bydeler[$bank->data['br_b_id']]['name'])) . '</dd> </dl> </div> </div> <div class="clear" style="width: 420px; margin-left: 100px"> <div class="section"> <h2>Overføringsinformasjon</h2> <dl class="dl_40 dl_bank"> <dt>Overføringsbeløp</dt> <dd>' . game::format_cash($amount) . '</dd>'; // hopper over overføringstapet? if ($skip_bog) { echo ' <dt>Hopper over overføringstapet</dt> <dd>NoStat</dd>'; } echo ' <dt>Overføringstap for avsender</dt> <dd>' . game::format_cash($info[0]) . '</dd> <dt>Overføringstap for mottaker</dt> <dd>' . game::format_cash($info[1]) . '</dd> <dt>Mottaker får</dt> <dd>' . game::format_cash($info[3]) . '</dd> <dt>Melding</dt> <dd>' . (empty($note) ? 'Ingen melding.' : game::bb_to_html($note)) . '</dd> </dl> <h4> ' . show_sbutton("Utfør overføring", 'name="confirm"') . ' ' . show_sbutton("Avbryt/endre", 'name="abort"') . ' </h4> </div> </div> </form>'; ess::$b->page->load(); }
/** * 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(); }
<?php \Kofradia\Form::cleanDatabase();
/** * Behandle forespørsel */ protected function page_handle() { $access = $this->ff->access(1); $this->form = \Kofradia\Form::getByDomain("firma", login::$user); ess::$b->page->add_title("Bankkontroll"); // hent antall klienter $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT COUNT(up_id)\n\t\t\tFROM users_players\n\t\t\tWHERE up_access_level != 0 AND up_access_level < " . ess::$g['access_noplay'] . " AND up_bank_ff_id = {$this->ff->id}"); $num_klienter = $result->fetchColumn(0); // finn ut nåværende status $status = $this->ff->params->get("bank_overforing_tap_change", 0); $status_text = $status == 0 ? 'Ingen endring' : ($status > 0 ? 'Øke ' . game::format_number($status * 100, 2) . ' %' : 'Synke ' . game::format_number(abs($status) * 100, 2) . ' %'); // finn "tilgjengelige" overføringer $expire_ffbt = time() - 3600; $result = \Kofradia\DB::get()->query("SELECT COUNT(ffbt_id), SUM(ffbt_amount), SUM(ffbt_profit) FROM ff_bank_transactions WHERE ffbt_ff_id = {$this->ff->id} AND ffbt_up_id = 0 AND ffbt_time >= {$expire_ffbt}"); $info = $result->fetch(\PDO::FETCH_NUM); // nåværende overføringsgebyr $overforing_tap = $this->ff->params->get("bank_overforing_tap", 0); // forandre fortjeneste? if (isset($_POST['fortjenestep_2']) && isset($_POST['fortjenestep_0']) && $access) { // kontroller verdier $fortjenestep_2 = intval($_POST['fortjenestep_2']); $fortjenestep_0 = intval($_POST['fortjenestep_0']); //$this->ff->params_lock(); $this->ff->params->lock(); $i = 0; // medeier if ($fortjenestep_2 > 40 || $fortjenestep_2 < 5) { ess::$b->page->add_message("Fortjenesten for {$this->ff->type['priority'][2]} kan ikke være under 5 % eller over 40 %.", "error"); $i++; } elseif ($fortjenestep_2 != $this->ff->params->get("fortjenestep_2", 0.25) * 100) { $this->ff->params->update("fortjenestep_2", $fortjenestep_2 / 100); ess::$b->page->add_message("Fortjenesten for " . $this->ff->type['priority'][2] . " er nå på " . $fortjenestep_2 . " %."); $i++; } // øvrige ansatte if ($fortjenestep_0 > 40 || $fortjenestep_0 < 5) { ess::$b->page->add_message("Fortjenesten for øvrige ansatte kan ikke være under 5 % eller over 40 %.", "error"); $i++; } elseif ($fortjenestep_0 != $this->ff->params->get("fortjenestep_0", 0.1) * 100) { $this->ff->params->update("fortjenestep_0", $fortjenestep_0 / 100); ess::$b->page->add_message("Fortjenesten for øvrige ansatte er nå på " . $fortjenestep_0 . " %."); $i++; } // ingen som ble endret? if ($i == 0) { ess::$b->page->add_message("Ingen endringer ble utført."); } //$this->ff->params_save(); $this->ff->params->commit(); redirect::handle(); } // hente gebyr? if (isset($_POST['hent_gebyr']) && $this->form->validateHashOrAlert()) { // ingen gebyr å hente? if ($info[0] == 0) { ess::$b->page->add_message("Det er ingen gebyr å hente.", "error"); redirect::handle(); } // sjekk at det har gått lang nok tid siden forrige gang // FIXME: denne er ikke i bruk (bank_gebyr_siste blir aldri satt) $expire = $this->ff->uinfo->params->get("bank_gebyr_siste", 0) + 900; if ($expire > time()) { ess::$b->page->add_message("Du må vente " . ess::$b->date->get($expire)->format(date::FORMAT_SEC) . " før du kan hente nye gebyr.", "error"); redirect::handle(); } \Kofradia\DB::get()->beginTransaction(); // oppdater gebyrene til vår bruker \Kofradia\DB::get()->exec("UPDATE ff_bank_transactions SET ffbt_up_id = " . login::$user->player->id . " WHERE ffbt_ff_id = {$this->ff->id} AND ffbt_up_id = 0 AND ffbt_time >= {$expire_ffbt}"); // finn ut hvor mange prosent vi skal få og firmaet skal få $p_player = $access ? 0.5 : ($this->ff->access(2) ? $this->ff->params->get("fortjenestep_2", 0.25) : $this->ff->params->get("fortjenestep_0", 0.1)); $p_firma = max(0, 0.5 - $p_player); // hent ut informasjon om hvor mye vi fikk $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT COUNT(ffbt_id), SUM(ffbt_amount), SUM(ffbt_profit)*{$p_player}, SUM(ffbt_profit)*{$p_firma}\n\t\t\t\tFROM ff_bank_transactions\n\t\t\t\tWHERE ffbt_ff_id = {$this->ff->id} AND ffbt_up_id = " . login::$user->player->id . " AND ffbt_status = 0"); $info = $result->fetch(\PDO::FETCH_NUM); // 0 => antall, 1 => overført, 2 => profit bruker, 3 => profit firma // sett pengene til riktige steder \Kofradia\DB::get()->exec("\n\t\t\t\tUPDATE users_players, ff, ff_bank_transactions, ff_members, (\n\t\t\t\t\t\tSELECT SUM(ffbt_profit) AS ffbt_profit_sum\n\t\t\t\t\t\tFROM ff_bank_transactions\n\t\t\t\t\t\tWHERE ffbt_ff_id = {$this->ff->id} AND ffbt_up_id = " . login::$user->player->id . " AND ffbt_status = 0\n\t\t\t\t\t) AS ref\n\t\t\t\tSET up_cash = up_cash + ffbt_profit_sum*{$p_player}, ff_bank = ff_bank + ffbt_profit_sum*{$p_firma}, ffbt_status = 1, ffm_earnings = ffm_earnings + ffbt_profit_sum*{$p_player}, ffm_earnings_ff = ffm_earnings_ff + ffbt_profit_sum*{$p_firma}\n\t\t\t\tWHERE ffbt_ff_id = {$this->ff->id} AND ffbt_up_id = " . login::$user->player->id . " AND ffbt_status = 0 AND up_id = ffbt_up_id AND ff_id = ffbt_ff_id AND ffm_ff_id = ff_id AND ffm_up_id = up_id"); // oppdater stats $this->ff->stats_update("money_in", $info[3]); // TODO: Slette ffbt oppføringene \Kofradia\DB::get()->commit(); // ingen ble oppdatert? if ($info[0] == 0) { ess::$b->page->add_message("Det er ingen gebyr å hente.", "error"); } else { ess::$b->page->add_message("Du hentet {$info[0]} gebyr og fikk totalt " . game::format_cash($info[2]) . ". " . game::format_cash($info[1]) . " var blitt overført. Firmaet fikk " . game::format_cash($info[3]) . "."); } redirect::handle(); } // finn ut hvor lang tid det er til neste endring $date = ess::$b->date->get(); $next_update = 3600 - $date->format("i") * 60 - $date->format("s"); // endre overføringsgebyr if (isset($_POST['eog_value']) && $access) { // sjekk at verdien er en av de vi kan velge? $step = floatval($_POST['eog_value']); if (!in_array($step, ff::$type_bank['eog_steps'])) { ess::$b->page->add_message("Verdien du valgte var ikke gyldig.", "error"); redirect::handle("bank?ff_id={$this->ff->id}"); } $this->ff->params->lock(); $overforing_tap = $this->ff->params->get("bank_overforing_tap", 0); // øke? if ($step > 0) { // allerede på topp? if ($overforing_tap >= ff::$type_bank['bank_overforing_gebyr_max']) { ess::$b->page->add_message("Overføringsgebyret kan ikke økes mer.", "error"); $this->ff->params->commit(); redirect::handle("bank?ff_id={$this->ff->id}"); } // overstiger maks? if ($step + $overforing_tap > ff::$type_bank['bank_overforing_gebyr_max']) { $step = ff::$type_bank['bank_overforing_gebyr_max'] - $overforing_tap; } } elseif ($step < 0) { // allerede på bunn? if ($overforing_tap <= ff::$type_bank['bank_overforing_gebyr_min']) { ess::$b->page->add_message("Overføringsgebyret kan ikke senkes mer.", "error"); $this->ff->params->commit(); redirect::handle("bank?ff_id={$this->ff->id}"); } // overstiger min? if ($step + $overforing_tap < ff::$type_bank['bank_overforing_gebyr_min']) { $step = ff::$type_bank['bank_overforing_gebyr_min'] - $overforing_tap; } } // lagre $this->ff->params->update("bank_overforing_tap_change", $step, true); if ($step == 0) { ess::$b->page->add_message("Overføringsgebyret vil ikke lengre bli endret."); } else { $status = $step > 0 ? 'økt med ' . game::format_number($step * 100, 2) . ' %' : 'senket med ' . game::format_number(abs($step) * 100, 2) . ' %'; ess::$b->page->add_message('Overføringsgebyret vil bli ' . $status . ' til ' . game::format_number(($overforing_tap + $step) * 100, 2) . ' % om ' . game::counter($next_update) . '.'); } redirect::handle("bank?ff_id={$this->ff->id}"); } echo ' <!--<h1>Bankkontroll</h1>--> <div class="section" style="width: 250px; margin-left: auto; margin-right: auto"> <h2>Bankinformasjon</h2>' . ($access ? ' <p class="h_right eog_off"><a href="../js" onclick="handleClass(\'.eog_on\', \'.eog_off\', event, this.parentNode.parentNode)">Endre overføringsgebyr</a></p> <p class="h_right eog_on hide"><a href="../js" onclick="handleClass(\'.eog_off\', \'.eog_on\', event, this.parentNode.parentNode)">Avbryt endringer</a></p>' : '') . ' <dl class="dd_right' . ($access ? ' eog_off' : '') . '"> <dt>Overføringsgebyr</dt> <dd>' . game::format_number($overforing_tap * 100, 2) . ' %</dd> <dt>Neste endring</dt> <dd>' . $status_text . '</dd> <dt>Tid før neste endring</dt> <dd>' . game::counter($next_update) . '</dd> <dt>Antall klienter</dt> <dd>' . game::format_number($num_klienter) . '</dd> </dl>'; if ($access) { echo ' <form action="" method="post" class="eog_on hide"> <dl class="dd_right"> <dt>Nåværende overføringsgebyr</dt> <dd>' . game::format_number($overforing_tap * 100, 2) . ' %</dd> <dt>Nåværende status</dt> <dd>' . $status_text . '</dd> <dt>Ny handling</dt> <dd> <select name="eog_value">'; $active = in_array($status, ff::$type_bank['eog_steps']) ? $status : 0; foreach (ff::$type_bank['eog_steps'] as $step) { $status = $step == 0 ? 'Ingen endring' : ($step > 0 ? 'Øke ' . game::format_number($step * 100, 2) . ' %' : 'Senke ' . game::format_number(abs($step) * 100, 2) . ' %'); echo ' <option value="' . $step . '"' . ($step == $active ? ' selected="selected"' : '') . '>' . $status . '</option>'; } echo ' </select> </dd> </dl> <p class="c"> <input type="submit" class="button" value="Lagre endringer" /> <a href="../js" class="button" onclick="handleClass(\'.eog_off\', \'.eog_on\', event, this.parentNode.parentNode.parentNode)">Avbryt endringer</a> </p> <div class="hr"></div> <p>Overføringsgebyret blir endret hver hele time og handlingen fortsetter til du endrer den eller du når en av grensene.</p> <dl class="dd_right"> <dt>Minimumsverdi</dt> <dd>' . game::format_number(ff::$type_bank['bank_overforing_gebyr_min'] * 100, 2) . ' %</dd> <dt>Maksimumsverdi</dt> <dd>' . game::format_number(ff::$type_bank['bank_overforing_gebyr_max'] * 100, 2) . ' %</dd> </dl> </form>'; } echo ' </div> <div class="section" style="width: 250px; margin-left: auto; margin-right: auto"> <h2>Overføringsgebyr</h2> <p class="h_right"> <a href="../js" onclick="abortEvent(event);hideClass(\'bankinfo0\');showClass(\'bankinfo1\')" class="bankinfo0">Vis informasjon</a> <a href="../js" onclick="abortEvent(event);hideClass(\'bankinfo1\');showClass(\'bankinfo0\')" class="bankinfo1 hide">Skjul informasjon</a> </p> <dl class="dd_right"> <dt>Uhentede gebyr</dt> <dd>' . game::format_number($info[0]) . '</dd> <dt> </dt> <dd>' . game::format_cash($info[2]) . '</dd> <dt> </dt> <dd>(' . game::format_cash($info[1]) . ')</dd> </dl> <div class="bankinfo1 hide j"> <div class="hr"></div> <p> For at banken skal motta overføringsgebyrene må disse hentes inn før det har gått 60 minutter etter at overføringen har skjedd. </p> <p> Den som henter inn gebyrene mottar en viss prosent av gebyrets beløp: </p> <ul> <li>' . ucfirst($this->ff->type['priority'][1]) . ': 50 %</li> <li>' . ucfirst($this->ff->type['priority'][2]) . ': ' . intval($this->ff->params->get("fortjenestep_2", 0.25) * 100) . ' % (' . intval(50 - $this->ff->params->get("fortjenestep_2", 0.25) * 100) . ' % til firmaet)</li> <li>Øvrige ansatte: ' . intval($this->ff->params->get("fortjenestep_0", 0.1) * 100) . ' % (' . intval(50 - $this->ff->params->get("fortjenestep_0", 0.1) * 100) . ' % til firmaet)</li></li> </ul> <p> Når du har hentet inn nåværende gebyr må du vente 15 minutter til neste gang du kan hente inn gebyr. </p> </div>' . ($info[0] > 0 ? ' <form action="" method="post"> ' . $this->form->getHTMLInput() . ' <h4>' . show_sbutton("Hent gebyr", 'name="hent_gebyr"') . '</h4> </form>' : '') . ' </div>'; // endre fortjeneste if ($access) { echo ' <div class="section w250 center"> <h2>Endre fortjeneste</h2> <p>Som eier kan du bestemme hvor mange prosent de som henter ut gebyrene skal få. Du må velge mellom 5 % og 40 %. Firmaet får det som er igjen av totalt 50 %.</p> <form action="" method="post"> <dl class="dd_right dl_2x"> <dt>' . ucfirst($this->ff->type['priority'][2]) . '</dt> <dd><input name="fortjenestep_2" type="text" value="' . intval($this->ff->params->get("fortjenestep_2", 0.25) * 100) . '" class="styled w30 r" /> %</dd> <dt>Øvrige ansatte</dt> <dd><input name="fortjenestep_0" type="text" value="' . intval($this->ff->params->get("fortjenestep_0", 0.1) * 100) . '" class="styled w30 r" /> %</dd> </dl> <h4>' . show_sbutton("Lagre endringer") . '</h4> </form> </div>'; } }
/** * Get unused hash * * Will create a new object if current hash is used * but will not return this object * * The variable 'unused' will be set if a new * object is created */ public function getHashUnused() { if (!$this->isUsed()) { $this->unused = static::getByDomain($this->domain, $this->user); return $this->unused->getHash(); } return $this->getHash(); }
/** * Sykehus */ public function __construct(player $up = null, ff $ff) { parent::__construct($up); $this->ff = $ff; $show = $this->up && $this->ff->active; if ($show) { // i fengsel eller bomberom? if ($this->up->fengsel_require_no(false) || $this->up->bomberom_require_no(false)) { return; } // sett opp skjema $this->form = \Kofradia\Form::getByDomain("sykehus", login::$user); // utføre et alternativ? if (isset($_POST['sykehus'])) { $this->action(); } // utføre sykebil if (isset($_POST['sykebil']) && $this->sykebil()) { return; } } // vis alternativene echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Sykehus<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <boxes /> <p>Sykehus gir deg muligheten til å øke din energi slik at helsen din går mye fortere opp enn hva den ville gjort utenom. Energien kan ved hjelp av sykehus gå over 100 %.</p>'; // ventetid? $wait = $this->calc_wait(); if ($wait > 0) { echo ' <p>Du må vente ' . game::counter($wait, true) . ' før du kan benytte deg av sykehus på nytt.</p>'; } elseif ($show && $this->up->data['up_b_id'] != $this->ff->data['br_b_id']) { echo ' <p>Du må befinne deg i samme bydel som sykehuset for å kunne benytte deg av det.</p>'; // har vi lite nok energi til å ta sykebil? if ($this->up->get_energy_percent() < self::ENERGY_SYKEBIL_REQ) { echo ' <div style="background-color: #533; padding: 1px 10px"> <p>Du har svært lite energi. Hvis du føler du står i fare for å dø og ikke har nok energi for å reise via bydeler, kan du få en sykebil til å hente deg.</p> <p>Når du blir hentet av en sykebil, vil du bli fraktet til bydelen sykehuset befinner seg i uten å miste noe helse eller energi. Du vil deretter kunne utføre alternativene for å få energi.</p> <p>Ved å benytte seg av dette alternativet <b>må du ofre 25 % av din totale rank</b>.</p> <form action="" method="post"> <p class="c">' . show_sbutton("Be om sykebil", 'name="sykebil"') . '</p> </form> </div>'; } } elseif ($show) { // vis alternativene echo ' <form action="" method="post"> ' . $this->form->getHTMLInput() . ' <table class="table center"> <thead> <tr> <th>Alternativ</th> <th>Pris</th> </tr> </thead> <tbody>'; $i = 0; $last_id = ess::session_get("sykehus_last_id"); foreach (self::$options as $id => $row) { echo ' <tr class="box_handle' . (++$i % 2 == 0 ? ' color' : '') . '"> <td><input type="radio" name="id" value="' . $id . '"' . ($last_id == $id ? ' checked="checked"' : '') . ' />' . htmlspecialchars($row['name']) . '</td> <td class="r">' . game::format_cash($row['price']) . '</td> </tr>'; } echo ' </tbody> </table> <p class="c">' . show_sbutton("Utfør handling", 'name="sykehus"') . '</p> </form>'; } echo ' <p class="c"><a href="' . ess::$s['relative_path'] . '/node/57">Mer informasjon om sykehus</a></p> </div> </div>'; }
/** * Vis oversikt over garasjen */ protected function garasje_show() { ess::$b->page->add_title("Garasje"); // kjøpe garasje? if (isset($this->parts[1]) && $this->parts[1] == "kjop") { redirect::store("/gta/garasje/kjop", redirect::ROOT); return $this->garasje_kjop_show(); } // avslutte garasje? if (isset($this->parts[1]) && $this->parts[1] == "avslutt") { redirect::store("/gta/garasje/avslutt", redirect::ROOT); return $this->garasje_avslutt_show(); } // endre garasje? if (isset($this->parts[1]) && $this->parts[1] == "endre") { redirect::store("/gta/garasje/endre", redirect::ROOT); return $this->garasje_endre_show(); } // vise detaljer over garasje? if (isset($this->parts[1]) && $this->parts[1] == "detaljer") { redirect::store("/gta/garasje/detaljer", redirect::ROOT); return $this->garasje_details_show(); } // betale leie? if (isset($this->parts[1]) && $this->parts[1] == "betale") { redirect::store("/gta/garasje/betale", redirect::ROOT); return $this->garasje_betale_show(); } // skjema $this->form = \Kofradia\Form::getByDomain("gta_garasje", login::$user); // anti-bot $this->antibot = antibot::get("biltyveri", 10); $this->antibot->check_required(ess::$s['rpath'] . '/gta'); // flytte biler? if (isset($_POST['flytt'])) { return $this->garasje_flytt_show(); } // selge biler? if (isset($_POST['selg'])) { $this->garasje_selg_handle(); } // hent informasjon om garasjen $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ugg_time, ugg_time_next_rent, ugg_cost_total, ugg_places, ff_id, ff_name\n\t\t\tFROM users_garage\n\t\t\t\tLEFT JOIN ff ON ff_id = ugg_ff_id\n\t\t\tWHERE ugg_up_id = {$this->gta->up->id} AND ugg_b_id = {$this->gta->up->data['up_b_id']}"); $garasje = $result->fetch(); // kan vi betale nå? $can_pay = $garasje && gta::can_pay($garasje['ugg_time_next_rent']); echo ' <div class="col2_w" style="margin: 50px 50px 0"> <div class="col_w left" style="width: 50%"> <div class="col"> <div class="bg1_c center" style="width: 85%"> <h1 class="bg1">Garasje på ' . htmlspecialchars($this->gta->up->bydel['name']) . '<span class="left2"></span><span class="right2"></span></h1> <div class="bg1">' . (!$garasje ? ' <p class="c">Du har ingen garasje i denne bydelen.</p> <p class="c"><a href="&rpath;/gta/garasje/kjop">Lei ny garasje</a></p>' : ' <dl class="dd_right"> <dt>Utleiefirma</dt> <dd><a href="&rpath;/ff/?ff_id=' . $garasje['ff_id'] . '">' . htmlspecialchars($garasje['ff_name']) . '</a></dd> <dt>Kapasitet</dt> <dd>' . game::format_num($garasje['ugg_places']) . '</dd> <dt>Neste betalingsfrist</dt> <dd>' . ess::$b->date->get($garasje['ugg_time_next_rent'])->format() . ($can_pay ? '<br /><a href="&rpath;/gta/garasje/betale">Betal leie før fristen</a>' : '') . '</dd> </dl> <p class="c"><a href="&rpath;/gta/garasje/detaljer">Vis flere detaljer</a></p> <p>Leie for neste periode må betales innen betalingsfristen' . ($can_pay ? '' : ' og blir mulig 3 dager før fristen') . '.</p>') . ' </div> </div> </div> </div> <div class="col_w right" style="width: 50%"> <div class="col"> <p class="c" style="margin-top: 0"><img src="&staticlink;/gta/garasje.jpg" alt="Garasje" style="border: 3px solid #1F1F1F" /></p> </div> </div> </div>'; if ($garasje) { // hent bilene i garasjen $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 15); $result = $pagei->query("\n\t\t\t\tSELECT s.id, s.gtaid, s.time, s.time_last_move, s.b_id_org, s.b_id, g.brand, g.model, g.img_mini, g.value, s.damage\n\t\t\t\tFROM users_gta AS s LEFT JOIN gta AS g ON s.gtaid = g.id\n\t\t\t\tWHERE ug_up_id = {$this->gta->up->id} AND s.b_id = {$this->gta->up->data['up_b_id']}\n\t\t\t\tORDER BY s.time DESC"); echo ' <div class="bg1_c xmedium"> <h1 class="bg1">Biler i garasjen<span class="left2"></span><span class="right2"></span></h1> <div class="bg1">'; // har vi ingen biler? if ($result->rowCount() == 0) { echo ' <p>Det er ingen biler plassert i denne garasjen. Bilene du stjeler vil bli plassert i garasjen i bydelen du oppholder deg.</p>'; } else { echo ' <form action="" method="post"> ' . $this->form->getHTMLInput() . ' <table class="table tablemt center"> <thead> <tr> <th><a href="#" class="box_handle_toggle" rel="bil[]">Merk alle</a></th> <th>Merke/Modell</th> <th>Dato anskaffet</th> <th>Skade</th> <th>Verdi</th> </tr> </thead> <tbody>'; $i = 0; while ($row = $result->fetch()) { echo ' <tr class="box_handle' . (++$i % 2 == 0 ? ' color' : '') . '"> <td><input type="checkbox" id="bil_' . $row['id'] . '" name="bil[]" value="' . $row['id'] . '" />' . (empty($row['img_mini']) ? ' ' : '<img src="' . $row['img_mini'] . '" alt="Bilde" />') . '</td> <td>' . htmlspecialchars($row['brand']) . '<br /><b>' . htmlspecialchars($row['model']) . '</b></td> <td>' . ess::$b->date->get($row['time'])->format() . '</td> <td align="right">' . $row['damage'] . ' %</td> <td align="right">' . game::format_cash($row['value'] * ((100 - $row['damage']) / 100)) . '</td> </tr>'; } echo ' </tbody> </table>' . ($pagei->pages > 1 ? ' <p class="c">' . $pagei->pagenumbers() . '</p>' : '') . ' <p class="c"> ' . show_sbutton("Selg biler", 'name="selg"') . ' ' . show_sbutton("Flytt biler", 'name="flytt"') . ' </p> </form>'; } echo ' </div> </div>'; } }