예제 #1
0
 /**
  * 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();
 }
예제 #2
0
 /**
  * Utfør kriminalitet
  */
 protected function utfor()
 {
     // form sjekking
     if (!$this->form->validateHashOrAlert(null, ($this->krim->last ? "Siste=" . game::timespan($this->krim->last['last'], game::TIME_ABS | game::TIME_SHORT | game::TIME_NOBOLD) . ";" : "First;") . ($this->krim->wait ? "%c11Ventetid=" . game::timespan($this->krim->wait, game::TIME_SHORT | game::TIME_NOBOLD) . "%c" : "%c9No-wait%c"))) {
         return;
     }
     // kontroller at vi ikke har noe ventetid
     if ($this->krim->wait) {
         redirect::handle();
     }
     // finn id
     $id = intval(postval("theid"));
     if (!$id) {
         $found = false;
         foreach ($_POST as $name => $val) {
             $matches = false;
             if (preg_match("/^id([1-9]+|[1-9][0-9]+)\$/Du", $name, $matches)) {
                 $id = $matches[1];
             }
         }
     }
     // har ikke oppføringen?
     if (!isset($this->krim->options[$id])) {
         ess::$b->page->add_message("Ugyldig valg.", "error");
         redirect::handle();
     }
     // lagre valget
     ess::session_put("krim_last_id", $id);
     // utfør kriminalitet
     $result = $this->krim->utfor($id);
     $fengsel_msg = $result['wanted_change'] > 0 ? ' Wanted nivået økte med ' . game::format_number($result['wanted_change'] / 10, 1) . ' %.' : '';
     $msg = $result['success'] ? $this->krim->get_random_message($id, true, $result['cash'], $result['rank']) : $this->krim->get_random_message($id, false);
     ess::$b->page->add_message($msg . $fengsel_msg);
     // oppdater anti-bot
     $this->antibot->increase_counter();
     // oppdater siden
     redirect::handle();
 }
예제 #3
0
파일: angrip.php 프로젝트: Kuzat/kofradia
    /**
     * 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>';
    }
예제 #4
0
파일: lotto.php 프로젝트: Kuzat/kofradia
 /**
  * Kjøpe lodd
  */
 protected function lodd_kjop()
 {
     // nostat?
     if (access::is_nostat() && !access::has("sadmin") && MAIN_SERVER) {
         ess::$b->page->add_message("Du har ikke tilgang til å spille lotto. (NoStat)", "error");
         redirect::handle();
     }
     if (!$this->form->validateHashOrAlert(null, ($this->last > 0 ? "Previous=" . game::timespan($this->last, game::TIME_ABS | game::TIME_SHORT | game::TIME_NOBOLD) . ";" : "First;") . ($this->active ? "Active;" : "NOT-ACTIVE;") . ($this->wait ? "%c11Ventetid=" . game::timespan($this->wait, game::TIME_SHORT | game::TIME_NOBOLD) . "%c" : "%c9No-wait%c"))) {
         return;
     }
     if (isset($_POST['b'])) {
         global $__server;
         putlog("ABUSE", "Trolig bot: " . login::$user->player->data['up_name'] . " - Skjult skjema sendt (Lotto) SID=" . login::$info['ses_id'] . " " . $__server['path'] . "/min_side?up_id=" . login::$user->player->id);
     }
     // ikke aktiv?
     if (!$this->active) {
         ess::$b->page->add_message("Lottoen er ikke aktiv for øyeblikket!", "error");
         redirect::handle();
     }
     // ventetid?
     if ($this->wait > 0) {
         ess::$b->page->add_message('Du må vente ' . game::counter($this->wait, true) . ' før du kan kjøpe nye lodd!', "error");
         redirect::handle();
     }
     $lodd = intval($_POST['lodd']);
     // ikke gyldig?
     if ($lodd < 1) {
         ess::$b->page->add_message("Du må minimum kjøpe ett lodd!", "error");
         redirect::handle();
     }
     // for mange lodd?
     if ($lodd > lotto::$lodd_maks_om_gangen) {
         ess::$b->page->add_message("Du kan maks kjøpe " . game::format_number(lotto::$lodd_maks_om_gangen) . " lodd på en gang!", "error");
         redirect::handle();
     }
     // kan vi kjøpe så mange lodd?
     if ($lodd > lotto::$lodd_maks - $this->info['antall_lodd']) {
         ess::$b->page->add_message("Du kan ikke kjøpe så mange lodd!", "error");
         redirect::handle();
     }
     $lodd_price = lotto::get_lodd_price();
     $cost = $lodd * $lodd_price;
     // trekk fra pengene
     $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash - ({$lodd} * " . $lodd_price . ") WHERE up_id = " . login::$user->player->id . " AND up_cash >= ({$lodd} * " . $lodd_price . ")");
     if ($a == 0) {
         ess::$b->page->add_message("Du har ikke nok penger på hånda!", "error");
         redirect::handle();
     }
     // gi loddene til brukeren
     $q = array();
     $time = time();
     for ($i = 0; $i < $lodd; $i++) {
         $q[] = "(" . login::$user->player->id . ", {$time})";
     }
     \Kofradia\DB::get()->exec("INSERT INTO lotto (l_up_id, time) VALUES " . implode(",", $q));
     // energi
     login::$user->player->energy_use(self::ENERGY);
     ess::$b->page->add_message("Du har kjøpt <b>" . game::format_number($lodd) . "</b> lottolodd for <b>" . game::format_cash($lodd * $lodd_price) . "</b>!");
     $this->antibot->increase_counter();
     redirect::handle();
 }
예제 #5
0
파일: index.php 프로젝트: Kuzat/kofradia
 /**
  * Behandle kjøp av kuler
  */
 protected function bullets_buy()
 {
     // kontroller skjema
     if (!$this->bullets_form->validateHashOrAlert(null, "Kjøpe kuler")) {
         return;
     }
     // kan vi ikke kjøpe kuler for øyeblikket?
     if (DISABLE_BUY_VAP && !access::has("mod")) {
         ess::$b->page->add_message("Kjøp av kuler er for øyeblikket deaktivert.", "error");
         redirect::handle();
     }
     // har vi ikke valgt antall kuler som skal kjøpes
     $buy_ant = (int) postval("bullets");
     if ($buy_ant <= 0) {
         ess::$b->page->add_message("Du må skrive inn antall kuler du ønsker å kjøpe.", "error");
         redirect::handle();
     }
     // finn ut hvor mange kuler som er til salgs
     $result = \Kofradia\DB::get()->query("SELECT COUNT(*) FROM bullets WHERE bullet_ff_id = {$this->ff->id} AND bullet_time <= " . time() . " AND (bullet_freeze_time = 0 OR bullet_freeze_time <= " . time() . ")");
     $ant = $result->fetchColumn(0);
     // for mange kuler vi ønsker å kjøpe?
     $h = ess::$b->date->get()->format("H");
     if ($buy_ant > $ant || $h < 20 || $h >= 22) {
         ess::$b->page->add_message("Det er ikke så mange kuler til salgs.", "error");
         return;
     }
     // vil dette føre til at vi får for mange kuler?
     if ($this->up->data['up_weapon_bullets'] + $this->up->data['up_weapon_bullets_auksjon'] + $buy_ant > $this->up->weapon->data['bullets']) {
         ess::$b->page->add_message("Du har ikke plass til så mange kuler. Du kan maksimalt ha <b>" . $this->up->weapon->data['bullets'] . "</b>." . ($this->up->data['up_weapon_bullets_auksjon'] > 0 ? " (Teller også med kuler du forsøker å selge/kjøpe på auksjon.)" : ""), "error");
         return;
     }
     // har vi ikke nok penger?
     $price = $buy_ant * $this->up->weapon->data['bullet_price'];
     if ($this->up->data['up_cash'] < $price) {
         ess::$b->page->add_message("Du har ikke nok penger på hånda. For å kjøpe {$buy_ant} " . fword("kule", "kuler", $buy_ant) . " må du ha " . game::format_cash($price) . " på hånda.", "error");
         return;
     }
     \Kofradia\DB::get()->beginTransaction();
     // forsøk å skaff alle kulene
     $a = \Kofradia\DB::get()->exec("\n\t\t\tUPDATE bullets\n\t\t\tSET bullet_freeze_up_id = " . $this->up->id . ", bullet_freeze_time = " . (time() + self::BULLET_FREEZE_WAIT) . "\n\t\t\tWHERE bullet_ff_id = {$this->ff->id} AND bullet_time <= " . time() . " AND (bullet_freeze_time = 0 OR bullet_freeze_time <= " . time() . ")\n\t\t\tORDER BY bullet_time\n\t\t\tLIMIT {$buy_ant}");
     // feil antall kuler anskaffet?
     if ($a != $buy_ant) {
         // reverser transaksjon
         \Kofradia\DB::get()->rollback();
         // informer
         ess::$b->page->add_message("Det er ikke så mange kuler til salgs.", "error");
         return;
     }
     \Kofradia\DB::get()->commit();
     // kjør anti-bot
     $this->bullets_antibot->increase_counter();
     $this->bullets_antibot->check_required(ess::$s['relative_path'] . "/ff/?ff_id={$this->ff->id}");
     redirect::handle();
 }
예제 #6
0
파일: gta.php 프로젝트: Kuzat/kofradia
    /**
     * Flytte biler til en annen garasje
     */
    protected function garasje_flytt_show()
    {
        ess::$b->page->add_title("Flytt biler");
        // hent informasjon om bilene
        $biler = array();
        $biler_q = array();
        if (isset($_POST['bil'])) {
            if (is_array($_POST['bil'])) {
                $biler_q = array_unique(array_map("intval", $_POST['bil']));
            } else {
                $biler_q = array_unique(array_map("intval", explode(",", $_POST['bil'])));
            }
            if (count($biler_q) > 0) {
                // hent bilinformasjon
                $result = \Kofradia\DB::get()->query("\n\t\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\t\tFROM users_gta AS s JOIN gta AS g ON s.gtaid = g.id\n\t\t\t\t\tWHERE ug_up_id = {$this->gta->up->id} AND s.b_id = {$this->gta->up->data['up_b_id']} AND s.id IN (" . implode(",", $biler_q) . ")\n\t\t\t\t\tORDER BY s.time DESC");
                $biler_q = array();
                while ($row = $result->fetch()) {
                    $biler[] = $row;
                    $biler_q[] = $row['id'];
                }
            }
        }
        // ingen biler?
        if (count($biler) == 0) {
            ess::$b->page->add_message("Du må merke noen biler du ønsker å flytte.");
            redirect::handle();
        }
        // hent garasjeoversikt
        $bydeler = $this->gta->get_bydeler_info();
        // flytte bilene til en garasje?
        if (isset($_POST['flyttdo']) && $this->form->validateHashOrAlert(null, "Flytte biler")) {
            // har vi ikke valgt noen bydel?
            if (!isset($_POST['bydel']) || !isset($bydeler[$_POST['bydel']])) {
                ess::$b->page->add_message("Du må velge en bydel du ønsker å flytte bilene til.");
            } else {
                // har vi ikke stor nok kapasitet i denne bydelen
                $bydel = $bydeler[$_POST['bydel']];
                if ($bydel['garage_free'] < count($biler)) {
                    ess::$b->page->add_message("Det er ikke ledig plass til alle bilene du ønsker å flytte i bydelen <b>" . htmlspecialchars(game::$bydeler[$bydel['b_id']]['name']) . "</b>.", "error");
                } else {
                    // flytt bilene
                    $a = \Kofradia\DB::get()->exec("\n\t\t\t\t\t\tUPDATE users_gta\n\t\t\t\t\t\tSET time_last_move = " . time() . ", b_id = {$bydel['b_id']}\n\t\t\t\t\t\tWHERE ug_up_id = {$this->gta->up->id} AND b_id = {$this->gta->up->data['up_b_id']} AND id IN (" . implode(",", $biler_q) . ")");
                    ess::$b->page->add_message("Du flyttet <b>" . $a . "</b> biler til <b>" . htmlspecialchars(game::$bydeler[$bydel['b_id']]['name']) . "</b>.");
                    $this->antibot->increase_counter();
                    redirect::handle();
                }
            }
        }
        // vis oversikt over garasjer vi kan velge mellom
        echo '
<form action="" method="post">
	' . $this->form->getHTMLInput() . '
	<input type="hidden" name="bil" value="' . implode(",", $biler_q) . '" />
	<input type="hidden" name="flytt" />
	<div class="bg1_c xsmall">
		<h1 class="bg1">Flytte biler (' . count($biler) . ' stk)<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<p class="c">Velg bydel bilene skal flyttes til:</p>
			<table class="table center">
				<thead>
					<tr>
						<th>Bydel</th>
						<th>Utleiefirma</th>
						<th>Ledige plasser</th>
					</tr>
				</thead>
				<tbody>';
        $i = 0;
        foreach ($bydeler as $row) {
            $bydel = game::$bydeler[$row['b_id']];
            if (!$bydel['active'] || $row['b_id'] == $this->gta->up->data['up_b_id']) {
                continue;
            }
            echo '
					<tr class="box_handle' . (++$i % 2 == 0 ? ' color' : '') . '">
						<td><input type="radio" name="bydel"' . ($row['ff_id'] ? '' : ' disabled="disabled"') . ' value="' . $row['b_id'] . '" />' . htmlspecialchars($bydel['name']) . '</td>';
            // ingen garasje?
            if (!$row['ff_id']) {
                echo '
						<td colspan="2" class="c dark"><i>Ingen garasje</i></td>';
            } else {
                echo '
						<td><a href="&rpath;/ff/?ff_id=' . $row['ff_id'] . '">' . htmlspecialchars($row['ff_name']) . '</a></td>
						<td>' . $row['garage_free'] . '</td>';
            }
            echo '
					</tr>';
        }
        echo '
				</tbody>
			</table>
			<p class="c">' . show_sbutton("Flytt bilene", 'name="flyttdo"') . ' <a href="&rpath;/gta/garasje">Avbryt</a></p>
		</div>
	</div>
</form>
<div class="bg1_c xmedium">
	<h1 class="bg1">Biler som vil bli flyttet<span class="left2"></span><span class="right2"></span></h1>
	<div class="bg1">
		<table class="table tablem center">
			<thead>
				<tr>
					<th>&nbsp;</th>
					<th>Merke/Modell</th>
					<th>Dato anskaffet</th>
					<th>Skade</th>
					<th>Verdi</th>
				</tr>
			</thead>
			<tbody>';
        $i = 0;
        foreach ($biler as $row) {
            echo '
				<tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '>
					<td>' . (empty($row['img_mini']) ? '&nbsp;' : '<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>
	</div>
</div>';
    }