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