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(); }
/** * 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(); }
/** * 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>'; }
/** * 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(); }
/** * 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>'; } }