Esempio n. 1
0
 public function action_index()
 {
     $this->needUser();
     $this->ut = new \Kofradia\Game\Utpressing($this->user->player);
     \ess::$b->page->add_title("Utpressing");
     \kf_menu::$data['utpressing'] = true;
     // kontroller fengsel, bomberom og energi
     $this->user->player->fengsel_require_no();
     $this->user->player->bomberom_require_no();
     $this->user->player->energy_require(\Kofradia\Game\Utpressing::ENERGY * 1.3);
     // legg til 30 % for krav
     // kontroller anti-bot
     $this->antibot = \antibot::get("utpressing", static::ANTIBOT_SPAN);
     $this->antibot->check_required();
     // skjema
     $this->form = \Kofradia\Form::getByDomain("utpressing", $this->user);
     // sett opp hvilke ranker som kan angripes
     $this->rank_min = max(1, $this->user->player->rank['number'] - 1);
     $this->rank_max = min($this->rank_min + 3, count(\game::$ranks['items']));
     if ($this->rank_max - $this->rank_min < 3) {
         $this->rank_min = max(1, $this->rank_max - 3);
     }
     // sørg for at man har 4 alternativer uavhengig av rank
     // utføre utpressing?
     if (isset($_POST['utpressing'])) {
         $ret = $this->utpress();
         if (!$ret) {
             return \redirect::handle();
         }
         return $ret;
     }
     return $this->showForm();
 }
Esempio n. 2
0
 /**
  * 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();
 }
Esempio n. 3
0
    /**
     * 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>';
    }
Esempio n. 4
0
    /**
     * 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>';
    }
Esempio n. 5
0
 /**
  * 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();
 }
Esempio n. 6
0
    /**
     * 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']) ? '&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>' . ($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>';
        }
    }