/** * 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(); }
/** * Kjør konkurransen og trekk vinnere */ public function run() { // hent informasjon om runden $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT COUNT(id), COUNT(DISTINCT IF(up_id IS NOT NULL AND up_access_level != 0, l_up_id, NULL))\n\t\t\tFROM lotto LEFT JOIN users_players ON l_up_id = up_id"); $row = $result->fetch(\PDO::FETCH_NUM); $this->antall = $row[0]; $this->brukere = $row[1]; // ingen deltakere? if ($this->antall == 0) { putlog("INFO", "%bLOTTO%b: Ingen spillere deltok i denne lottorunden!"); return; } $this->premier = lotto::$premier; // korriger ranken i forhold til antall spillere som har deltatt if ($this->brukere < lotto::PLAYERS_TOP) { $f = min(1, $this->brukere / lotto::PLAYERS_TOP); for ($i = 0; $i < 5; $i++) { $this->premier[$i][0] = round($this->premier[$i][0] * $f); } } // sett opp fordeling av gevinsten if ($this->brukere < 5) { // beregn hvor mye som blir fordelt i utgangspunktet $tot = 0; for ($i = 0; $i < $this->brukere; $i++) { $tot += $this->premier[$i][1]; } // beregn maks som kan fordeles $max = $tot; for (; $i < 5; $i++) { $max += $this->premier[$i][1]; } // korriger utgangspunktet for ($i = 0; $i < $this->brukere; $i++) { $this->premier[$i][1] = $this->premier[$i][1] * $max / $tot; } } // beregn hvor mye man tjener $lodd_pris = lotto::get_lodd_price(); $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT\n\t\t\t\t{$this->antall} * {$lodd_pris},\n\t\t\t\t{$this->antall} * {$lodd_pris} * {$this->premier[0][1]},\n\t\t\t\t{$this->antall} * {$lodd_pris} * {$this->premier[1][1]},\n\t\t\t\t{$this->antall} * {$lodd_pris} * {$this->premier[2][1]},\n\t\t\t\t{$this->antall} * {$lodd_pris} * {$this->premier[3][1]},\n\t\t\t\t{$this->antall} * {$lodd_pris} * {$this->premier[4][1]}"); $row = $result->fetch(\PDO::FETCH_NUM); $this->pott = $row[0]; for ($i = 1; $i <= 5; $i++) { $this->premier[$i - 1][2] = round($row[$i]); } $this->vinnere = array(); $this->vinnere_text = array(); putlog("INFO", "%bLOTTO%b: " . game::format_number($this->brukere) . " spiller" . ($this->brukere == 1 ? '' : 'e') . " deltok i denne lottorunden med totalt " . game::format_number($this->antall) . " lodd og en pott på " . game::format_cash($this->pott) . "!"); $to = min(5, $this->brukere); for ($i = 1; $i <= $to; $i++) { $this->give_prize($i); } if (count($this->vinnere) == 0) { putlog("INFO", "%bLOTTO%b: Ingen spillere deltok i denne lottorunden!"); } else { // melding $ekstra = ""; $ekstra_l = ""; if (count($this->vinnere_text) > 1) { $e = array(); $el = array(); foreach ($this->vinnere_text as $n => $u) { if ($n == 0) { continue; } $e[] = "%u{$u}%u"; $el[] = '<user id="' . $this->vinnere[$n] . '" />'; } $ekstra = " 2" . (count($this->vinnere_text) > 2 ? '-' . count($this->vinnere_text) : '') . " plass ble " . implode(", ", $e); $ekstra_l = " 2" . (count($this->vinnere) > 2 ? '-' . count($this->vinnere) : '') . " plass ble " . sentences_list($el) . "."; } putlog("INFO", "%bLOTTO%b: %u{$this->vinnere_text[0]}%u vant runden!{$ekstra}"); // live-feed //livefeed::add_row('<user id="'.$this->vinnere[0].'" /> vant lottorunden.'.$ekstra_l); } // fjern loddene som var kjøpt \Kofradia\DB::get()->exec("DELETE FROM lotto"); }