Пример #1
0
    /**
     * 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();
    }
Пример #2
0
 /**
  * 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")));
 }
Пример #3
0
 /**
  * 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();
 }
Пример #4
0
 /**
  * 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();
 }
Пример #5
0
    /**
     * 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();
    }