/** * 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>'; }
/** * 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(); }
return $default; } return $_SESSION[$__server['session_prefix'] . $name]; } /** * Lagre verdi i session */ public static function session_put($name, $value) { global $__server; sess_start(); $_SESSION[$__server['session_prefix'] . $name] = $value; } } global $__server, $_game; ess::$b = new essentials(); ess::$s =& $__server; ess::$g =& $_game; class essentials { public $time_start = 0; public $db_debug = false; public $data = array(); /** For å holde tidsoversikt i scriptet */ public $time_debug = array(); /** * Profiler * * @var \Kofradia\Utils\Profiler */ public $profiler;
/** * 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(); }
/** * Utfør en handling */ protected function action() { // kontroller skjema if (!$this->form->validateHashOrAlert(null, "Sykehus")) { return; } // mangler vi alternativ? if (!isset($_POST['id']) || !isset(self::$options[$_POST['id']])) { ess::$b->page->add_message("Du må velge et alternativ.", "error"); redirect::handle(); } $opt = self::$options[$_POST['id']]; ess::session_put("sykehus_last_id", (int) $_POST['id']); // i feil bydel? if ($this->up->data['up_b_id'] != $this->ff->data['br_b_id']) { redirect::handle(); } // må vi vente? $wait = $this->calc_wait(); if ($wait > 0) { redirect::handle(); } // trekk fra pengene og øk energien $a = \Kofradia\DB::get()->exec("\n\t\t\tUPDATE users_players\n\t\t\tSET up_cash = up_cash - {$opt['price']}, up_energy = up_energy + (" . self::ENERGY_MAX . " - up_energy / up_energy_max) * {$opt['increase']} * up_energy_max * GREATEST(0.2, LEAST(1, up_energy / up_energy_max)), up_sykehus_time = " . time() . "\n\t\t\tWHERE up_id = " . $this->up->id . " AND up_cash >= {$opt['price']}"); // ble ikke oppdatert? if ($a == 0) { ess::$b->page->add_message("Du har ikke nok penger til å utføre dette alternativet.", "error"); redirect::handle(); } putlog("LOG", "SYKEHUS: " . $this->up->data['up_name'] . " utførte alternativet {$opt['name']}. Hadde " . round($this->up->get_energy_percent(), 4) . " % energi før handlingen. " . $this->up->generate_minside_url()); ess::$b->page->add_message("Du utførte alternativet «" . htmlspecialchars($opt['name']) . "»."); redirect::handle(); }