/** Send en bestemt artikkel på e-post */ protected function send_email($row) { $this->email->text('Hei, Siden du ikke lengre er med i avisfirmaet "' . $row['ff_name'] . '" har din artikkel blitt slettet fordi den ikke tilhørte noen utgivelse. I tilfelle du kanskje ønsker å beholde teksten fra artikkelen, sender vi den på e-post. Avisfirma: ' . $row['ff_name'] . ' <' . ess::$s['path'] . '/ff/?ff_id=' . $row['ff_id'] . '> Tittel: ' . $row['ffna_title'] . ' Opprettet: ' . ess::$b->date->get($row['ffna_created_time'])->format(date::FORMAT_SEC) . ($row['ffna_updated_time'] ? ' Sist oppdatert: ' . ess::$b->date->get($row['ffna_updated_time'])->format(date::FORMAT_SEC) : '') . ($row['ffna_published'] ? ' Publisert: ' . ess::$b->date->get($row['ffna_published_time'])->format(date::FORMAT_SEC) : '') . ' Pris: ' . game::format_cash($row['ffna_price']) . ' Innhold: -- START -- ' . $row['ffna_text'] . ' -- SLUTT -- -- Kofradia.no Denne e-posten er sendt til ' . $row['u_email'] . ' som ' . ($row['up_access_level'] == 0 ? 'tidligere tilhørte' : 'tilhører') . ' ' . $row['up_name'] . ' ' . ess::$s['path']); $this->email->format(); mailer::add_emails($this->email, $row['u_email'], "Din tidligere artikkel: {$row['ffna_title']} - Kofradia", true); putlog("CREWCHAN", "AVISARTIKKEL SLETTET: E-post planlagt for utsendelse. %c4Mailer scriptet må kjøres!"); }
/** * Diverse */ protected static function page_diverse() { // hent totalt resultat i poker for siste 30 dager $date = ess::$b->date->get(); $date->modify("-30 days"); $date->setTime(0, 0, 0); $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT SUM(CONVERT(poker_prize - poker_cash, SIGNED) * IF((poker_winner = 1 AND poker_starter_up_id = up_id) OR (poker_winner = 2 AND poker_challenger_up_id = up_id), 1, -1)) sum_result\n\t\t\tFROM poker, users_players\n\t\t\tWHERE poker_time_start >= " . $date->format("U") . " AND up_u_id = " . page_min_side::$active_user->id . " AND (up_id = poker_starter_up_id OR up_id = poker_challenger_up_id) AND poker_state = 4"); $poker_result = $result->fetchColumn(0); OFC::embed("stats_poker", "graphs/poker?up_id=" . page_min_side::$active_player->id, "100%", 250); OFC::embed("stats_poker_num", "graphs/pokernum?up_id=" . page_min_side::$active_player->id, "100%", 250); echo ' <div class="bg1_c"> <h1 class="bg1">Pokerbevegelse siste 30 dager<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p class="c">Totalt resultat siste 30 dager: ' . game::format_cash($poker_result) . '</p> <p><span id="stats_poker"></span></p> <p><span id="stats_poker_num"></span></p> </div> </div>'; }
/** * 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 anti-bot for kuler */ protected function kuler() { // utføre precheck? if (!$this->kuler_num) { if (!$this->kuler_precheck()) { return; } } $time = time(); \Kofradia\DB::get()->beginTransaction(); $price = $this->kuler_num * login::$user->player->weapon->data['bullet_price']; // trekk fra pengene og sjekk samtidig om vi faktisk hadde nok penger $affected = \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash - {$price} WHERE up_id = " . login::$user->player->id . " AND up_cash >= {$price}"); if ($affected == 0) { ess::$b->page->add_message("Du har ikke nok penger på hånda. For å kjøpe {$this->kuler_num} " . fword("kule", "kuler", $this->kuler_num) . " må du ha " . game::format_cash($price) . " på hånda. Kulene ble gjort tilgjengelig for alle igjen.", "error"); \Kofradia\DB::get()->exec("UPDATE bullets SET up_freeze_up_id = NULL, up_freeze_time = 0 WHERE up_freeze_up_id = " . login::$user->player->id); \Kofradia\DB::get()->commit(); return; } // forsøk å skaff alle kulene $affected = \Kofradia\DB::get()->exec("\n\t\t\tDELETE FROM bullets\n\t\t\tWHERE bullet_freeze_up_id = " . login::$user->player->id . " AND bullet_freeze_time > {$time}\n\t\t\tORDER BY bullet_time\n\t\t\tLIMIT {$this->kuler_num}"); // feil antall kuler anskaffet? if ($affected != $this->kuler_num) { // reverser transaksjon \Kofradia\DB::get()->rollback(); // informer putlog("DF", "KJØPE KULER: " . login::$user->player->data['up_name'] . " var for treg med å utføre anti-bot for å kjøpe kuler"); ess::$b->page->add_message("Du var for treg og kulene du ønsket å kjøpe var ikke lenger tilgjengelig.", "error"); return; } // gi kulene til spilleren \Kofradia\DB::get()->exec("UPDATE users_players SET up_weapon_bullets = up_weapon_bullets + {$this->kuler_num} WHERE up_id = " . login::$user->player->id); \Kofradia\DB::get()->commit(); // logg putlog("DF", "KJØPE KULER: " . login::$user->player->data['up_name'] . " kjøpte {$this->kuler_num} kuler for totalt " . game::format_cash($price)); // informer ess::$b->page->add_message("Du kjøpte {$this->kuler_num} " . fword("kule", "kuler", $this->kuler_num) . " for " . game::format_cash($price) . "."); }
<th>Når</th> <th>Plassering</th> <th>Premie</th> <th>Vinnerlodd</th> <th>Solgte lodd</th> <th>Spillere</th> </tr> </thead> <tbody>'; $i = 0; while ($row = $result->fetch()) { $end = ceil(($row['time'] - 900) / 1800) * 1800 + 900; echo ' <tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '> <td class="c">' . $_base->date->get($end)->format() . '<br /><span style="color: #888888">(' . $_base->date->get($row['time'])->format() . ')</a></td> <td class="r">' . ($row['type'] == 1 ? '<b>' . $row['type'] . '. plass</b>' : $row['type'] . '. plass') . '</td> <td class="r">' . game::format_cash($row['won']) . '</td> <td class="c">' . game::format_number($row['l_id']) . '</td> <td class="c">' . game::format_number($row['total_lodd']) . '</td> <td class="c">' . game::format_number($row['total_users']) . '</td> </tr>'; } echo ' </tbody> </table> <p class="c">' . $pagei->pagenumbers(game::address("lotto_vinn", $_GET, array("side")) . "#lotto_vinn", game::address("lotto_vinn", $_GET, array("side"), array("side" => "_pageid_")) . "#lotto_vinn") . '</p>'; } echo ' </div> </div>'; $_base->page->load();
/** * Vis fengsel */ protected function show() { // er vi i fengsel nå? if ($wait = $this->up->fengsel_wait()) { ess::$b->page->add_js_domready('$("fengsel_dusor").focus();'); echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Du er i fengsel<span class="left"></span><span class="right"></span></h1> <p class="h_right"><a href="node/16">Hjelp</a></p> <div class="bg1"> <p>Du befinner deg for øyeblikket i fengsel og slipper ut om ' . game::counter($wait, true) . '.</p>' . (!$this->up->is_nostat() ? ' <form action="" method="post"> <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <input type="hidden" name="expire" value="' . $this->up->data['up_fengsel_time'] . '" /> <dl class="dd_right"> <dt>Dusør for å bryte deg ut</dt> <dd><input type="text" class="styled w80" name="amount" id="fengsel_dusor" value="' . game::format_cash($this->up->data['up_fengsel_dusor']) . '" /></dd> </dl> <p class="c">' . show_sbutton($this->up->data['up_fengsel_dusor'] > 0 ? "Endre dusør" : "Sett dusør", 'name="dusor"') . '</p> <p class="c">Spilleren som bryter ut mottar kun ' . self::DUSOR_PROFIT * 100 . ' % av dusøren.</p> </form>' : '') . ' </div> </div>'; } // sortering $sort = new sorts("sort"); $sort->append("asc", "Spiller", "up_name"); $sort->append("desc", "Spiller", "up_name DESC"); $sort->append("asc", "Wanted nivå", "up_wanted_level, up_fengsel_time DESC"); $sort->append("desc", "Wanted nivå", "up_wanted_level DESC, up_fengsel_time DESC"); $sort->append("asc", "Tid igjen", "up_fengsel_time"); $sort->append("desc", "Tid igjen", "up_fengsel_time DESC"); $sort->set_active(requestval("sort"), 5); // hent folk i fengsel $sort_info = $sort->active(); $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 15); $result = $pagei->query("\n\t\t\tSELECT up_id, up_name, up_access_level, up_fengsel_time, up_fengsel_num, up_fengsel_dusor, ROUND(up_fengsel_dusor * " . self::DUSOR_PROFIT . ") up_fengsel_dusor_get, up_wanted_level\n\t\t\tFROM users_players\n\t\t\tWHERE up_fengsel_time > " . time() . " AND up_access_level != 0\n\t\t\tORDER BY {$sort_info['params']}"); $num = $result->rowCount(); echo ' <div class="bg1_c ' . ($num == 0 ? 'xsmall' : 'xlarge') . '"> <h1 class="bg1">Fengsel<span class="left"></span><span class="right"></span></h1> <p class="h_right"><a href="node/16">Hjelp</a></p> <div class="bg1"> <form action="" method="post"> <p class="c dark">Ditt wanted nivå er på ' . game::format_number($this->up->data['up_wanted_level'] / 10, 1) . ' %.</p>'; if ($num == 0) { echo ' <p class="c dark">Ingen er i fengselet for øyeblikket.</p> <p class="c"><a href="' . htmlspecialchars(game::address("fengsel", $_GET)) . '" class="button">Oppdater</a></p>'; } else { echo ' <table class="table center" width="100%"> <thead> <tr> <th>Spiller ' . $sort->show_link(0, 1) . '</th> <th>Wanted<br />nivå ' . $sort->show_link(2, 3) . '</th> <th>Utbrytning<br />sannsynlighet</th> <th>Ca. poeng</th> <th>Dusør</th> <th>Tid igjen ' . $sort->show_link(4, 5) . '</th> </tr> </thead> <tbody>'; $i = 0; while ($row = $result->fetch()) { $prefix = ""; $attr = new attr("class"); if (++$i % 2 == 0) { $attr->add("color"); } if (!$this->up->fengsel_check()) { $attr->add("box_handle"); $prefix = '<input type="radio" name="up_id" value="' . $row['up_id'] . '_' . $row['up_fengsel_time'] . '_' . $row['up_fengsel_dusor'] . '" /> '; } $time = $row['up_fengsel_time'] - time(); $prob = self::calc_prob($time, $row['up_wanted_level'] / 10); $points = self::calc_points($prob); echo ' <tr' . $attr->build() . '> <td>' . $prefix . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . '</td> <td class="c">' . game::format_number($row['up_wanted_level'] / 10, 1) . ' %</td> <td class="c">' . game::format_number($prob, 1) . ' %</td> <td class="c">' . game::format_num($points) . '</td> <td class="r nowrap">' . game::format_cash($row['up_fengsel_dusor_get']) . '</td> <td class="r">' . game::counter($time) . '</td> </tr>'; } echo ' </tbody> </table> <p class="c">' . (($wait = $this->up->fengsel_wait()) == 0 ? ' ' . show_sbutton("Bryt ut", 'name="brytut"') : ' Du er i fengsel og slipper ut om ' . game::counter($wait, true) . '. </p> <p class="c">') . ' <a href="' . htmlspecialchars(game::address("fengsel", $_GET)) . '" class="button">Oppdater</a> </p>'; // flere sider? if ($pagei->pages > 1) { echo ' <div class="hr"></div> <p class="c"> ' . $pagei->pagenumbers() . ' </p>'; } } echo ' </form> </div> </div>'; // testing if (!MAIN_SERVER || access::is_nostat() && access::has("mod")) { echo ' <div class="bg1_c xxsmall bg1_padding"> <h1 class="bg1">' . (MAIN_SERVER ? 'No-stat' : 'Testing') . '<span class="left"></span><span class="right"></span></h1> <div class="bg1"> <form action="" method="post">' . ($this->up->fengsel_check() ? ' <p class="c">' . show_sbutton("Gå ut av fengsel", 'name="remove"') . '</p>' : ' <dl class="dd_right dl_2x"> <dt>Tid</dt> <dd><input type="text" name="time" value="' . htmlspecialchars(postval("time", 20)) . '" class="styled w40" /> sekunder</dd> </dl> <p class="c">' . show_sbutton("Gå inn i fensgel") . '</p>') . ' </form> </div> </div>'; } }
/** * Vis side med kart */ public function show_full_page() { global $__server; // hent familierangering $ff_list = ff::get_fam_points_rank(); // deaktiver høyre side //define("DISABLE_RIGHT_COL", true); ess::$b->page->add_css(' #default_main { overflow: visible }'); ess::$b->page->add_js_domready(' sm_scripts.load_hm(); window.HM.addEvent("f-changed", function(data) { //$$(".bydeler_filter a").removeClass("active"); $$(".bydeler_ressurs").setStyle("display", "none"); $$(".bydeler_ressurs_"+data).setStyle("display", "block"); //$("f_"+data).addClass("active"); }); window.HM.addEvent("f-removed", function() { //$$(".bydeler_filter a").removeClass("active"); //$("f_").addClass("active"); $$(".bydeler_ressurs").setStyle("display", "block"); }); window.HM.addEvent("b-added", function() { //$$(".bydeler_alt a").removeClass("active"); //$("v_b").addClass("active"); $$(".bydeler_br").setStyle("display", "none"); $$(".bydeler_steder").setStyle("display", "block"); }); window.HM.addEvent("b-removed", function() { //$$(".bydeler_alt a").removeClass("active"); //$("v_").addClass("active"); $$(".bydeler_br").setStyle("display", "block"); $$(".bydeler_steder").setStyle("display", "none"); }); $$(".bydeler_steder").setStyle("display", "none"); $$(".bydeler_alt a").addEvent("click", function(e) { window.HM.remove("f"); window.HM.set("b", ""); e.stop(); }); $$(".bydeler_filter a").addEvent("click", function(e) { window.HM.remove("b"); if (this.get("id") == "f_") window.HM.remove("f"); else window.HM.set("f", this.get("id").substring(2)); e.stop(); }); window.HM.recheck(); '); // sett opp alle FF og sorter dem i y-retning $data = array(); $pos_x = array(); $pos_y = array(); foreach ($this->bydeler as $id => $bydel) { if ($id == 0) { continue; } foreach ($bydel['ff'] as $row) { $pos_x[] = $row['br_pos_x']; $pos_y[] = $row['br_pos_y']; $type = ff::$types[$row['ff_type']]; // familie if ($row['ff_type'] == 1) { $eier = count($row['eier']) == 0 ? 'Ingen leder av broderskapet' : 'Styres av ' . self::list_players($row['eier']); $class = "bydeler_ressurs_familie"; // antall poeng if (isset($ff_list[$row['ff_id']]) && $ff_list[$row['ff_id']]->data['ff_is_crew'] == 0) { $eier .= '<br />' . game::format_num($ff_list[$row['ff_id']]->data['ff_points_sum']) . ' poeng'; } } else { if ($type['type'] == "bomberom") { $eier = count($row['eier']) == 0 ? 'Ingen styrer bomberommet' : 'Styres av ' . self::list_players($row['eier']); } else { $eier = count($row['eier']) == 0 ? 'Ingen eier av firmaet' : 'Eies av ' . self::list_players($row['eier']); } $class = "bydeler_ressurs_firma bydeler_ressurs_{$type['type']}firma"; } $data[] = ' <a href="' . $__server['relative_path'] . '/ff/?ff_id=' . $row['ff_id'] . '" class="bydeler_ressurs ' . $class . '" style="left: ' . $row['br_pos_x'] . '%; top: ' . $row['br_pos_y'] . '%"> <img class="bydeler_ressurs_t" src="' . htmlspecialchars($type['bydeler_graphic']) . '" alt="' . htmlspecialchars($type['bydeler_alt_pre']) . htmlspecialchars($row['ff_name']) . '" /> <span class="bydeler_ressurs_tekst"> ' . htmlspecialchars($row['ff_name']) . '<span class="bydeler_owner"><br /> ' . $eier . '</span> </span> <img class="bydeler_ressurs_graphic" src="' . htmlspecialchars(ff::get_logo_path_static($row['ff_id'], $row['ff_logo_path'])) . '" alt="" /> </a>'; } } array_multisort($pos_y, $pos_x, $data); $bydeler_0 = $this->bydeler[0]; unset($this->bydeler[0]); // sorter bydelene i y-retning $bydeler_x = array(); $bydeler_y = array(); foreach ($this->bydeler as $id => $bydel) { $bydeler_x[] = $bydel['bydel_x']; $bydeler_y[] = $bydel['bydel_y']; } array_multisort($bydeler_x, $bydeler_y, $this->bydeler); // invitasjoner til FF if (count($this->ff_invites) > 0) { echo ' <div class="bg1_c small"> <h1 class="bg1">Invitasjoner<span class="left2"></span><span class="right2"></span></h1> <div class="bg1">'; foreach ($this->ff_invites as $row) { $type = ff::$types[$row['ff_type']]; echo ' <p>Du er invitert til ' . $type['refobj'] . ' <a href="' . $__server['relative_path'] . '/ff/?ff_id=' . $row['ff_id'] . '">' . htmlspecialchars($row['ff_name']) . '</a> som ' . $type['priority'][$row['ffm_priority']] . ' (' . ess::$b->date->get($row['ffm_date_join'])->format(date::FORMAT_NOTIME) . ') - <a href="' . $__server['relative_path'] . '/ff/?ff_id=' . $row['ff_id'] . '">Godta/avslå</a></p>'; } echo ' </div> </div>'; } if (count($this->fff) > 0) { echo ' <div class="bg1_c medium bydeler_br bydeler_ressurs bydeler_ressurs_familie"> <h1 class="bg1">Konkurranse om å danne broderskap<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <table class="table center tablem"> <thead> <tr> <th>Avsluttes</th> <th>Gjenstår</th> <th>Antall broderskap</th> <th>Gjenstående broderskap</th> <th> </th> </tr> </thead> <tbody class="r">'; $i = 0; $free = 0; foreach ($this->fff as $row) { if ($row['ff_count'] < ff::MAX_FFF_FF_COUNT) { $free += ff::MAX_FFF_FF_COUNT - $row['ff_count']; } echo ' <tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '> <td>' . ess::$b->date->get($row['fff_time_expire'])->format(date::FORMAT_SEC) . '</td> <td>' . game::timespan(max(time(), $row['fff_time_expire']), game::TIME_ABS) . '</td> <td>' . $row['ff_count'] . '</td> <td>' . $row['ff_count_active'] . '</td> <td><a href="' . $__server['relative_path'] . '/ff/?fff_id=' . $row['fff_id'] . '">Vis »</a></td> </tr>'; } $create_link = login::$logged_in ? $this->up->rank['number'] < ff::$types[1]['priority_rank'][1] ? ' - Du har ikke høy nok rank til å opprette et broderskap' : ' - Du har høy nok rank - <a href="' . $__server['relative_path'] . '/ff/?create">Opprett broderskap »</a>' : ''; echo ' </tbody> </table>' . ($free > 0 ? ' <p class="c" style="margin-top: 0">Det er ' . $free . ' ' . fword("ledig konkurranseplass", "ledige konkurranseplasser", $free) . $create_link . '</p>' : ' <p class="c" style="margin-top: 0">Ingen ledige konkurranseplasser.</p>') . ' </div> </div>'; } // topp rangerte familier if (count($ff_list) > 0) { echo ' <div class="bg1_c xxsmall bydeler_br bydeler_ressurs bydeler_ressurs_familie"> <h1 class="bg1">Topp rangerte broderskap<span class="left"></span><span class="right"></span></h1> <div class="bg1"> <dl class="dd_right">'; $i = 0; foreach ($ff_list as $ff) { $title = "For rank til medlemmer: " . $ff->data['ff_points_up'] . " - For firma til medlemmer: " . $ff->data['ff_points_ff'] . " - For drap: " . $ff->data['ff_points_kill']; echo ' <dt><a href="' . ess::$s['rpath'] . '/ff/?ff_id=' . $ff->id . '">' . htmlspecialchars($ff->data['ff_name']) . '</a></dt> <dd title="' . $title . '">' . game::format_num($ff->data['ff_points_sum']) . ' poeng</dd>'; // vis kun 3 beste familiene if (++$i == 3) { break; } } echo ' </dl> <p class="c"><a href="' . ess::$s['rpath'] . '/node/19">Poenginformasjon</a></p> </div> </div>'; } kf_menu::$data['bydeler_menu'] = true; echo ' <h1 class="bydeler">Bydeler</h1> <div class="bydeler"> <div class="bydeler_kart bydeler_br"> <img src="' . STATIC_LINK . '/themes/kofradia/drammen_stor.gif" class="bydeler_bg" /> ' . implode('', $data) . ' </div>'; // har vi noen FF som ikke er plassert? if ($bydeler_0['active']) { echo ' <div class="bydeler_uplassert bydeler_br">'; foreach ($bydeler_0['ff'] as $row) { $type = ff::$types[$row['ff_type']]; // familie if ($row['ff_type'] == 1) { $eier = count($row['eier']) == 0 ? 'Ingen leder av broderskapet' : 'Styres av ' . self::list_players($row['eier']); $class = "bydeler_ressurs_familie"; } else { if ($type['type'] == "bomberom") { $eier = count($row['eier']) == 0 ? 'Ingen styrer bomberommet' : 'Styres av ' . self::list_players($row['eier']); } else { $eier = count($row['eier']) == 0 ? 'Ingen eier av firmaet' : 'Eies av ' . self::list_players($row['eier']); } $class = "bydeler_ressurs_firma bydeler_ressurs_{$type['type']}firma"; } echo ' <div class="bydeler_uplassert_boks"> <a href="' . $__server['relative_path'] . '/ff/?ff_id=' . $row['ff_id'] . '" class="bydeler_ressurs ' . $class . '"> <img class="bydeler_ressurs_graphic" src="' . htmlspecialchars(ff::get_logo_path_static($row['ff_id'], $row['ff_logo_path'])) . '" alt="" /> <span class="bydeler_ressurs_tekst"> ' . htmlspecialchars($row['ff_name']) . '<span class="bydeler_owner"><br /> ' . $eier . '</span> </span> <img class="bydeler_ressurs_t" src="' . htmlspecialchars($type['bydeler_graphic']) . '" alt="' . htmlspecialchars($type['bydeler_alt_pre']) . htmlspecialchars($row['ff_name']) . '" /> </a> </div>'; } echo ' </div>'; } echo ' <div class="bydeler_kart bydeler_steder"> <img src="' . STATIC_LINK . '/themes/kofradia/drammen_stor.gif" class="bydeler_bg" />'; foreach ($this->bydeler as $bydel) { if ($bydel['active'] == 0) { continue; } if ($this->up) { $distance = self::calc_travel_distance($this->up->bydel, $bydel); $taxi_price = round($distance * self::TAXI_PRICE_KM); $taxi_points = round($distance * self::TAXI_POINTS_KM * $this->up->rank['number']); } echo ' <div class="map_unit' . ($this->up && $this->up->bydel['id'] == $bydel['id'] ? ' map_active' : '') . '" style="left: ' . $bydel['bydel_x'] . '%; top: ' . $bydel['bydel_y'] . '%" id="map_link_' . $bydel['id'] . '"> <div class="map_title"> <p class="map_link"><b><b><b>' . htmlspecialchars($bydel['name']) . '</b></b></b></p> <div class="bydeler_sted"> <div class="bydeler_sted_info"> <dl class="dd_right"> <dt>Spillere</dt> <dd>' . game::format_number($bydel['num_players']) . '</dd> <dt>Penger i omløp</dt> <dd>' . game::format_cash($bydel['sum_money']) . '</dd> </dl>'; if (!$this->up) { } elseif ($this->up->bydel['id'] == $bydel['id']) { echo ' <p>Du befinner deg i denne bydelen.</p>'; } elseif ($this->up->fengsel_check()) { echo ' <p>Du er i fengsel og kan ikke reise.</p>'; } elseif ($this->up->bomberom_check()) { echo ' <p>Du er i bomberom og kan ikke reise.</p>'; } else { echo ' <div class="bydeler_reise c"> <form action="bydeler" method="post"> <input type="hidden" name="reise" value="' . htmlspecialchars($bydel['name']) . '" />'; // taxi if (!$this->up->energy_check(self::TAXI_ENERGY * 1.3)) { echo ' <p>Du har ikke nok energi til å ta taxi hit.</p>'; } elseif ($this->up->data['up_points'] < $taxi_points * 2) { echo ' <p>Du har ikke høy nok rank til å ta taxi hit.</p>'; } else { echo ' <p>' . show_sbutton("Ta taxi (" . game::format_cash($taxi_price) . ", " . game::format_number(round($taxi_points)) . " poeng)", 'name="taxi"') . '</p>'; } // gta if ($this->gta_count == 0) { echo ' <p>Du har ingen biler i bydelen du oppholder deg i for å reise med.</p>'; } elseif (!$this->gta_garage[$bydel['id']]['garage']) { echo ' <p>Det er ingen garasje i denne bydelen.</p>'; } elseif ($this->gta_garage[$bydel['id']]['garage_free'] == 0) { echo ' <p>Det er ingen ledige plasser i garasjen i denne bydelen.</p>'; } else { echo ' <p>' . show_sbutton("Kjør egen bil", 'name="gta"') . '</p>'; } // teleportere if (access::is_nostat()) { echo ' <p>' . show_sbutton("Teleporter hit (nostat)", 'name="teleporter"') . '</p>'; } echo ' </form> </div>'; } echo ' </div> </div> </div> </div>'; } echo ' </div>'; echo ' </div>'; ess::$b->page->load(); }
/** * Avslå salg */ public function sell_reject() { global $_game; // hent status $status = $this->sell_status(true); if (!$status) { return false; } // sørg for at dette er brukeren som skulle selges til if (!$this->uinfo || $status['up_id'] != $this->uinfo->id) { $this->params->commit(); throw new HSException("Kun brukeren som har mottatt salget kan behandle det."); } // fjern fra params $this->params->remove("sell"); // legg til logg hos selgeren player::add_log_static("ff_diverse", '<user id="' . $status['up_id'] . '" /> avslo kjøpet av ' . $this->refstring . ' <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $this->id . '">' . htmlspecialchars($this->data['ff_name']) . '</a> for ' . game::format_cash($status['amount']) . '.', $this->id, $status['init_up_id']); // logg i FF: {TYPE=reject}:BOSS:UBOSS:FEE:AMOUNT $this->add_log("sell", "reject:{$status['init_up_id']}:{$status['up_id']}:{$status['fee']}:{$status['amount']}"); // avslutt transaction $this->params->commit(); return true; }
/** * Lagre logg over angrep */ protected function attack_log($ret, $attack_type, $vitner_log, player $up) { // sett opp vitner $vitner = count($vitner_log) > 0 ? \Kofradia\DB::quote(serialize($vitner_log)) : 'NULL'; // sett opp liste over FF $ff_defend = array(); $list = $this->get_ff_list(); foreach ($list as $row) { if ($row['ff_is_crew'] != 0) { continue; } $type = ff::$types[$row['ff_type']]; $ff_defend[] = array($row['ff_type'], $row['ff_id'], $type['refobj'], $row['ff_name'], $row['ffm_priority'], $type['priority'][$row['ffm_priority']], $row['ffm_status']); } $ff_defend = count($ff_defend) > 0 ? \Kofradia\DB::quote(serialize($ff_defend)) : 'NULL'; // sett opp liste over FF for angriper $ff_attack = array(); $list = $up->get_ff_list(); foreach ($list as $row) { if ($row['ff_is_crew'] != 0) { continue; } $type = ff::$types[$row['ff_type']]; $ff_attack[] = array($row['ff_type'], $row['ff_id'], $type['refobj'], $row['ff_name'], $row['ffm_priority'], $type['priority'][$row['ffm_priority']], $row['ffm_status']); } $ff_attack = count($ff_attack) > 0 ? \Kofradia\DB::quote(serialize($ff_attack)) : 'NULL'; // legg til i loggen $cash = isset($ret['penger']) ? $ret['penger'] : 0; if (isset($ret['penger_bank'])) { $cash = bcadd($cash, $ret['penger_bank']); } $hitlist = isset($ret['hitlist']) ? $ret['hitlist'] : 0; \Kofradia\DB::get()->exec("INSERT INTO drapforsok SET df_attack_up_id = {$up->id}, df_defend_up_id = {$this->id}, df_time = " . time() . ", df_b_id = " . $up->data['up_b_id'] . ", df_outcome = " . ($ret['drept'] ? 1 : 0) . ", df_rankpoints = {$ret['rankpoeng']}, df_type = {$attack_type}, df_cash = {$cash}, df_hitlist = {$hitlist}, df_vitner = {$vitner}, df_attack_ff_list = {$ff_attack}, df_defend_ff_list = {$ff_defend}, df_bullets = {$ret['bullets']}"); if ($ret['drept']) { // logg if ($attack_type == self::ATTACK_TYPE_UTPRESSING) { putlog("DF", "%c4UTPRESSING DREPT%c: {$up->data['up_name']} ({$up->rank['name']}) presset {$this->data['up_name']} ({$this->rank['name']}). " . $this->generate_minside_url()); } else { putlog("DF", "ANGREP %c4DREPT%c: {$up->data['up_name']} ({$up->rank['name']}) angrep%c3 {$this->data['up_name']}%c ({$this->rank['name']}) med " . $up->weapon->data['name'] . " (" . game::format_number($up->data['up_weapon_training'] * 100, 2) . " % våpentrening) med " . fwords("%d kule", "%d kuler", $ret['bullets']) . ". " . $this->generate_minside_url()); putlog("DF", " - Angrepstyrke: " . game::format_number($ret['attack_skade'][0] * 100, 2) . ", beskyttelsestyrke: " . game::format_number($ret['attack_skade'][1] * 100, 2) . ", skadeprosent: " . game::format_number($ret['skadeprosent'] * 100, 2) . " % av " . weapon::MAX_ATTACK_HEALTH . " helsepoeng"); } putlog("DF", " - Helse: Hadde " . game::format_number($this->get_health_percent(), 3) . " %"); putlog("DF", " - Energi: Hadde " . game::format_number($this->get_energy_percent(), 3) . " %"); if (!$this->protection->data) { putlog("DF", " - Hadde ingen beskyttelse"); } else { putlog("DF", " - Beskyttelse: Hadde {$this->protection->data['name']} med " . game::format_number($this->data['up_protection_state'] * 100, 2) . " % styrke"); } putlog("DF", " - Rankpoeng: {$up->data['up_name']} fikk " . game::format_number($ret['rankpoeng']) . " rankpoeng (" . game::format_rank($ret['rankpoeng'], "all") . " % rank) " . $up->generate_minside_url()); if (count($ret['vitner']) == 0) { putlog("DF", " - Ingen vitner"); } else { foreach ($ret['vitner'] as $vitne) { putlog("DF", " - Vitne: {$vitne['up']->data['up_name']} (" . ($vitne['visible'] ? 'ble oppdaget' : 'ble IKKE oppdaget') . ') ' . $vitne['up']->generate_minside_url()); } } putlog("DF", " - Penger fra hånda: " . game::format_cash($ret['penger'])); if (isset($ret['penger_bank'])) { putlog("DF", " - Penger fra banken: " . game::format_cash($ret['penger_bank'])); } putlog("DF", " - Penger fra hitlist: " . game::format_cash($ret['hitlist'])); foreach ($ret['ffm'] as $ffm) { putlog("DF", " - Var " . $ffm->get_priority_name() . " i " . $ffm->ff->data['ff_name'] . " " . ess::$s['path'] . "/ff/?ff_id={$ffm->ff->id}"); } } elseif ($attack_type == self::ATTACK_TYPE_KILL) { // logg putlog("DF", "ANGREP %c8SKADET%c: {$up->data['up_name']} ({$up->rank['name']}) angrep%c3 {$this->data['up_name']}%c ({$this->rank['name']}) med " . $up->weapon->data['name'] . " (" . game::format_number($up->data['up_weapon_training'] * 100, 2) . " % våpentrening) med " . fwords("%d kule", "%d kuler", $ret['bullets']) . ". " . $this->generate_minside_url()); putlog("DF", " - Angrepstyrke: " . game::format_number($ret['attack_skade'][0] * 100, 2) . ", beskyttelsestyrke: " . game::format_number($ret['attack_skade'][1] * 100, 2) . ", skadeprosent: " . game::format_number($ret['skadeprosent'] * 100, 2) . " % av " . weapon::MAX_ATTACK_HEALTH . " helsepoeng"); putlog("DF", " - Helse: Mistet " . game::format_number($ret['health_lost_p'] * 100, 3) . " % ({$ret['health_lost']}) og har nå%c4 " . game::format_number($ret['health_new_p'] * 100, 3) . " %"); putlog("DF", " - Energi: Mistet " . game::format_number($ret['energy_lost_p'] * 100, 3) . " % ({$ret['energy_lost']}) og har nå%c12 " . game::format_number($ret['energy_new_p'] * 100, 3) . " %"); if ($ret['protection_replaced']) { putlog("DF", " - Beskyttelsen ble erstattet med " . $this->protection->data['name']); } elseif ($ret['protection_lost_p'] == "") { putlog("DF", " - Hadde ingen beskyttelse"); } else { putlog("DF", " - Beskyttelse: Mistet " . game::format_number($ret['protection_lost_p'] * 100, 3) . " % og har nå " . game::format_number($ret['protection_new_p'] * 100, 3) . " %"); } putlog("DF", " - Rankpoeng: {$up->data['up_name']} fikk " . game::format_num($ret['rankpoeng']) . " rankpoeng (offeret mistet " . game::format_num($ret['rankpoeng_lost']) . ") " . $up->generate_minside_url()); if (count($ret['vitner']) == 0) { putlog("DF", " - Ingen vitner"); } else { foreach ($ret['vitner'] as $vitne) { putlog("DF", " - Vitne: {$vitne['up']->data['up_name']} (" . ($vitne['visible'] ? 'ble oppdaget' : 'ble IKKE oppdaget') . ') ' . $vitne['up']->generate_minside_url()); } } putlog("DF", " - Penger fra hånda: " . game::format_cash($ret['penger'])); putlog("DF", " - Penger fra hitlist: " . game::format_cash($ret['hitlist'])); } }
/** * Godta/avslå søknad * @param boolean $outcome - om søknaden blir innvilget eller ikke * @param integer $ds_id * @param string $reason */ public static function decide($outcome, $ds_id, $reason) { global $_base, $__server; $ds_id = (int) $ds_id; // hent søknaden $soknad = self::get($ds_id); // fant ikke søknaden? if (!$soknad) { return false; } // er søknaden allerede behandlet? if ($soknad['ds_reply_decision'] != 0) { return false; } // typen $type = self::get_type($soknad['ds_type']); // har vi tilgang til søknaden? if (!access::has($type['access'])) { return false; } // sjekk for tom begrunnelse $have_reason = trim(game::format_data($reason)) != ""; // sett opp params $params = unserialize($soknad['ds_params']); // sett opp søknadsinfo $info = self::get_info($type['name'], $soknad, $params); // info er ikke gyldig - søknaden er ikke gyldig if (!is_array($info)) { // slett søknaden self::delete($ds_id); return $info; } // avslå søknad if (!$outcome) { $msg = 'bb:' . $type['title'] . ': Din søknad ble avslått. (' . $info['bb'] . ') Begrunnelse: ' . ($have_reason ? $reason : 'Ingen begrunnelse gitt.'); // spesielle handlinger switch ($type['name']) { case "ff_name": // sett tilbakepengene på bankkontoen if (isset($params['cost']) && $params['cost'] > 0) { $msg .= ' Beløpet på ' . game::format_cash($params['cost']) . ' som ble innbetalt ved søknad er satt inn på kontoen igjen.'; ff::bank_static(ff::BANK_TILBAKEBETALING, $params['cost'], $soknad['ds_rel_id'], 'Navnsøknad avslått: ' . $params['name']); } break; } } else { $msg = 'bb:' . $type['title'] . ': Din søknad har blitt innvilget. (' . $info['bb'] . ') Begrunnelse: ' . ($have_reason ? $reason : 'Ingen begrunnelse gitt.'); // spesielle handlinger switch ($type['name']) { case "ff_name": $ff = ff::get_ff($soknad['ds_rel_id'], ff::LOAD_SCRIPT); if ($ff) { $ff->change_name($params['name'], $soknad['ds_up_id']); // lagre gammelt navn på FF i søknaden $params['name_old'] = $info['ff_name']; } break; } } // legg til logg hos spilleren player::add_log_static("soknader", $msg, 0, $soknad['ds_up_id']); // oppdater søknaden \Kofradia\DB::get()->exec("UPDATE div_soknader SET ds_params = " . \Kofradia\DB::quote(serialize($params)) . ", ds_reply_decision = " . ($outcome ? 1 : -1) . ", ds_reply_reason = " . \Kofradia\DB::quote($reason) . ", ds_reply_up_id = " . self::up_id() . ", ds_reply_time = " . time() . " WHERE ds_id = {$ds_id}"); // oppdater cache tasks::set("soknader", \Kofradia\DB::get()->query("SELECT COUNT(ds_id) FROM div_soknader WHERE ds_reply_decision = 0")->fetchColumn(0)); return $info; }
/** * Formatter tekst for premie (og gi ut hvis spesifisert) */ protected function prize($give = false) { // mulige premier: // * cash // * points // * bullets $params = new params($this->a->data['ac_prize']); $text = array(); // cash if ($cash = $params->get("cash")) { if ($give) { $this->up->update_money($cash); } $text[] = game::format_cash($cash); } // points if ($points = $params->get("points")) { if ($give) { $this->up->increase_rank($points); } $text[] = game::format_num($points) . " rankpoeng"; } // kuler if ($bullets = $params->get("bullets")) { $bullets = (int) $bullets; // har vi plass til noen kuler? if ($this->up->weapon) { $kap = $this->up->weapon ? $this->up->weapon->data['bullets'] : 0; $free = $kap - $this->up->data['up_weapon_bullets'] - $this->up->data['up_weapon_bullets_auksjon']; $bullets = max(0, min($free, $bullets)); if ($bullets > 0) { if ($give) { // gi kuler \Kofradia\DB::get()->exec("UPDATE users_players SET up_weapon_bullets = up_weapon_bullets + {$bullets} WHERE up_id = {$this->up->id}"); $this->up->data['up_weapon_bullets'] += $bullets; } $text[] = fwords("%d kule", "%d kuler", $bullets); } } } return sentences_list($text); }
protected static function generate_page() { /*<div class="default_hidden" id="content"><a href="#top">Til toppen av siden</a></div> <div class="default_hidden"><a href="#content">Til toppen av innholdet</a></div>*/ $extra_classes = ''; // vise juleheader? $d = ess::$b->date->get(); if ($d->format("m") == 12) { $extra_classes .= ' juleheader'; } echo '<!DOCTYPE html> <html lang="no"> <head> <title>' . ess::$b->page->generate_title() . '</title>' . ess::$b->page->generate_head() . '</head> <body class="' . self::$class_browser . self::$class_crew . (self::$locked ? ' is_lock' : '') . $extra_classes . '" id="default_th">' . ess::$b->page->body_start . ' <!--<div class="default_hidden print" id="top"> <h1><a href="' . ess::$s['absolute_path'] . '">kofradia.no</a></h1> <p class="default_hidden"><a href="#content">Til innholdet</a></p> </div>--> <div id="default_header_wrap"> <div id="default_header_img"></div> <div id="default_header">'; $boxes = theme_helper::get_extended_access_boxes(); if ($boxes) { echo ' <div id="cboxes"' . (!access::has("mod") ? ' class="nocus"' : '') . '>'; foreach ($boxes as $box) { echo ' <p class="box"><a href="' . $box[0] . '">' . $box[1] . '</a></p>'; } echo ' </div>'; } echo self::get_extended_access_login(); echo self::get_extended_access_links(); echo self::get_extended_access_search(); echo ' <p id="toplink"><a href="' . ess::$s['path'] . '/" title="Gå til forsiden"></a></p> <p id="fb_link"><a href="http://www.facebook.com/kofradia" target="_blank"><span>Du finner oss på Facebook</span></a></p>'; //<p id="donate_link"><a href="'.ess::$s['relative_path'].'/donasjon" title="Doner »"><span>Donér »</span></a></p>'; $blog_links = self::get_blog_links(); if ($blog_links) { echo ' <p id="blog_link">' . implode("<br />", $blog_links) . '</p>'; } echo ' <ul id="default_topmenu"> <li><a href="' . ess::$s['relative_path'] . '/loggut?sid=' . login::$info['ses_id'] . '" onclick="return confirm(\'Er du sikker på at du vil logge ut?\\n\\nTips! Trykk Esc knappen tre ganger for å logge ut uten å måtte trykke på denne knappen!\')"><b>Logg ut</b></a></li> <li><a href="' . ess::$s['relative_path'] . '/innboks">Meldinger</a></li>'; if (!self::$locked) { echo ' <li><a href="' . ess::$s['relative_path'] . '/kontakter">Kontakter</a></li> <li><a href="' . ess::$s['relative_path'] . '/finn_spiller">Finn spiller</a></li>'; } echo ' <li><a href="' . ess::$s['relative_path'] . '/min_side?u&a=set">Innstillinger</a></li>'; if (!self::$locked) { echo ' <li><a href="' . ess::$s['relative_path'] . '/irc/client/" target="_blank">Chat</a></li>'; } echo ' </ul> <div id="status_info"></div> <p id="default_profilbilde"> <span id="default_profilbilde_wrap"> <a href="' . ess::$s['relative_path'] . '/min_side?' . (!login::$user->player->active ? "up_id=" . login::$user->player->id . '&' : '') . 'a=profil&b=profilbilde" class="profile_image_edit"><img src="/static/icon/image.png" /> endre</a> <a href="' . ess::$s['relative_path'] . '/p/' . login::$user->player->data['up_name'] . '"><img src="' . htmlspecialchars(login::$user->player->get_profile_image()) . '" alt="Ditt profilbilde" class="profile_image" /></a> </span> </p> <p id="default_playername">' . game::profile_link() . '</p>' . self::get_oppdrag_status() . ' </div> <div id="default_header_subline"> <p id="server_klokka"><span>' . self::$date_now->format(date::FORMAT_WEEKDAY) . ' ' . self::$date_now->format(date::FORMAT_NOTIME) . ' - ' . self::$date_now->format("H:i:s") . '</span></p> <div id="pm_new">' . (self::$num_pm > 0 ? '<p class="notification_box"><a href="' . ess::$s['relative_path'] . '/innboks"><b>' . self::$num_pm . ' ' . fword("ny</b> melding", "nye</b> meldinger", self::$num_pm) . '</a></p>' : '') . '</div> <div id="log_new">' . (self::$num_log > 0 ? '<p class="notification_box"><a href="' . ess::$s['relative_path'] . '/min_side?log"><b>' . self::$num_log . ' ' . fword("ny</b> hendelse", "nye</b> hendelser", self::$num_log) . '</a></p>' : '') . '</div>'; if (login::$user->data['u_log_crew_new'] > 0 && isset(login::$extended_access)) { echo ' <p class="notification_box"><a href="' . ess::$s['relative_path'] . '/min_side?u&a=crewlog"><b>' . login::$user->data['u_log_crew_new'] . '</b> ' . fword("ny hendelse som crew", "nye hendelser som crew", login::$user->data['u_log_crew_new']) . '</a></p>'; } if (!self::$locked) { echo ' <div id="def_ui2"> <p>' . login::$user->player->getRank()->getName() . '</p> <p><span class="farge">Sted: </span> <span id="status_bydel">' . game::$bydeler[login::$user->player->data['up_b_id']]['name'] . '</span></p> <p><span class="farge">Har ute</span> <span id="status_cash">' . game::format_cash(login::$user->player->data['up_cash']) . '</span></p> <p><span class="farge">Plassering: </span> nr. <span id="status_rankpos">' . login::$user->player->data['upr_rank_pos'] . '</span></p> </div>'; } echo ' </div> </div> <div id="default_left">'; if (!login::$user->player->active) { echo ' <div id="default_info_dead"> <a href="' . ess::$s['relative_path'] . '/lock?f=player">' . (login::$user->player->data['up_deactivated_dead'] == 2 ? ' <span>Din spiller blødde ihjel pga. lite energi.</span>' : (login::$user->player->data['up_deactivated_dead'] ? ' <span>Din spiller har blitt drept.</span>' : ' <span>Din spiller er deaktivert.</span>')) . ' <span class="link">Ny spiller »</span> </a> </div>'; } echo ' <nav>' . kf_menu::build_menu() . ' </nav> </div>'; if (defined("DISABLE_RIGHT_COL")) { $content_right = ''; } else { $content_right = ess::$b->page->generate_content_right(); # self::$locked ..? } echo ' <div id="default_main">'; if ($content_right) { echo ' <div id="default_right">' . $content_right . '</div>'; } echo ' <div id="default_content_wrap"' . (!$content_right ? ' class="noright"' : '') . '>' . self::get_status_bars() . ' <section id="default_content">' . ess::$b->page->content . '</section> </div> </div> <div id="default_bottom_1"> <p><a href="/">Kofradia</a> © - Beskyttet av <a href="http://www.lovdata.no/all/nl-19610512-002.html" target="_blank">åndsverkloven</a> - Utviklet av <a href="http://www.henrist.net/" target="_blank">Henrik Steen</a></p> <p><a href="' . ess::$s['relative_path'] . '/betingelser">Betingelser for bruk</a> - Besøk <a href="irc://irc.quakenet.org/kofradia" target="_blank">#Kofradia</a> på QuakeNet<!-- <a href="' . ess::$s['relative_path'] . '/forum/topic?id=85">(Hjelp)</a>--> - <a href="' . ess::$s['relative_path'] . '/credits">Takk til</a></p> </div> <div id="default_bottom_2">'; $profiler = \Kofradia\DB::getProfiler(); echo ' <p>Script: ' . round(microtime(true) - SCRIPT_START - $profiler->time, 4) . ' sek - Database: ' . round($profiler->time, 4) . ' sek (' . $profiler->num . ' spørring' . ($profiler->num == 1 ? '' : 'er') . ')<span id="js_time"></span></p>'; $revision = self::get_revision_info(); if ($revision) { echo ' <p>Versjon <a href="https://github.com/hswno/kofradia/commit/' . $revision['commit'] . '" title="' . htmlspecialchars($revision['message']) . '">' . mb_substr($revision['commit'], 0, 8) . '</a> oppdatert ' . ess::$b->date->get($revision['date'])->format() . '. <a href="&rpath;/github">Logg</a></p>'; } else { echo ' <p>Versjonsinformasjon er utilgjengelig.</p>'; } echo ' <p>Tid og dato ved visning: <b>' . self::$date_now->format(date::FORMAT_SEC) . '</b>.</p> </div>' . ess::$b->page->body_end; // debug time /*$time = SCRIPT_START; ess::$b->dt("end"); $dt = 'start'; foreach (ess::$b->time_debug as $row) { $dt .= ' -> '.round(($row[1]-$time)*1000, 2).' -> '.$row[0]; $time = $row[1]; }*/ /*if (MAIN_SERVER) { $text = ess::$b->date->get()->format("Y-m-d\tH:i:s\t")."{$_SERVER['REMOTE_ADDR']}\t{$_SERVER['REQUEST_METHOD']}\t{$_SERVER['REQUEST_URI']}\t".login::$user->player->id."\t".login::$user->player->data['up_name']."\t".round(microtime(true)-SCRIPT_START-ess::$b->db->time, 4)."\t".round(ess::$b->db->time, 4)."\t".ess::$b->db->queries."\t".str_replace(" -> ", "\t", $dt)."\n"; @file_put_contents("/home/smafia/debugtime.log", $text, FILE_APPEND); }*/ /*echo ' <!-- '.$dt.' -->*/ echo ' </body> </html>'; }
/** * Trekk tilbake dusør */ protected function show_release() { if (!isset($_POST['hl_id'])) { ess::$b->page->add_message("Du må velge en dusør du har satt.", "error"); redirect::handle("etterlyst"); } $hl_id = (int) $_POST['hl_id']; // hent informasjon $result = \Kofradia\DB::get()->query("SELECT hl_up_id, hl_time, hl_amount, hl_amount_valid FROM hitlist WHERE hl_id = {$hl_id} AND hl_by_up_id = " . $this->up->id . " AND hl_amount_valid > 0"); $hl = $result->fetch(); if (!$hl) { ess::$b->page->add_message("Fant ikke oppføringen.", "error"); redirect::handle("etterlyst"); } \Kofradia\DB::get()->beginTransaction(); // slett oppføringen $a = \Kofradia\DB::get()->exec("DELETE FROM hitlist WHERE hl_id = {$hl_id} AND hl_amount_valid = {$hl['hl_amount_valid']}"); if ($a == 0) { ess::$b->page->add_message("Noen kom deg i forkjøpet og kjøpte ut hele eller deler av dusøren.", "error"); \Kofradia\DB::get()->commit(); redirect::handle("etterlyst"); } // hvor mye penger skal vi få? $result = \Kofradia\DB::get()->query("SELECT ROUND({$hl['hl_amount_valid']}/2)"); $amount = $result->fetchColumn(0); // gi penger \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash + {$amount} WHERE up_id = " . $this->up->id); \Kofradia\DB::get()->commit(); putlog("LOG", "ETTERLYST: " . $this->up->data['up_name'] . " trakk tilbake dusør for UP_ID={$hl['hl_up_id']} på " . game::format_cash($hl['hl_amount_valid']) . '.'); ess::$b->page->add_message('Du trakk tilbake dusøren på <user id="' . $hl['hl_up_id'] . '" /> som ble satt ' . ess::$b->date->get($hl['hl_time'])->format() . ' og som hadde igjen ' . game::format_cash($hl['hl_amount_valid']) . '. Du fikk tilbake ' . game::format_cash($amount) . '.'); redirect::handle("etterlyst"); }
public static function format_data($data, $type = "bb", $args = null) { global $_base; switch ($type) { case "bb": case "signature": // bb kode return game::bb_to_html($data); // bb-kode eller egendefinert tekst hvis bb-kode er tom // bb-kode eller egendefinert tekst hvis bb-kode er tom case "bb-opt": $bb = trim(game::bb_to_html($data)); if ($bb == "") { return $args; } return $bb; case "music_pre": return preg_replace('~\\[music\\](https?://.+?)\\[/music\\]~ieu', 'game::music_add(\'$1\')', $data); case "music_post": return game::music_replace($data); case "profile": $data = game::format_data($data, "music_pre"); // sett opp ranken $rank = game::rank_info($args->data['up_points'], $args->data['upr_rank_pos'], $args->data['up_access_level']); // diverse bb koder $data = str_replace(array("[counter]", "[visits]", "[visitor]", "[rank]", "[bank]", "[cash]", "[money]", "[renter]", "[pm_ulest]", "[pengerank]"), array('<img src="&rpath;/counter?count=' . $args->data['up_profile_hits'] . '" alt="Antall visninger: ' . $args->data['up_profile_hits'] . '" />', $args->data['up_profile_hits'], game::profile_link(), $rank['orig'] ? $rank['orig'] : $rank['name'], game::format_cash($args->data['up_bank']), game::format_cash($args->data['up_cash']), game::format_cash($args->data['up_cash'] + $args->data['up_bank']), game::format_cash($args->data['up_interest_last']), game::format_number($args->user->data['u_inbox_new']), game::cash_name($args->data['up_cash'] + $args->data['up_bank'])), game::bb_to_html($data)); // rankbar $type = false; $match_rank = preg_match("~\\[rank_(neste_tid|neste_dato|tid|dato)\\]~iu", $data); if (preg_match("~\\[rankbar( type=(1|2))?\\]~iu", $data, $type) || $match_rank) { // høyeste rank? if ($rank['need_points'] == 0) { global $_game; $prosent = $args->data['up_points'] / game::$ranks['items_number'][count(game::$ranks['items_number'])]['points'] * 100; $rankbar_total = ' <div class="progressbar"> <div class="progress"><p>' . game::format_num($prosent, 3) . ' %</p></div> </div>'; $rankbar_total2 = ' <div class="progressbar" style="margin-top: 1em"> <div class="progress"><p>' . game::format_num($prosent, 3) . ' %</p></div> </div>'; $data = str_replace(array("[rankbar]", "[rankbar type=1]", "[rankbar type=2]", "[rank_tid]", "[rank_dato]", "[rank_neste_tid]", "[rank_neste_dato]"), array($rankbar_total . $rankbar_total2, $rankbar_total, $rankbar_total, "Oppnådd", "Oppnådd", "Oppnådd", "Oppnådd"), $data); } else { // i forhold til den høyeste ranken global $_game; // antall poeng for den høyeste ranken $points_max = game::$ranks['items']; end($points_max); $points_max = current($points_max); $points_max = $points_max['points']; // hvor langt ifra er vi? $percent_total = round($args->data['up_points'] / $points_max, 2) * 100; #if ($percent_total > 100) $percent_total = 100; if ($percent_total == 0) { $percent_total = 0.01; } $rankbar_total = ' <div class="progressbar"> <div class="progress" style="width: ' . floor($percent_total) . '%"><p>' . game::format_num($percent_total, 2) . ' % i forhold til høyeste rank.</p></div> </div>'; // i forhold til neste rank $points_rank = $args->data['up_points'] - $rank['points']; $percent = round($points_rank / $rank['need_points'] * 100, 2); #if ($percent ) $rankbar_next = ' <div class="progressbar"> <div class="progress" style="width: ' . floor($percent) . '%"><p>' . game::format_num($percent, 2) . ' % i forhold til neste rank</p></div> </div>'; $rankbar_next2 = ' <div class="progressbar" style="margin-top: 1em"> <div class="progress" style="width: ' . floor($percent) . '%"><p>' . game::format_num($percent, 2) . ' % i forhold til neste rank</p></div> </div>'; // fiks bb kodene $data = str_replace(array("[rankbar]", "[rankbar type=1]", "[rankbar type=2]"), array($rankbar_total . $rankbar_next2, $rankbar_total, $rankbar_next), $data); // beregn antatt tid det tar å nå høyeste rank if ($match_rank) { // hent ut aktiviteten de siste X dagene $expire = ess::$b->date->get(); $expire->modify("-21 days"); $expire = max($args->data['up_created_time'], $expire->format("U")); // maks tid: siste 21 dager eller siden reg (om registrert innen 30 dager) $result = \Kofradia\DB::get()->query("SELECT SUM(uhi_points) FROM users_hits WHERE uhi_up_id = {$args->id} AND uhi_secs_hour >= {$expire}"); $points = (int) $result->fetchColumn(0); if ($points == 0) { $data = str_replace(array("[rank_tid]", "[rank_dato]", "[rank_neste_tid]", "[rank_neste_dato]"), array("ukjent", "ukjent", "ukjent", "ukjent"), $data); } else { // antall sekunder poengene skal fordeles på $time_elapsed = time() - $expire; // beregn til neste rank og erstatt BB-kode $need = $rank['points'] + $rank['need_points'] - $args->data['up_points']; $time_left = $need / $points * $time_elapsed; if ($time_left > 63072000) { $text_left = "over 2 år"; $text_date = "om over 2 år"; } else { $text_left = game::timespan($time_left); $text_date = ess::$b->date->get($time_left + time())->format(date::FORMAT_NOTIME); } $data = str_replace(array("[rank_neste_tid]", "[rank_neste_dato]"), array($text_left, $text_date), $data); // beregn til øverste rank og erstatt BB-kode $need = $points_max - $args->data['up_points']; $time_left = $need / $points * $time_elapsed; if ($time_left > 63072000) { $text_left = "over 2 år"; $text_date = "om over 2 år"; } else { $text_left = game::timespan($time_left); $text_date = ess::$b->date->get($time_left + time())->format(date::FORMAT_NOTIME); } $data = str_replace(array("[rank_tid]", "[rank_dato]"), array($text_left, $text_date), $data); } } } } // kontaktliste? if (mb_strpos($data, "[kontakter]") !== false) { // hent kontaktliste $result = \Kofradia\DB::get()->query("SELECT uc_contact_up_id, up_name, up_access_level, up_last_online FROM users_contacts LEFT JOIN users_players ON uc_contact_up_id = up_id WHERE uc_u_id = {$args->data['up_u_id']} AND uc_type = 1 ORDER BY up_name"); $html = ' <table class="table l tablem"> <thead> <tr> <th>Spiller</th> <th>Sist pålogget</th> </tr> </thead> <tbody>'; while ($row = $result->fetch()) { $html .= ' <tr> <td>' . game::profile_link($row['uc_contact_up_id'], $row['up_name'], $row['up_access_level']) . '</td> <td class="r">' . game::timespan($row['up_last_online'], game::TIME_ABS) . '</td> </tr>'; } $html .= ' </tbody> </table>'; // sett inn som bb kode $data = str_replace("[kontakter]", $html, $data); } // blokkeringliste? if (mb_strpos($data, "[blokkert]") !== false) { // hent blokkeringliste $result = \Kofradia\DB::get()->query("SELECT uc_contact_up_id, up_name, up_access_level, up_last_online FROM users_contacts LEFT JOIN users_players ON uc_contact_up_id = up_id WHERE uc_u_id = {$args->data['up_u_id']} AND uc_type = 2 ORDER BY up_name"); $html = ' <table class="table l tablem"> <thead> <tr> <th>Spiller</th> <th>Sist pålogget</th> </tr> </thead> <tbody>'; while ($row = $result->fetch()) { $html .= ' <tr> <td>' . game::profile_link($row['uc_contact_up_id'], $row['up_name'], $row['up_access_level']) . '</td> <td class="r">' . game::timespan($row['up_last_online'], game::TIME_ABS) . '</td> </tr>'; } $html .= ' </thead> </table>'; // sett inn som bb kode $data = str_replace("[blokkert]", $html, $data); } return game::format_data($data, "music_post"); default: // ukjent! throw new HSException("Ukjent type ({$type})"); } return false; }
function gevinster() { global $gevinster; $stats = array(); // hent total statistikk $result = \Kofradia\DB::get()->query("SELECT subname, count, count2 FROM stats WHERE area = 'poker' AND name = 'alt' AND stats_up_id = 0"); while ($row = $result->fetch()) { $stats[$row['subname']]['total'] = $row['count']; $stats[$row['subname']]['total_cash'] = $row['count2']; } // hent bruker statistikk $result = \Kofradia\DB::get()->query("SELECT subname, count, count2 FROM stats WHERE area = 'poker' AND name = 'alt' AND stats_up_id = " . login::$user->player->id); while ($row = $result->fetch()) { $stats[$row['subname']]['count'] = $row['count']; $stats[$row['subname']]['cash'] = $row['count2']; } // skriv tabell $ret = ' <h1>Statistikk</h1> <table class="table game" id="poker_info"> <thead> <tr> <th>Navn</th> <th>Penger</th> <th>Stats</th> </tr> </thead> <tbody>'; $i = 0; $totalt_cash_1 = 0; $totalt_cash_2 = 0; $totalt_stat_1 = 0; $totalt_stat_2 = 0; foreach ($gevinster as $gevinst) { if (isset($stats[$gevinst[0]])) { $totalt_stat_1 += $stats[$gevinst[0]]['count']; $totalt_stat_2 += $stats[$gevinst[0]]['total']; $stat = '<b>' . game::format_number($stats[$gevinst[0]]['count']) . '</b> (' . game::format_number($stats[$gevinst[0]]['total']) . ')'; $cash_total = $stats[$gevinst[0]]['total_cash']; $cash = $stats[$gevinst[0]]['cash']; } else { $stat = '<b>0</b> (0)'; $cash_total = 0; $cash = 0; } if ($gevinst[0] == 0) { $cash = $cash * -1; $cash_total = $cash_total * -1; } $totalt_cash_1 += $cash; $totalt_cash_2 += $cash_total; $cash = game::format_cash($cash) . ' (' . game::format_cash($cash_total) . ')'; $ret .= ' <tr' . (is_int(++$i / 2) ? ' class="color"' : '') . '> <td>' . htmlspecialchars(ucfirst($gevinst[1])) . '</td> <td align="right"><span style="color: #999">Innsats *</span> ' . game::format_number($gevinst[2], 2) . '</td> <td align="right" title="' . $cash . '">' . $stat . '</td> </tr>'; } if (isset($stats[0])) { $stat = '<b>' . game::format_number($stats[0]['count']) . '</b> (' . game::format_number($stats[0]['total']) . ')'; $cash_total = $stats[0]['total_cash']; $cash = $stats[0]['cash']; } else { $stats = '<b>0</b> (0)'; $cash_total = 0; $cash = 0; } $cash = game::format_cash($cash) . ' (' . game::format_cash($cash_total) . ')'; $stat = '<b>' . game::format_number($totalt_stat_1) . '</b> (' . game::format_number($totalt_stat_2) . ')'; $cash = game::format_cash($totalt_cash_1) . ' (' . game::format_cash($totalt_cash_2) . ')'; $ret .= ' <tr class="spacer"><td colspan="3"> </td></tr> <tr' . (is_int($i / 2) ? ' class="color"' : '') . '> <td><b>Totalt</b></td> <td> </td> <td align="right" title="' . $cash . '">' . $stat . '</td> </tr> <tr class="spacer"><td colspan="3"> </td></tr> <tr' . (is_int(++$i / 2) ? ' class="color"' : '') . '> <td colspan="3"><b>Tips</b>: Hold musa over stats feltet for å se pengestats!</td> </tr> </tbody> </table>'; return $ret; }
<up_id>' . $player['up_id'] . '</up_id> <url>' . htmlspecialchars($__server['relative_path'] . "/p/" . rawurlencode($player['up_name']) . "/" . $player['up_id']) . '</url> <up_name>' . htmlspecialchars($player['up_name']) . '</up_name> <up_name_display>' . htmlspecialchars(game::profile_link($player['up_id'], $player['up_name'], $player['up_access_level'])) . '</up_name_display> <status>' . htmlspecialchars($status) . '</status> <reg_time_abs>' . htmlspecialchars($_base->date->get($player['up_created_time'])->format(date::FORMAT_SEC)) . '</reg_time_abs> <reg_time_rel>' . htmlspecialchars(game::timespan($player['up_created_time'], game::TIME_ABS)) . '</reg_time_rel> <last_online_abs>' . htmlspecialchars($_base->date->get($player['up_last_online'])->format(date::FORMAT_SEC)) . '</last_online_abs> <last_online_rel>' . htmlspecialchars(game::timespan($player['up_last_online'], game::TIME_ABS)) . '</last_online_rel> <activated>' . htmlspecialchars($player['up_access_level'] == 0 ? 0 : 1) . '</activated> <profile_image>' . htmlspecialchars($profile_image) . '</profile_image> <rank_name>' . htmlspecialchars($rank['name'] . ($rank['orig'] ? ' (' . $rank['orig'] . ')' : '')) . '</rank_name>'; // moderator stæsj if ($mod) { echo ' <ip>' . $player['u_online_ip'] . '</ip> <email>' . htmlspecialchars($player['u_email']) . '</email> <hits>' . $player['up_hits'] . '</hits> <money>' . game::format_cash($player['money']) . '</money>'; } echo ' <contact>' . $is_contact . '</contact> <block>' . $is_block . '</block> <ff_list>'; foreach ($ff as $row) { echo ' <ff id="' . $row['ff_id'] . '" name="' . htmlspecialchars($row['ff_name']) . '" pos="' . htmlspecialchars($row['posisjon']) . '" />'; } echo ' </ff_list> </playerinfo>';
/** * Spillere tilhørende brukeren */ protected static function page_up() { // hent spillerene tilhørende denne personen $pagei = new pagei(pagei::ACTIVE_GET, "side_up", pagei::PER_PAGE, 15); $result = $pagei->query("\n\t\t\tSELECT up_id, up_name, up_access_level, up_created_time, up_points, up_deactivated_time, up_hits, up_cash+up_bank money, upr_rank_pos\n\t\t\tFROM users_players\n\t\t\t\tLEFT JOIN users_players_rank ON upr_up_id = up_id\n\t\t\tWHERE up_u_id = " . page_min_side::$active_user->id . "\n\t\t\tORDER BY up_last_online DESC"); echo ' <div class="bg1_c"> <h1 class="bg1">Spillere tilhørende brukeren<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <table class="table ' . ($pagei->pages == 1 ? 'tablem' : 'tablemt') . '" style="width: 100%"> <thead> <tr> <th>Spiller</th> <th>Opprettet</th> <th>Rank</th> <th>Penger</th> <th>Visninger</th> <th>Status</th> </tr> </thead> <tbody>'; while ($row = $result->fetch()) { $rank = game::rank_info($row['up_points'], $row['upr_rank_pos'], $row['up_access_level']); echo ' <tr> <td>' . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level'], true, 'min_side?up_id=' . $row['up_id']) . '</td> <td>' . ess::$b->date->get($row['up_created_time'])->format() . '</td> <td>' . $rank['name'] . ($rank['orig'] ? '<br />(' . $rank['orig'] . ')' : '') . '</td> <td class="r">' . game::format_cash($row['money']) . '</td> <td class="r">' . game::format_number($row['up_hits']) . '</td> <td>' . ($row['up_access_level'] == 0 ? 'Deaktivert:<br />' . ess::$b->date->get($row['up_deactivated_time'])->format() : 'Status: I live') . '</td> </tr>'; } echo ' </tbody> </table>' . ($pagei->pages > 1 ? ' <p class="c">' . $pagei->pagenumbers() . '</p>' : '') . ' </div> </div>'; }
/** * Kaste ut en spiller */ protected function kick_handle() { // valider sid validate_sid(); // kan vi ikke kaste ut noen spillere nå? if (login::$user->player->fengsel_check() || login::$user->player->bomberom_check() || login::$user->player->data['up_b_id'] != $this->ff->data['br_b_id'] || !$this->kick_hour_ok) { redirect::handle(); } // mangler spillervalg? if (!isset($_POST['player'])) { ess::$b->page->add_message("Du må velge en spiller du vil kaste ut.", "error"); redirect::handle(); } // er ikke spilleren i bomberommet? $up_id = (int) $_POST['player']; $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT u_email, up_id, up_name, up_access_level, up_brom_expire\n\t\t\tFROM users_players JOIN users ON up_u_id = u_id\n\t\t\tWHERE up_id = {$up_id} AND up_brom_ff_id = {$this->ff->id} AND up_brom_expire > " . time() . " AND up_access_level != 0"); $cost = $this->fam ? self::KICK_PLAYER_COST_FAMILIE : self::KICK_PLAYER_COST; $up = $result->fetch(); if (!$up) { ess::$b->page->add_message("Fant ikke spilleren.", "error"); redirect::handle(); } // sett opp skjema $form = \Kofradia\Form::getByDomain("other", login::$user); // har vi bekreftet ønsket om å kaste ut en spiller? if (isset($_POST['confirm']) && $form->validateHashOrAlert(null, "Kast ut spiller fra bomberom")) { \Kofradia\DB::get()->beginTransaction(); // forsøk å trekk fra pengene if (!$this->ff->bank(ff::BANK_BETALING, $cost, "Kaste ut spilleren [user id={$up['up_id']}] fra bomberommet")) { ess::$b->page->add_message("Det er ikke nok penger i " . ($this->fam ? "broderskapbanken" : "firmabanken") . ".", "error"); \Kofradia\DB::get()->commit(); } else { // finn en tilfeldig bydel å plassere spilleren $result = \Kofradia\DB::get()->query("SELECT id, name FROM bydeler WHERE active != 0 ORDER BY RAND() LIMIT 1"); $b_id = $result->fetchColumn(0); // forsøk å trekk ut spilleren fra bomberommet $a = \Kofradia\DB::get()->exec("\n\t\t\t\t\tUPDATE users_players\n\t\t\t\t\tSET up_brom_expire = 0, up_b_id = {$b_id}\n\t\t\t\t\tWHERE up_id = {$up['up_id']} AND up_brom_ff_id = {$this->ff->id} AND up_brom_expire = {$up['up_brom_expire']} AND up_access_level != 0"); // feilet? if ($a == 0) { // avbryt transaksjon \Kofradia\DB::get()->rollback(); ess::$b->page->add_message("Kunne ikke kaste ut spilleren fra bomberommet.", "error"); } else { // legg til hendelse hos spilleren player::add_log_static("bomberom_kicked", login::$user->player->id . ":" . urlencode($this->ff->data['ff_name']) . ":{$up['up_brom_expire']}", $this->ff->id, $up['up_id']); // send e-post til spilleren $email = new email(); $email->text = 'Hei, Din spiller ble kastet ut fra bomberommet av ' . ($this->fam ? 'broderskapet' : 'firmaet') . ' som styrer bomberommet. -- www.kofradia.no'; $email->send($up['u_email'], "Kastet ut av bomberom"); // firmalogg $this->ff->add_log("bomberom_kick", login::$user->player->id . ":{$up['up_id']}:{$up['up_brom_expire']}"); // logg putlog("DF", "BOMBEROM: {$up['up_name']} ble kastet ut av bomberommet {$this->ff->data['ff_name']} av " . login::$user->player->data['up_name'] . " " . ess::$s['spath'] . "/min_side?up_id={$up['up_id']}"); ess::$b->page->add_message('Du kastet ut <user id="' . $up['up_id'] . '" /> fra bomberommet. ' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' betalte et gebyr på ' . game::format_cash($cost) . '.'); \Kofradia\DB::get()->commit(); redirect::handle(); } } } ess::$b->page->add_title("Kaste ut spiller"); // vis informasjon echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Kaste ut spiller fra bomberommet<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p>Du er i ferd med å kaste ut ' . game::profile_link($up['up_id'], $up['up_name'], $up['up_access_level']) . ' fra bomberommet.</p> <p>Spilleren skal i utgangspunktet sitte i bomberommet til ' . ess::$b->date->get($up['up_brom_expire'])->format(date::FORMAT_SEC) . ' (' . game::counter($up['up_brom_expire'] - time()) . ' gjenstår).</p> <p>For å kaste ut spilleren må det betales en avgift på <b>' . game::format_cash($cost) . '</b> som betales fra ' . ($this->fam ? 'broderskapkontoen' : 'firmakontoen') . '.</p>'; // har vi ikke nok penger i firmakontoen? if ($this->ff->data['ff_bank'] < $cost) { echo ' <p>' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' har for øyeblikket kun ' . game::format_cash($this->ff->data['ff_bank']) . ' på konto, noe som ikke er nok. ' . ($this->ff->access(1) ? '<a href="' . ess::$s['relative_path'] . '/ff/banken?ff_id=' . $this->ff->id . '">Sett inn penger på ' . ($this->fam ? 'broderskapkontoen' : 'firmakontoen') . '</a>' : '<a href="' . ess::$s['relative_path'] . '/ff/panel?ff_id=' . $this->ff->id . '">Donér til ' . ($this->fam ? 'broderskapet' : 'firmaet') . '</a>') . ' først for å kunne kaste ut spilleren.</p> <p class="c"><a href="bomberom?ff_id=' . $this->ff->id . '">Tilbake</a></p>'; } else { echo ' <p>' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' har for øyeblikket ' . game::format_cash($this->ff->data['ff_bank']) . ' på konto.</p> <form action="" method="post"> ' . $form->getHTMLInput() . ' <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <input type="hidden" name="player" value="' . $up['up_id'] . '" /> <input type="hidden" name="kick" /> <p class="c">' . show_sbutton("Bekreft, kast ut spilleren", 'name="confirm"') . ' <a href="bomberom?ff_id=' . $this->ff->id . '">Avbryt</a></p> </form>'; } echo ' </div> </div>'; $this->ff->load_page(); }
/** * Hent ut en tilfeldig melding for en kriminalitet */ public function get_random_message($id, $success, $cash = null, $points = null) { $id = (int) $id; $rank = $success ? game::format_rank($points, $this->up->rank) : null; // hent en tilfeldig melding $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT text\n\t\t\tFROM kriminalitet_text\n\t\t\tWHERE krimid = {$id} AND outcome = " . ($success ? 1 : 2) . "\n\t\t\tORDER BY RAND()\n\t\t\tLIMIT 1"); // har melding? $row = $result->fetch(); if ($row) { if ($success) { return str_replace(array("%cash", "%points", "%rank"), array(game::format_cash($cash), $points, $rank), $row['text']); } return $row['text']; } else { if ($success) { return "Vellykket! Du skaffet deg {$points} poeng og " . game::format_cash($cash) . "."; } return "Mislykket! Du klarte det ikke..."; } }
/** * Lag tabellrad for et medlem * @param ff_member $member * @param int $i * @param string $class ekstra class på tr * @return string <tr> */ protected function show_member_row(ff_member $member, $i, $class = null) { return ' <tr class="box_handle' . ($i % 2 == 0 ? ' color' : '') . ($class ? ' ' . $class : '') . '"> <td><input type="checkbox" name="up_id[]" value="' . $member->id . '"' . (!$this->ff->mod && ($member->id == login::$user->player->id || $member->data['ffm_priority'] == 1) ? ' disabled="disabled"' : '') . ' /> ' . game::profile_link($member->id, $member->data['up_name'], $member->data['up_access_level']) . '<br /><b>' . ucfirst($member->get_priority_name()) . '</b></td> <td class="r">' . ess::$b->date->get($member->data['ffm_date_join'])->format() . '</td> <td class="r">' . ess::$b->date->get($member->data['up_last_online'])->format() . '<br />' . game::timespan($member->data['up_last_online'], game::TIME_ABS) . '</td> <td class="r">' . game::format_cash($member->data['ffm_donate']) . '<br />' . game::format_cash($member->data['ffm_earnings_ff']) . '</td> <td class="r">' . game::format_cash($member->data['ffm_earnings']) . '</td> </tr>'; }
/** * Vise publiserte utgivelser */ protected function published() { ess::$b->page->add_title("Utgivelser"); // hent publiserte utvivelser $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 10); $ffnp_q = login::$logged_in ? "ffnp_ffn_id = ffn_id AND ffnp_up_id = " . login::$user->player->id : "FALSE"; $result = $pagei->query("SELECT ffn_id, ffn_published_time, ffn_cost, ffn_title, ffn_sold, ffn_description, ffnp_time FROM ff_newspapers LEFT JOIN ff_newspapers_payments ON {$ffnp_q} WHERE ffn_ff_id = {$this->ff->id} AND ffn_published != 0 ORDER BY ffn_published_time DESC"); echo ' <p class="c">Utgivelser</p>'; // ingen publiserte utgivelser? if ($result->rowCount() == 0) { echo ' <p class="c">Ingen utgivelser er publisert.</p>'; } else { echo ' <p class="c">' . $pagei->total . ' utgivelse' . ($pagei->total == 1 ? '' : 'r') . ' er publisert:</p>'; #$i = $pagei->total - ($pagei->per_page*($pagei->active-1)); while ($row = $result->fetch()) { echo ' <div class="section center w200"> <h2><a href="avis?ff_id=' . $this->ff->id . '&ffn=' . $row['ffn_id'] . '">' . htmlspecialchars($row['ffn_title']) . '</a></h2> <dl class="dd_right"> <dt>Publisert</dt> <dd>' . ess::$b->date->get($row['ffn_published_time'])->format() . '</dd> <dt>Solgte utgivelser</dt> <dd>' . game::format_number($row['ffn_sold']) . '</dd> <dt>Pris</dt> <dd>' . game::format_cash($row['ffn_cost']) . '</dd> <dt>Kjøpt?</dt> <dd>' . ($row['ffnp_time'] ? '<a href="avis?ff_id=' . $this->ff->id . '&ffn=' . $row['ffn_id'] . '">Ja</a> (' . ess::$b->date->get($row['ffnp_time'])->format() . ')' : 'Nei [<a href="avis?ff_id=' . $this->ff->id . '&ffn=' . $row['ffn_id'] . '">Kjøp</a>]') . (access::is_nostat() ? ' (nostat)' : '') . '</dd> </dl> <div class="p">' . $this->ff->format_description($row['ffn_description']) . '</div> </div>'; #$i--; } // flere sider? if ($pagei->pages > 1) { echo ' <p class="c">Navigasjon: ' . $pagei->pagenumbers() . '</p>'; } } }
echo ' <tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '> <td rowspan="' . $count . '" valign="top"><a href="finn?ip=' . urlencode($row[0]['u_online_ip']) . '">' . htmlspecialchars($row[0]['u_online_ip']) . '</a><br />(' . $count . ' ' . fword("bruker", "brukere", $count) . ')</td>'; $e = 0; foreach ($row as $player) { // ny rad? if (++$e > 1) { echo ' </tr> <tr' . ($i % 2 == 0 ? ' class="color"' : '') . '>'; } $birth = explode("-", $player['u_birth']); echo ' <td>' . game::profile_link($player['up_id'], $player['up_name'], $player['up_access_level']) . '</td> <td><a href="finn?email=' . urlencode($player['u_email']) . '">' . htmlspecialchars($player['u_email']) . '</a></td> <td>' . $_base->date->get($player['up_created_time'])->format(date::FORMAT_SEC) . '</td> <td>' . $_base->date->get($player['up_last_online'])->format(date::FORMAT_SEC) . '</td> <td class="r">' . game::timespan($player['up_last_online'], game::TIME_ABS | game::TIME_SHORT | game::TIME_NOBOLD) . '</td> <td class="r">' . game::format_number($player['up_hits']) . '</td> <td class="r">' . game::format_number($player['up_points']) . '</td> <td class="r">' . game::format_cash($player['money']) . '</td> <td class="r">' . (empty($player['u_birth']) || $player['u_birth'] == "0000-00-00" ? 'Ikke registrert' : intval($birth[2]) . ". " . $_lang['months'][intval($birth[1])] . " " . $birth[0]) . '</td>'; } echo ' </tr>'; } echo ' </tbody> </table>'; } $_base->page->load();
/** * Generer beskrivelse for oppdraget * * @param oppdrag id int $o_id * @return string */ public function get_description($o_id) { // finn oppdraget if (!isset($this->oppdrag[$o_id])) { if ($this->oppdrag_loaded) { throw new HSException("Brukeren har ikke noe oppdrag med ID {$o_id}."); } $this->user_load_all(); return $this->get_description($o_id); } $o =& $this->oppdrag[$o_id]; $active = $o['uo_locked'] == 0; $params = $active ? $this->params[$o_id]['o_params'] : $this->params[$o_id]['o_unlock_params']; $prefix = (string) $active ? game::bb_to_html($o['o_description']) : game::bb_to_html($o['o_description_unlock']); // sjekk for tidsgrense if ($active) { $time_limit = $params->get("time_limit", oppdrag::DEFAULT_TIME_LIMIT_ACTIVE); } else { $time_limit = $params->get("time_limit", false); } // sett opp beskrivelse for premie $prize = new container($params->get("prize")); if (count($prize->items) == 0) { if ($active) { $suffix = '<p><b>Premie:</b> Ikke definert.</p>'; } else { $suffix = ''; } } else { $prizes = array(); foreach ($prize->items as $item) { switch ($item[0]) { case "cash": $prizes[] = game::format_cash($item[1]); break; case "rank_points": $points = (int) $item[1]; $prizes[] = game::format_num($points) . " poeng"; break; case "bullets": $prizes[] = fwords("%d kule", "%d kuler", (int) $item[1]) . ' (må ha våpen og ledig kapasitet)'; break; } } if (count($prizes) == 0) { $suffix = '<p><b>Premie:</b> Premie er feil satt opp.</p>'; } else { $suffix = '<p><b>Premie:</b></p><ul><li>' . implode("</li><li>", $prizes) . '</li></ul>'; } } // hva slags trigger switch ($params->get("name")) { case "rank_points": // oppnå poeng på gitt tid $target = $this->up->data['up_points'] + $params->get("points"); return $prefix . '<p>Oppnå totalt ' . game::format_num($target) . ' poeng i løpet av ' . game::timespan($time_limit, game::TIME_FULL) . '. <span class="dark">Merk at <i>lotto</i> og <i>angrep</i> ikke teller med. Hvis du mottar poeng fra disse funksjonene vil poenggrensen øke med så mange poeng du mottar.</span></p>' . $suffix; break; case "kriminalitet_different": // hvor mange forskjellige må vi oppnå? $different = $params->get("count", 5); return $prefix . '<p>Utfør ' . $different . ' forskjellige kriminaliteter etter hverandre som blir vellykket' . ($active ? ' i løpet av ' . game::timespan($time_limit, game::TIME_FULL) : '') . '.</p>' . $suffix; break; case "poker_unique_people": // hvor mange man må vinne mot $user_count = $params->get("user_count", 10); return $prefix . '<p>Vinn ' . $user_count . ' ganger på rad i poker mot ' . $user_count . ' forskjellige personer' . ($time_limit ? ' innen ' . game::timespan($time_limit, game::TIME_FULL) : '') . '. Hvis du spiller flere ganger mot samme person, er det første gang som teller. (Taper du første gang, må du vinne ' . $user_count . ' nye ganger.)</p>' . $suffix; break; case "wanted_level": return $prefix . '<p>Oppnå wanted nivå på ' . game::format_num($params->get("wanted_level", 500) / 10, 1) . ' %' . ($time_limit ? ' innen ' . game::timespan($time_limit, game::TIME_FULL) : '') . '.</p>' . $suffix; case "fengsel_breakout": return $prefix . '<p>Bryt ut ' . $params->get("user_count", 3) . ' spillere fra fengsel på rad uten å komme i fengsel' . ($time_limit ? ' innen ' . game::timespan($time_limit, game::TIME_FULL) : '') . '.</p>' . $suffix; } return !empty($prefix) ? $prefix . $suffix : '<p>Fant ingen relevant beskrivelse for dette oppdraget på dette stadiet. Ingen triggere som må utføres?</p>' . $suffix; }
/** * Vis banken */ protected function show() { ess::$b->page->add_js(' var user_bank = ' . js_encode(game::format_cash($this->up->data['up_bank'])) . '; var user_cash = ' . js_encode(game::format_cash($this->up->data['up_cash'])) . ';'); ess::$b->page->add_js_domready(' $$(".bank_amount_set").each(function(elm) { var amount = elm.get("rel").substring(0, 4) == "bank" ? user_bank : user_cash; var e_id = elm.get("rel").substring(5); elm .appendText(" (") .grab(new Element("a", {"text":"alt"}).addEvent("click", function() { $(e_id).set("value", amount); })) .appendText(")"); });'); echo ' <div class="bg1_c small" style="width: 420px"> <h1 class="bg1"> Banken <span class="left"></span><span class="right"></span> </h1> <p class="h_left"> <a href="' . ess::$s['rpath'] . '/node/31">Hjelp</a> </p> <p class="h_right">' . (!isset(login::$extended_access['authed']) ? ' <a href="banken?logout">Logg ut av banken</a>' : '') . ' <a href="banken?authc">Endre pass</a> </p> <div class="bg1" style="padding: 0 15px"> <!-- bankkonto informasjon --> <div style="width: 50%; margin-left: -5px; float: left"> <h2 class="bg1">Bankkonto informasjon<span class="left2"></span><span class="right2"></span></h2> <div class="bg1"> <dl class="dd_right"> <dt>Kontoeier</dt> <dd>' . game::profile_link() . '</dd> <dt>Bankfirma</dt> <dd><a href="ff/?ff_id=' . $this->bank->id . '">' . htmlspecialchars($this->bank->data['ff_name']) . '</a></dd> <dt><abbr title="Overføringstap">Overf.tap</abbr></dt> <dd>' . $this->bank->overforingstap * 100 . ' %</dd> <dt>Plassering</dt> <dd>' . (!isset(game::$bydeler[$this->bank->data['br_b_id']]) ? '<span style="color: #777777">Ukjent</span>' : htmlspecialchars(game::$bydeler[$this->bank->data['br_b_id']]['name'])) . '</dd> <dt>Balanse</dt> <dd>' . game::format_cash($this->up->data['up_bank']) . '</dd> </dl> <p class="c"> <a href="javascript:void(0)" onclick="this.parentNode.style.display=\'none\'; document.getElementById(\'bank_stats\').style.display=\'block\'">Vis statistikk</a> </p> <div id="bank_stats" style="display: none"> <dl class="dd_right"> <dt>Sendt</dt> <dd>' . game::format_number($this->up->data['up_bank_num_sent']) . ' stk</dd> <dd>' . game::format_cash($this->up->data['up_bank_sent']) . '</dd> </dl> <dl class="dd_right"> <dt>Mottatt</dt> <dd>' . game::format_number($this->up->data['up_bank_num_received']) . ' stk</dd> <dd>' . game::format_cash($this->up->data['up_bank_received']) . '</dd> </dl> <dl class="dd_right"> <dt>Overskudd</dt> <dd>' . game::format_cash($this->up->data['up_bank_profit']) . '</dd> </dl> <dl class="dd_right"> <dt><abbr title="Overføringstap">Overf.tap</abbr></dt> <dd>' . game::format_cash($this->up->data['up_bank_charge']) . '</dd> </dl> <dl class="dd_right"> <dt>Renter</dt> <dd>' . game::format_number($this->up->data['up_interest_num']) . ' stk</dd> <dd>' . game::format_cash($this->up->data['up_interest_total']) . '</dd> </dl> </div> <form action="" method="post"> <p class="c">' . show_sbutton("Bytt bank", 'name="switch"') . '</p> </form> </div> </div> <!-- send penger --> <div style="width: 50%; margin-right: -5px; float: right"> <h2 class="bg1">Send penger<span class="left2"></span><span class="right2"></span></h2> <div class="bg1"> <form action="" method="post"> <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <input type="hidden" name="a" value="send" /> <dl class="dd_right dl_2x"> <dt>Mottaker</dt> <dd><input type="text" name="mottaker" value="' . htmlspecialchars(postval("mottaker")) . '" class="styled w100" /></dd> <dt>Kontakt?</dt> <dd> <select onchange="if(this.value==\'\')var name=prompt(\'Brukernavn?\');else var name=this.value;if(name)document.getElementsByName(\'mottaker\')[0].value=name;this.selectedIndex=0" style="width: 110px; overflow: hidden"> <option>Velg kontakt</option>'; foreach (login::$info['contacts'][1] as $row) { echo ' <option value="' . htmlspecialchars($row['up_name']) . '">' . htmlspecialchars($row['up_name']) . '</option>'; } echo ' <option value="">Egendefinert..</option> </select> </dd> <dt class="bank_amount_set" rel="bank,transf_amount">Beløp</dt> <dd><input type="text" id="transf_amount" name="amount" class="styled w100" value="' . game::format_cash(postval("amount", 0)) . '" /></dd> <dt>Melding?</dt> <dd><input type="text" name="note" value="' . htmlspecialchars(postval("note")) . '" class="styled w100" maxlength="100" /></dd>'; // hoppe over overføringsgebyret? if (access::is_nostat()) { echo ' <dt>Uten gebyr?</dt> <dd><input type="checkbox" name="skip_bog"' . (isset($_POST['skip_bog']) ? ' checked="checked"' : '') . ' /></dd>'; } echo ' </dl> <p class="c">' . show_sbutton("Fortsett") . '</p> </form> </div> </div> <div class="clear"></div> <!-- sett inn penger --> <div style="width: 50%; margin-left: -5px; float: left"> <h2 class="bg1">Sett inn penger<span class="left2"></span><span class="right2"></span></h2> <div class="bg1"> <form action="" method="post"> <dl class="dd_right"> <dt class="bank_amount_set" rel="cash,bank_sett_inn">Beløp</dt> <dd><input type="text" name="sett_inn" id="bank_sett_inn" class="styled w100" value="0" /></dd> </dl> <p class="c">' . show_sbutton("Sett inn") . '</p> </form> </div> </div> <!-- ta ut penger --> <div style="width: 50%; margin-right: -5px; float: right"> <h2 class="bg1">Ta ut penger<span class="left2"></span><span class="right2"></span></h2> <div class="bg1"> <form action="" method="post"> <dl class="dd_right"> <dt class="bank_amount_set" rel="bank,bank_ta_ut">Beløp</dt> <dd><input type="text" name="ta_ut" id="bank_ta_ut" class="styled w100" value="0" /></dd> </dl> <p class="c">' . show_sbutton("Ta ut") . '</p> </form> </div> </div> <div class="clear"></div> </div> </div> <div class="bg1_c large" style="margin-top: 40px"> <h1 class="bg1">Oversikt<span class="left"></span><span class="right"></span></h1> <div class="bg1" style="padding: 0 15px"> <!-- sendte penger --> <div style="width: 50%; margin-left: -5px; float: left"> <h2 class="bg1">Sendte penger<span class="left2"></span><span class="right2"></span></h2> <div class="bg1">'; // sideinformasjon - hent sendte overføringer $pagei = new pagei(pagei::ACTIVE_GET, "side_sendte", pagei::PER_PAGE, 8, pagei::TOTAL, $this->up->data['up_bank_num_sent']); $result = \Kofradia\DB::get()->query("SELECT bl_receiver_up_id, amount, time FROM bank_log WHERE bl_sender_up_id = " . $this->up->id . " ORDER BY time DESC LIMIT {$pagei->start}, {$pagei->per_page}"); if ($result->rowCount() == 0) { echo ' <p> Ingen sendte overføringer. </p>'; } else { echo ' <table class="table tablemt" width="100%"> <thead> <tr> <th>Mottaker</th> <th>Beløp</th> <th>Tidspunkt</th> </tr> </thead> <tbody>'; $i = 0; while ($row = $result->fetch()) { $date = ess::$b->date->get($row['time']); echo ' <tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '> <td><user id="' . $row['bl_receiver_up_id'] . '" /></td> <td class="r">' . game::format_cash($row['amount']) . '</td> <td class="c" style="font-size: 10px">' . $date->format(date::FORMAT_NOTIME) . '<br />' . $date->format("H:i:s") . '</td> </tr>'; } echo ' </tbody> </table> <p class="c">' . $pagei->pagenumbers(game::address("banken", $_GET, array("side_sendte")) . "#sendte", game::address("banken", $_GET, array("side_sendte"), array("side_sendte" => "_pageid_")) . "#sendte") . '</p>'; } echo ' </div> </div> <!-- mottatte penger --> <div style="width: 50%; margin-right: -5px; float: right"> <h2 class="bg1">Mottatte penger<span class="left2"></span><span class="right2"></span></h2> <div class="bg1">'; // sideinformasjon - hent mottatte overføringer $pagei = new pagei(pagei::ACTIVE_GET, "side_mottatte", pagei::PER_PAGE, 8, pagei::TOTAL, $this->up->data['up_bank_num_received']); $result = \Kofradia\DB::get()->query("SELECT bl_sender_up_id, amount, time FROM bank_log WHERE bl_receiver_up_id = " . $this->up->id . " ORDER BY time DESC LIMIT {$pagei->start}, {$pagei->per_page}"); if ($result->rowCount() == 0) { echo ' <p> Ingen mottatte overføringer. </p>'; } else { echo ' <table class="table tablemt" width="100%"> <thead> <tr> <th>Sender</th> <th>Beløp</th> <th>Tidspunkt</th> </tr> </thead> <tbody>'; $i = 0; while ($row = $result->fetch()) { $date = ess::$b->date->get($row['time']); echo ' <tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '> <td><user id="' . $row['bl_sender_up_id'] . '" /></td> <td class="r">' . game::format_cash($row['amount']) . '</td> <td class="c" style="font-size: 10px">' . $date->format(date::FORMAT_NOTIME) . '<br />' . $date->format("H:i:s") . '</td> </tr>'; } echo ' </tbody> </table> <p class="c">' . $pagei->pagenumbers(game::address("banken", $_GET, array("side_mottatte")) . "#mottatte", game::address("banken", $_GET, array("side_mottatte"), array("side_mottatte" => "_pageid_")) . "#mottatte") . '</p>'; } echo ' </div> </div> <div class="clear"></div> </div> </div>'; }
$td[] = '<td><a href="finn?email=' . urlencode($row['u_email']) . '">' . htmlspecialchars($row['u_email']) . '</a></td>'; } if (isset($show['onlinea'])) { $td[] = '<td>' . $_base->date->get($row['up_last_online'])->format(date::FORMAT_SEC) . '</td>'; } if (isset($show['onliner'])) { $td[] = '<td class="r">' . game::timespan($row['up_last_online'], game::TIME_ABS | game::TIME_SHORT | game::TIME_NOBOLD) . '</td>'; } if (isset($show['hits'])) { $td[] = '<td class="r">' . game::format_number($row['up_hits']) . '</td>'; } if (isset($show['points'])) { $td[] = '<td class="r">' . game::format_number($row['up_points']) . '</td>'; } if (isset($show['cash'])) { $td[] = '<td class="r">' . game::format_cash($row['money']) . '</td>'; } if (isset($show['birth'])) { $birth = explode("-", $row['u_birth']); $td[] = '<td class="r">' . (empty($row['u_birth']) || $row['u_birth'] == "0000-00-00" ? 'Ikke registrert' : intval($birth[2]) . ". " . $_lang['months'][intval($birth[1])] . " " . $birth[0]) . '</td>'; } if (isset($show['banko'])) { $td[] = '<td><input type="radio" name="u1" value="' . $row['up_id'] . '" /></td>'; $td[] = '<td><input type="radio" name="u2" value="' . $row['up_id'] . '" /></td>'; } echo ' <tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '> ' . implode("\n\t\t\t\t", $td) . ' </tr>'; } echo '
/** * 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>'; }
while ($row = $result->fetch()) { $end = ceil(($row['time'] - 900) / 1800) * 1800 + 900; if (!isset($rounds[$end])) { $rounds[$end] = array("time" => $end, "total_lodd" => $row['total_lodd'], "total_users" => $row['total_users'], "users" => array()); } $rounds[$end]['users'][$row['type']] = array($row['lv_up_id'], $row['won']); } krsort($rounds); foreach ($rounds as $round) { echo ' <div class="section"> <h2>' . $_base->date->get($round['time'])->format() . '</h2> <p class="h_right">' . game::format_number($round['total_lodd']) . ' lodd, ' . game::format_number($round['total_users']) . ' spiller' . ($round['total_users'] == 1 ? '' : 'e') . '</p> <dl class="dd_right">'; foreach ($round['users'] as $num => $row) { echo ' <dt>' . $num . ' - <user id="' . $row[0] . '" /></dt> <dd>' . game::format_cash($row[1]) . '</dd>'; } echo ' </dl> </div>'; } // vis side echo ' <p class="c">' . $pagei->pagenumbers() . '</p>'; } echo ' </div> </div>'; $_base->page->load();
protected function show($as_who = null) { $complete = $this->data['poker_state'] == self::STATE_COMPLETE; if ($complete) { $winner = $this->get_winner(); } $is_starter = $as_who == self::SHOW_STARTER; $has_challenger = $this->data['poker_state'] >= self::STATE_CHALLENGE; $new = $this->data['poker_state'] == self::STATE_BEGIN; $challenge = !$is_starter && $this->data['poker_state'] == self::STATE_CHALLENGE; echo ' <div class="bg1_c small"> <h1 class="bg1">' . ($is_starter ? $new ? 'Nytt pokerspill' : 'Ditt pokerspill' : 'Din utfordring') . '<span class="left"></span><span class="right"></span></h1> <div class="bg1">'; if ($new) { echo ' <p>Du har nå startet et nytt pokerspill og fortsetter ved å velge de kortene du vil <u>beholde</u>. Når du har trykket fortsett kommer du opp på listen for utfordrere og andre kan spille mot deg.</p> <form action="" method="post"> <input type="hidden" name="state1" value="' . $this->id . '" />'; } elseif ($challenge) { $time_left = $this->data['poker_time_challenge'] + self::MAX_CHALLENGE_TIME - time(); echo ' <p>Du må fullføre din utfordring innen <b>' . game::counter($time_left, true) . '</b>. Dersom du ikke fullfører vil spillet automatisk velge kort for deg.</p> <form action="" method="post"> <input type="hidden" name="state3" value="' . $this->id . '" />'; } echo ' <dl class="dd_right center" style="width: 60%"> <dt>Tid siden start</dt> <dd>' . game::timespan($this->data['poker_time_start'], game::TIME_ABS) . '</dd>' . ($has_challenger ? ' <dt>Tid siden utfordring</dt> <dd>' . game::timespan($this->data['poker_time_challenge'], game::TIME_ABS) . '</dd>' : '') . ' <dt>Innsats</dt> <dd>' . game::format_cash($this->data['poker_cash']) . '</dd>' . ($has_challenger ? ' <dt>Utfordrer</dt> <dd><user id="' . $this->data['poker_' . ($is_starter ? 'challenger' : 'starter') . '_up_id'] . '" /></dd>' : ' <dt>Utfordrer</dt> <dd>Ingen enda</dd>') . ' </dl>'; if ($complete || $has_challenger && access::has("admin")) { echo ' <div class="poker_cards_section"> <p><b>Motstanderens kort:</b> ' . ($is_starter ? $this->text2 : $this->text1) . '</p> <p>'; if ($is_starter) { $this->list_cards($this->poker2, $this->solve2); } else { $this->list_cards($this->poker1, $this->solve1); } echo ' </p> </div>'; } echo ' <div class="poker_cards_section"> <p><b>Dine kort:</b> ' . ($is_starter ? $this->text1 : $this->text2) . '</p>' . ($challenge ? ' <p>Marker de kortene du ønsker å <u>beholde</u>.</p>' : '') . ' <p>'; if ($new || $challenge) { ess::$b->page->add_js('sm_scripts.poker_parse();'); if ($new) { $this->list_cards_selectable($this->poker1, $this->solve1); } else { $this->list_cards_selectable($this->poker2, $this->solve2); } } elseif ($is_starter) { $this->list_cards($this->poker1, $this->solve1); } else { $this->list_cards($this->poker2, $this->solve2); } echo ' </p> </div>'; if ($complete) { if ($winner[0] == 1 && !$is_starter || $winner[0] == 2 && $is_starter) { if ($winner[1]) { echo ' <p class="poker_res_lost">Dere fikk samme kombinasjon, men motstanderen din hadde høyere highcard. Du tapte runden...</p>'; } else { echo ' <p class="poker_res_lost">Motstanderen fikk bedre kombinasjon enn deg. Du tapte runden...</p>'; } } elseif ($winner[0] != 0) { if ($winner[1]) { echo ' <p class="poker_res_won">Dere fikk samme kombinasjon, men du hadde høyere highcard og vant ' . game::format_cash($this->data['poker_prize']) . '!</p>'; } else { echo ' <p class="poker_res_won">Du fikk bedre kombinasjon enn motstanderen og vant ' . game::format_cash($this->data['poker_prize']) . '!</p>'; } } else { echo ' <p class="poker_res_eq">Runden ble uavgjort.</p>'; } } elseif ($new) { echo (access::has("admin") ? ' <p class="c"><input type="checkbox" name="renew" id="renew"' . (isset($_POST['renew']) ? ' checked="checked"' : '') . '><label for="renew"> Ikke avslutt runden</label></p>' : '') . ' <p class="c">' . show_sbutton("Velg kort og åpne runden") . '</p> </form>'; } elseif ($challenge) { echo (access::has("admin") ? ' <p class="c"><input type="checkbox" name="renew" id="renew"' . (isset($_POST['renew']) ? ' checked="checked"' : '') . '><label for="renew"> Ikke avslutt runden</label></p>' : '') . ' <p class="c">' . show_sbutton("Velg kort og avslutt") . '</p> </form>'; } elseif ($this->can_pullback) { echo ' <form action="" method="post"> <input type="hidden" name="pullback" value="' . $this->id . '" /> <p class="c">Pokerrunden har ligget ute i mer enn ' . game::timespan(self::PULLBACK_TIME, game::TIME_FULL) . ' og du kan trekke den tilbake for å få igjen pengene og evt. legge deg ut på nytt.</p> <p class="c">' . show_sbutton("Trekk tilbake pokerrunden") . '</p> </form>'; } elseif ($this->data['poker_state'] == self::STATE_FREE) { echo ' <p class="c">Hvis ingen utfordrer deg i løpet av ' . game::timespan(self::PULLBACK_TIME, game::TIME_FULL) . ' vil du kunne trekke tilbake runden.</p>'; } elseif ($is_starter && $this->data['poker_state'] == self::STATE_CHALLENGE) { echo ' <p class="c">Venter på at <user id="' . $this->data['poker_challenger_up_id'] . '" /> skal velge kort...</p>'; } echo ' </div> </div>'; }
/** * Try to attack a specific player * * @param array Data about the player * @param int Cash to get * @return bool|null True on success */ protected function handleSuccessPlayer($player, $cash) { $rank = \Kofradia\Game\Rank\Points::getRank($player['up_points']); $affect = $this->ut->getAffectedTable($rank); // can not have too little energy if ($player['up_energy'] < $affect['energy'] * 2) { return; } // now take money $a = \Kofradia\DB::get()->prepare("\n\t\t\tUPDATE users_players\n\t\t\tSET up_bank = IF(up_cash < ?, up_bank - ?, up_bank),\n\t\t\t\tup_cash = IF(up_cash >= ?, up_cash - ?, up_cash)\n\t\t\tWHERE up_id = ? AND (up_cash >= ? OR up_bank >= ?)"); if (!$a->execute(array($cash, $cash, $cash, $cash, $player['up_id'], $cash, $cash))) { // did not succeed return; } $this->result->up = \player::get($player['up_id']); $this->result->cashLost = $cash; $this->result->fromBank = $this->result->up->data['up_cash'] < $cash; // TODO: this cannot be checked this way? // notify victim $this->result->up->add_log("utpressing", $this->ut->up->id, $cash); // log putlog("SPAMLOG", "%c11%bUTPRESSING:%b%c %u{$this->ut->up->data['up_name']}%u presset %u{$this->result->up->data['up_name']}%u for %u" . \game::format_cash($cash) . "%u" . ($this->result->fromBank ? ' (fra bankkonto)' : '')); \Kofradia\DB::get()->prepare("\n\t\t\tINSERT INTO utpressinger\n\t\t\tSET\n\t\t\t\tut_action_up_id = ?,\n\t\t\t\tut_affected_up_id = ?,\n\t\t\t\tut_b_id = ?,\n\t\t\t\tut_time = ?")->execute(array($this->ut->up->id, $this->result->up->id, $this->ut->up->data['up_b_id'], time())); // the victim always looses energy // but only health if the money comes from the hand // (don't really know why we made it this way) $this->result->up->energy_use($affect['energy']); if (!$this->result->fromBank) { $this->result->attack = $this->result->up->health_decrease($affect['health'], $this->ut->up, \player::ATTACK_TYPE_UTPRESSING); } return true; }
/** * Vis auksjonen */ protected function show() { // hent budet som leder, evt. vant $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ab_up_id, ab_bid, ab_time\n\t\t\tFROM auksjoner_bud\n\t\t\tWHERE ab_a_id = {$this->auksjon->id} AND ab_active != 0\n\t\t\tORDER BY ab_time DESC\n\t\t\tLIMIT 1"); $bud_lead = $result->fetch(); // hent alle budene $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 30); $result = $pagei->query("\n\t\t\tSELECT ab_up_id, ab_bid, ab_time, ab_active\n\t\t\tFROM auksjoner_bud\n\t\t\tWHERE ab_a_id = {$this->auksjon->id}\n\t\t\tORDER BY ab_time DESC"); $bud = array(); while ($row = $result->fetch()) { $bud[] = $row; } // sjekk om vi har bud $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ab_bid, ab_time\n\t\t\tFROM auksjoner_bud\n\t\t\tWHERE ab_a_id = {$this->auksjon->id} AND ab_up_id = {$this->up->id} AND ab_active != 0"); $bud_own = $result->fetch(); $bud_own_locked = $this->auksjon->data['a_type'] == auksjon::TYPE_KULER || time() > $bud_own['ab_time'] + auksjon::MAX_TIME_REMOVE; $type = auksjon_type::get($this->auksjon->data['a_type']); // beregn minstepris $minstepris = $bud_lead ? bcadd($bud_lead['ab_bid'], $this->auksjon->data['a_bid_jump']) : $this->auksjon->data['a_bid_start']; // sett opp tittel/beskrivelse $title = htmlspecialchars($this->auksjon->data['a_title']); // firma/familie? if ($this->auksjon->data['a_type'] == auksjon::TYPE_FIRMA) { $ff_id = $this->auksjon->params->get("ff_id"); if ($ff_id) { $title = '<a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $ff_id . '">' . $title . '</a>'; } } echo ' <div class="col2_w" style="margin: 40px"> <div class="col_w left" style="width: 45%"> <div class="col" style="margin-right: 20px"> <div class="bg1_c"> <h1 class="bg1">Auksjon<span class="left"></span><span class="right"></span></h1> <div class="bg1"> <p class="c"><a href="auksjoner?t=' . $this->auksjon->data['a_type'] . '">Tilbake til oversikt</a></p> <dl class="dd_right"> <dt>Beskrivelse</dt> <dd>' . $title . '</dd>' . ($type->have_up ? ' <dt>Spiller</dt> <dd>' . ($this->auksjon->data['a_up_id'] ? '<user id="' . $this->auksjon->data['a_up_id'] . '" />' : 'Ingen spiller') . '</dd>' : ''); // ikke startet? if ($this->auksjon->status == auksjon::STATUS_WAIT) { echo ' <dt>Auksjonsstart</dt> <dd>' . ess::$b->date->get($this->auksjon->data['a_start'])->format(date::FORMAT_SEC) . '<br />' . game::counter($this->auksjon->data['a_start'] - time(), true) . '</dd> <dt>Auksjonslutt</dt> <dd>' . ess::$b->date->get($this->auksjon->data['a_end'])->format(date::FORMAT_SEC) . '</dd>'; } else { echo ' <dt>Auksjonslutt</dt> <dd>' . ess::$b->date->get($this->auksjon->data['a_end'])->format(date::FORMAT_SEC) . ($this->auksjon->status == auksjon::STATUS_ACTIVE ? '<br />' . game::counter($this->auksjon->data['a_end'] - time(), true) : '') . '</dd>'; } // vis info echo ' <dt>Budstart</dt> <dd>' . game::format_cash($this->auksjon->data['a_bid_start']) . '</dd> <dt>Minste budøkning</dt> <dd>' . game::format_cash($this->auksjon->data['a_bid_jump']) . '</dd>'; // status if ($this->auksjon->status == auksjon::STATUS_WAIT) { // ikke startet echo ' <dt>Status</dt> <dd>Ikke startet</dd>'; } elseif ($this->auksjon->status == auksjon::STATUS_FINISHED) { // ferdig echo ' <dt>Status</dt> <dd>Avsluttet</dd> <dt>Vunnet av</dt>'; // vinnerbudet if ($bud_lead) { echo ' <dd><user id="' . $bud_lead['ab_up_id'] . '" /></dd>'; } else { echo ' <dd>Ingen vinner</dd>'; } } else { // pågår echo ' <dt>Status</dt> <dd>Pågår nå</dd>'; } echo ' </dl>'; // mer info? if (!empty($this->auksjon->data['a_info'])) { echo ' <p>' . game::bb_to_html($this->auksjon->data['a_info']) . '</p>'; } echo ' </div> </div> </div> </div> <div class="col_w right" style="width: 55%"> <div class="col" style="margin-left: 20px"> <div class="bg1_c"> <h1 class="bg1">Bud<span class="left"></span><span class="right"></span></h1> <div class="bg1">'; // auksjon pågår -- legg til nye bud if ($this->auksjon->status == auksjon::STATUS_ACTIVE) { $own = $this->auksjon->data['a_up_id'] == $this->up->id; if (!$own) { // første budet? if (!$bud_lead) { echo ' <p>Dette er det første budet på denne auksjonen. Du må derfor by minimum ' . game::format_cash($this->auksjon->data['a_bid_start']) . '.</p>'; } else { echo ' <p>Du må by minimum ' . game::format_cash($this->auksjon->data['a_bid_jump']) . ' høyere enn ' . ($bud_lead['ab_up_id'] == $this->up->id ? 'ditt forrige bud' : 'det forrige budet til <user id="' . $bud_lead['ab_up_id'] . '" />') . ' på ' . game::format_cash($bud_lead['ab_bid']) . '.</p>'; } // bud på kuler kan ikke trekkes tilbake // TODO: om noe kan trekkes tilbake bør bestemmes av auksjonen, ikke logikken i koden her if ($this->auksjon->data['a_type'] == auksjon::TYPE_KULER) { echo ' <p><b>Budet er bindende og kan ikke trekkes tilbake!</b></p> <p>Dersom noen byr over deg, vil budet ditt bli inaktivt og du får pengene igjen.</p>'; } else { echo ' <p>Du kan trekke tilbake budet ditt innen det har gått ' . game::timespan(auksjon::MAX_TIME_REMOVE, game::TIME_FULL) . '. Etter ' . game::timespan(auksjon::MAX_TIME_REMOVE, game::TIME_FULL | game::TIME_NOBOLD) . ' er budet ditt bindende og det kan ikke trekkes tilbake.</p> <p>Dersom noen byr over deg, vil budet ditt bli inaktivt og du får pengene igjen etter at budet har stått i ' . game::timespan(auksjon::MAX_TIME_REMOVE, game::TIME_FULL | game::TIME_NOBOLD) . '.</p>'; } } // har vi bydd? if ($bud_own) { // gått ut på tid? if ($bud_own_locked) { echo ' <p>Du har bydd på denne auksjonen og ditt bud er bindende.</p>'; } else { // kan trekke budet echo ' <p>Du har bydd på denne auksjonen og kan fortsatt trekke tilbake ditt bud.</p>'; } // vis budøkning echo ' <form action="" method="post"> <dl class="dd_right"> <dt>Øk bud til</dt> <dd><input class="styled w100 r" type="text" name="amount" value="' . game::format_cash($minstepris) . '" /></dd> </dl> <p class="c">' . show_sbutton("Øk bud", 'name="raise_bid"') . (!$bud_own_locked ? ' ' . show_sbutton("Slett bud", 'name="del_bid"') : '') . '</p> </form>'; } elseif (!$own) { // har ikke noe våpen? if ($this->auksjon->data['a_type'] == auksjon::TYPE_KULER && !$this->up->weapon) { echo ' <p>Du har ikke noe våpen og kan ikke delta i denne auksjonen.</p>'; } elseif ($this->auksjon->data['a_type'] == auksjon::TYPE_FIRMA && $this->up->get_health_percent() < player::FF_HEALTH_LOW * 100) { echo ' <p>Du har for lav helse til å kunne by på et firma.</p>'; } else { echo ' <form action="" method="post"> <dl class="dd_right"> <dt>Legg inn bud</dt> <dd><input class="styled w100 r" type="text" name="amount" value="' . game::format_cash($minstepris) . '" /></dd> </dl> <p class="c">' . show_sbutton("Legg inn bud", 'name="place_bid"') . '</p> </form>'; } } } // vis budene if (count($bud) == 0) { if ($this->auksjon->status != auksjon::STATUS_WAIT) { echo ' <p class="c">Ingen bud er lagt inn i denne auksjonen.</p>'; } } else { ess::$b->page->add_css('.bud_inactive { text-decoration: line-through; color: #888 }'); echo ' <dl class="dd_right">'; // gå gjennom alle budene foreach ($bud as $row) { echo ' <dt' . ($row['ab_active'] == 0 ? ' class="bud_inactive"' : '') . '>' . ess::$b->date->get($row['ab_time'])->format("H:i:s") . ': <user id="' . $row['ab_up_id'] . '" /></dt> <dd' . ($row['ab_active'] == 0 ? ' class="bud_inactive"' : '') . '>' . game::format_cash($row['ab_bid']) . '</dd>'; } echo ' </dl>'; if ($pagei->pages > 1) { echo ' <p class="c">' . $pagei->pagenumbers() . '</p>'; } } echo ' </div> </div> </div> </div> </div>'; }