/** * 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(); }
/** * Sett antall meldinger per side */ protected function set_per_page() { $ps = (int) $_POST['ps']; if ($ps > 0 && $ps <= 200) { login::data_set("innboks_per_side", $ps); } redirect::handle($this->addr(array("ps"))); }
/** * Utfør biltyveri */ protected function biltyveri_utfor() { $wait = $this->gta->calc_wait(); // form sjekking if (!$this->form->validateHashOrAlert(null, ($wait[1] ? "Siste=" . game::timespan($wait[1], game::TIME_SHORT | game::TIME_NOBOLD) . ";" : "First;") . ($wait[0] ? "%c11Ventetid=" . game::timespan($wait[0], game::TIME_NOBOLD | game::TIME_SHORT) . "%c" : "%c9No-wait%c"))) { return; } // har vi noe ventetid? if ($wait[0] > 0) { redirect::handle(); } // har vi ikke garasje i denne bydelen eller ingen ledige plasser? $bydeler = $this->gta->get_bydeler_info(); if (!$bydeler[$this->gta->up->data['up_b_id']]['ff_id'] || $bydeler[$this->gta->up->data['up_b_id']]['garage_free'] == 0) { redirect::handle(); } // finnes alternativet? if (!isset($this->gta->options[postval("option_id")])) { ess::$b->page->add_message("Ukjent alternativ!", "error"); redirect::handle(); } // utfør $result = $this->gta->biltyveri_utfor(postval("option_id")); $fengsel_msg = $result['wanted_change'] > 0 ? ' Wanted nivået økte med ' . game::format_number($result['wanted_change'] / 10, 1) . ' %.' : ''; if (!$result['success']) { ess::$b->page->add_message("Du mislykket forsøket.{$fengsel_msg}", NULL, NULL, "gta_result"); } else { ess::$b->page->add_message('<div style="overflow: hidden; padding-top: 4px"><img src="' . htmlspecialchars($result['gta']['img_mini']) . '" alt="" style="float: left; margin: -4px 5px 0 0; border: 2px solid #292929" />' . $result['message'] . $fengsel_msg . '</div>', NULL, NULL, "gta_result"); } // lagre alternativ login::data_set("biltyveri_alternativ_" . $this->gta->up->data['up_b_id'], postval("option_id")); // oppdater anti-bot if (!access::has("mod")) { $this->antibot->increase_counter(); } redirect::handle(); }
/** * Starte en utfordring */ protected function start() { if (!isset($_POST['amount']) || $this->is_starter) { return; } $amount = game::intval($_POST['amount']); // for lite beløp? if (bccomp($amount, self::MIN_BET) == -1) { ess::$b->page->add_message("Du må satse minimum " . game::format_cash(self::MIN_BET) . ".", "error"); redirect::handle(); } // ikke råd? if (bccomp($amount, $this->up->data['up_cash']) == 1) { ess::$b->page->add_message("Du har ikke så mye penger på hånda.", "error"); redirect::handle(); } // nonstatuser? if (bccomp($amount, 10000) == 1 && MAIN_SERVER && (access::is_nostat() && $this->up->data['up_u_id'] != 1)) { ess::$b->page->add_message("Nostat kan ikke spille poker med beløp over 10 000 kr.", "error"); redirect::handle(); } login::data_set("poker_siste_innsats", $amount); // trekk fra pengene fra spilleren $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash - {$amount} WHERE up_id = " . $this->up->id . " AND up_cash >= {$amount}"); if ($a == 0) { ess::$b->page->add_message("Du har ikke så mye penger på hånda.", "error"); redirect::handle(); } // start pokerspill $poker = new CardsPoker(); $poker->new_cards(5); \Kofradia\DB::get()->exec("INSERT INTO poker SET poker_starter_up_id = " . $this->up->id . ", poker_starter_cards = " . \Kofradia\DB::quote(implode(",", $poker->get_cards())) . ", poker_time_start = " . time() . ", poker_cash = {$amount}, poker_state = 1"); redirect::handle(); }
/** * Kontroller at vi er logget inn i banken */ protected function auth_verify() { // alltid logget inn i banken når man er logget inn som crew if (isset(login::$extended_access['authed'])) { return; } // sjekk om vi er logget inn i banken $last = login::data_get("banken_last_view", 0); $idle = 1800; // hvor lenge vi kan være inaktiv $exceed = max(0, time() - $last - $idle); // allerede logget inn? if ($last != 0 && $exceed == 0) { login::data_set("banken_last_view", time()); return; } // logge inn? if (isset($_POST['passord'])) { if (!password::verify_hash($_POST['passord'], login::$user->player->user->data['u_bank_auth'], "bank_auth")) { ess::$b->page->add_message("Passordet var ikke riktig. Husk at dette er bank passordet og ikke passordet til brukerkontoen.", "error"); putlog("ABUSE", "%c4%bUGYLDIG PASSORD I BANKEN (FF):%b%c %u" . login::$user->player->data['up_name'] . "%u ({$_SERVER['REMOTE_ADDR']}) brukte feil passord for å logge inn i banken"); } else { // logget inn login::data_set("banken_last_view", time()); ess::$b->page->add_message("Du er nå logget inn i banken. Du blir logget ut etter " . game::timespan($idle, game::TIME_FULL) . " uten å besøke banken."); } redirect::handle(); } echo ' <div class="bg1_c xsmall"> <h1 class="bg1"> Banken <span class="left"></span><span class="right"></span> </h1> <div class="bg1"> <boxes />'; if ($exceed > 0 && $last != 0) { login::data_set("banken_last_view", 0); echo ' <p>Det gikk for lang tid siden du viste banken og du må logge inn på nytt. Du var ' . game::timespan($exceed, game::TIME_FULL) . ' over tiden.</p>'; } // javascript for fokus til passord feltet ess::$b->page->add_body_post('<script type="text/javascript"> document.getElementById("b_pass").focus(); </script>'); echo ' <p>Du må logge inn for å få tilgang til banken for ' . $this->ff->type['refobj'] . '.</p> <form action="" method="post"> <dl class="dd_right dl_2x"> <dt>Bankpassord</dt> <dd><input type="password" class="styled w100" name="passord" id="b_pass" /></dd> </dl> <p class="c">' . show_sbutton("Logg inn") . '</p> <p class="c"><a href="' . ess::$s['relative_path'] . '/banken?rp">Nullstill bankpassord</a></p> </form> </div> </div>'; $this->ff->load_page(); }