protected function get_text($name, $sub, $data) { switch ($name) { case "rank": case "rank_kill": return ucfirst(game::$ranks['items_number'][$sub]['name']); case "familie": return 'Broderskap'; case "familie_rank": return game::format_num($data['ff_points_sum']) . ' poeng'; case "ff_owner": return ucfirst(ff::$types[$sub]['typename']); case "cash_num": return hall_of_fame::get_cash_pos($sub); } }
/** * 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>'; } }
/** * 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>'; }
/** * 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'])); } }
/** * 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); }
/** * Vise forskjellig statistikk for gta */ protected function stats_show() { ess::$b->page->add_title("Statistikk"); // hent antall forsøk og vellykkede spredt på hver bydel $stats_totalt = array(); $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT b_id, MAX(time_last) max_time_last, SUM(count) sum_count, SUM(success) sum_success\n\t\t\tFROM gta_options_status\n\t\t\t\tJOIN gta_options ON optionid = gta_options.id\n\t\t\tWHERE gos_up_id = {$this->gta->up->id}\n\t\t\tGROUP BY b_id"); while ($row = $result->fetch()) { $stats_totalt[$row['b_id']] = $row; } // hent informasjon om bydelene $bydeler = $this->gta->get_bydeler_info(); echo ' <h1>Statistikk for biltyveri</h1> <div class="bg1_c small"> <h1 class="bg1">Bydeler<span class="left2"></span><span class="right2"></span></h1> <div class="bg1">'; if (count($stats_totalt) == 0) { echo ' <p>Du har ikke gjennomført noen forsøk på biltyveri.</p>'; } else { echo ' <table class="table center tablem"> <thead> <tr> <th>Bydel</th> <th>Antall forsøk</th> <th>Antall vellykkede</th> <th>Forrige forsøk</th> </tr> </thead> <tbody class="r">'; $i = 0; foreach (game::$bydeler as $bydel) { if ($bydel['active'] == 0) { continue; } if (isset($stats_totalt[$bydel['id']])) { $forsok = $stats_totalt[$bydel['id']]['sum_count']; $vellykkede = $stats_totalt[$bydel['id']]['sum_success']; $siste = ess::$b->date->get($stats_totalt[$bydel['id']]['max_time_last'])->format(); echo ' <tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '> <td class="l">' . htmlspecialchars($bydel['name']) . '</td> <td>' . $forsok . '</td> <td>' . $vellykkede . '</td> <td>' . $siste . '</td> </tr>'; } else { echo ' <tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '> <td class="l">' . htmlspecialchars($bydel['name']) . '</td> <td class="c dark" colspan="3"><i>Ingen forsøk</i></td> </tr>'; } } echo ' </tbody> </table>'; } echo ' </div> </div> <div class="bg1_c xmedium"> <h1 class="bg1">Garasjer<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <table class="table center tablem"> <thead> <tr> <th>Bydel</th> <th>Firma</th> <th>Kapasitet</th> <th>Biler i garasjen</th> <th>Ledige plasser</th> <th>Neste frist</th> </tr> </thead> <tbody class="c">'; $i = 0; foreach ($bydeler as $b_id => $row) { $bydel = game::$bydeler[$b_id]; if ($bydel['active'] == 0) { continue; } echo ' <tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '> <td class="l">' . htmlspecialchars($bydel['name']) . '</td>'; if (!$row['ff_id']) { echo ' <td class="dark" colspan="5"><i>Ingen garasje</i></td>'; } else { $ant = $row['garage_max_cars'] - $row['cars']; if ($ant < 0) { $ant = 0; } echo ' <td><a href="&rpath;/ff/?ff_id=' . $row['ff_id'] . '">' . htmlspecialchars($row['ff_name']) . '</a></td> <td>' . game::format_num($row['garage_max_cars']) . '</td> <td>' . game::format_num($row['cars']) . '</td> <td><b>' . game::format_num($ant) . '</b></td> <td>' . ess::$b->date->get($row['garage_next_rent'])->format("d.m H:i") . '</td>'; } echo ' </tr>'; } echo ' </tbody> </table> </div> </div>'; }
/** * Hent tekst for en Hall of Fame */ public static function get_text($name, $sub, $data) { switch ($name) { case "rank": return 'første spilleren til å oppnå ranken ' . game::$ranks['items_number'][$sub]['name']; case "rank_kill": return 'første spilleren til å drepe en ' . game::$ranks['items_number'][$sub]['name']; case "familie": return 'første familien i spillet'; case "familie_rank": return 'topp rangert broderskap i spillet med ' . game::format_num($data['ff_points_sum']) . ' poeng'; case "ff_owner": return 'første spilleren til å eie ' . ($sub == 1 ? 'en' : 'et') . ' ' . ff::$types[$sub]['typename']; case "cash_num": return 'første spilleren til å oppnå pengeplasseringen «' . self::get_cash_pos($sub) . '»'; } throw new HSException("Ukjent type."); }
/** * 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; }
<tr> <td>#</td> <td>Spiller</td> <td>Antall</td> <td>Broderskap</td> </tr> </thead> <tbody>'; $i = 0; foreach ($stats_dam as $row) { $familier = isset($up_ff[$row['up_id']]) ? implode(",<br />", $up_ff[$row['up_id']]) : ' '; echo ' <tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '> <td class="c">' . $i . '.</td> <td><user id="' . $row['up_id'] . '" /></td> <td class="r">' . game::format_num($row['up_attack_damaged_num']) . '</td> <td>' . $familier . '</td> </tr>'; } echo ' </tbody> </table>'; echo ' <!-- pengestatusene --> <table class="table game tablemb" width="100%"> <thead> <tr> <th colspan="4">Pengestatusene</th> </tr> <tr> <td>Nummer</td>
/** * Vis lotto */ protected function show_page() { echo ' <div class="col2_w" style="margin: 40px"> <div class="col_w left"> <div class="col" style="margin-right: 20px"> <div class="bg1_c" id="lotto"> <h1 class="bg1">Lotto<span class="left"></span><span class="right"></span></h1> <div class="bg1"> <p class="c">Neste trekning: ' . game::counter($this->next, true) . '.</p>'; if ($this->active) { // kan vi kjøpe lodd? if ($this->info['antall_lodd'] < lotto::$lodd_maks) { $antall = min(lotto::$lodd_maks_om_gangen, floor(login::$user->player->data['up_cash'] / lotto::get_lodd_price())); echo ' <form action="" method="post">' . $this->form->getHTMLInput() . '<input type="hidden" name="b" value="Gjenstående lodd" /><input type="hidden" name="lodd" value="' . $antall . '" /></form>' . (time() < lotto::PRICE_CHANGE + 43200 ? ' <p class="c">Pris per lodd ' . (time() < lotto::PRICE_CHANGE ? 'blir' : 'ble') . ' økt til <span style="color: #DD3333">' . game::format_cash(lotto::PRICE) . '</span> kl. ' . ess::$b->date->get(lotto::PRICE_CHANGE)->format("H:i") . '</p>' : '') . ' <form action="" method="post"> ' . $this->form->getHTMLInput() . ' <dl class="dd_right center" style="width: 80%"> <dt>Gjenstående lodd</dt> <dd>' . game::format_number(lotto::$lodd_maks - $this->info['antall_lodd']) . '</dd> <dt>Antall kjøpt</dt> <dd>' . game::format_number($this->info['antall_lodd']) . '</dd> <dt>Pris per lodd</dt> <dd>' . game::format_cash(lotto::get_lodd_price()) . '</dd>' . ($this->wait > 0 ? ' <dt>Må vente</dt> <dd style="color: #FF0000">' . game::counter($this->wait, true) . '</dd>' : ' <dt>Ventetid</dt> <dd>' . game::timespan(lotto::$ventetid, game::TIME_FULL) . '</dd> </dl> <dl class="dd_right dl_2x center" style="width: 80%"> <dt>Antall lodd</dt> <dd><input type="text" value="' . $antall . '" class="styled w40 r" name="lodd" maxlength="3" /></dd> <dd>' . show_sbutton("Kjøp lodd") . '</dd>') . ' </dl> </form>'; } } else { echo ' <p class="c">Lottorunden er for øyeblikket ikke aktiv.</p>'; } echo ' <p class="c"><a href="lotto_vinn">Min historie</a> | <a href="node/25">Informasjon om funksjonen</a></p> </div> </div> <div class="bg1_c" style="margin-top: 20px"> <h1 class="bg1">Informasjon om lottorunden<span class="left"></span><span class="right"></span></h1> <div class="bg1"> <dl class="dd_right"> <dt>Antall lodd solgt totalt denne runden</dt> <dd>' . game::format_number($this->info['totalt_lodd']) . '</dd> <dt>Antall spillere som har kjøpt lodd</dt> <dd>' . game::format_number($this->info['brukere']) . '</dd> <dt><b>Potten</b></dt> <dd><b>' . game::format_cash($this->info['pott']) . '</b></dd> </dl> </div> </div> <div class="bg1_c" style="margin-top: 20px"> <h1 class="bg1">Gevinster<span class="left"></span><span class="right"></span></h1> <div class="bg1"> <table class="table tablem" width="100%"> <tbody>'; $i = 0; foreach (lotto::$premier as $premie) { echo ' <tr' . (is_int($i / 2) ? ' class="color"' : '') . '> <td>' . ($i + 1) . '. plass</td> <td class="r"><b style="color: #55AA55">' . game::format_num($premie[0]) . '</b> poeng</td> <td class="r"><b style="color: #F9E600">' . game::format_number($premie[1] * 100, 0) . ' %</b> av potten</td> </tr>'; $i++; } echo ' </tbody> </table> <p class="c">Poengene tar utgangspunkt i at ' . lotto::PLAYERS_TOP . ' spillere eller flere deltar. Ved færre deltakere vil poengene bli redusert.</p> </div> </div> </div> </div> <div class="col_w right"> <div class="col" style="margin-left: 20px"> <div class="bg1_c"> <h1 class="bg1">Siste trekninger<span class="left"></span><span class="right"></span></h1> <div class="bg1">'; // hent de siste trekningene $result = \Kofradia\DB::get()->query("SELECT CEILING((time-900)/1800)*1800+900 FROM lotto_vinnere GROUP BY CEILING((time-900)/1800)*1800+900 ORDER BY time DESC LIMIT 4"); if ($result->rowCount() == 0) { echo ' <p>Ingen trekninger har blitt gjennomført.</p>'; } else { $row = $result->fetch(\PDO::FETCH_NUM); $last = $row[0]; do { $first = $row[0] - 1800; } while ($row = $result->fetch(\PDO::FETCH_NUM)); // hent vinnerene $result = \Kofradia\DB::get()->query("SELECT lv_up_id, time, won, total_lodd, total_users, type FROM lotto_vinnere WHERE time >= {$first} AND time < {$last} ORDER BY type"); $rounds = array(); // legg i riktig gruppe 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"> <h1>' . ess::$b->date->get($round['time'])->format() . '</h1> <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>'; } echo ' <p class="c"><a href="lotto_trekninger">Vis utvidet oversikt</a></a>'; } echo ' </div> </div> </div> </div> </div>'; }
/** * Panelet */ protected function page_panel() { ess::$b->page->add_title("Panel"); ess::$b->page->add_css(' .ff_panel { width: 490px; margin: 0 auto; overflow: hidden; } .ff_panel .section { margin-bottom: 20px; }'); // hent info om innbetaling $pay_info = $this->ff->pay_info(); // sjekk om vi er i forum lista $forum_added = $this->ff->uinfo->forum_link() !== NULL; // medlemsbegrensning $limits = $this->ff->get_limits(); echo ' <div class="ff_panel"> <div style="width: 235px; float: left"> <!-- ffinformasjon --> <div class="section"> <h2>Informasjon om ' . $this->ff->type['refobj'] . '</h2> <dl class="dd_right"> <dt>Navn</dt> <dd>' . htmlspecialchars($this->ff->data['ff_name']) . '</dd> <dt>Opprettet</dt> <dd>' . ess::$b->date->get($this->ff->data['ff_date_reg'])->format() . '</dd> <dt>Pengebeholdning</dt> <dd>' . game::format_cash($this->ff->data['ff_bank']) . '</dd> <dt>Medlemsbegrensning</dt> <dd>' . $limits[0] . ' medlemmer</dd> </dl>' . ($this->ff->data['ff_is_crew'] ? ' <p>' . ucfirst($this->ff->type['refobj']) . ' har status som nostat. Den teller ikke med i spillstatistikken til spilleren.</p>' : '') . ($this->ff->uinfo->data['ffm_priority'] == 3 ? ' <p class="c"><a href="panel?ff_id=' . $this->ff->id . '&a=suggestion">Foreslå ' . ($this->ff->type['type'] == "familie" ? 'nytt medlem' : 'ny ansatt') . ' til ' . $this->ff->type['refobj'] . ' »</a></p>' : '') . ' <p class="c"><a href="./?ff_id=' . $this->ff->id . '&stats">Vis statistikk for ' . $this->ff->type['refobj'] . '</a></p> </div> <!-- egen informasjon --> <div class="section"> <h2>Min informasjon</h2> <dl class="dl_30 dd_right"> <dt>Ble med</dt> <dd>' . ess::$b->date->get($this->ff->uinfo->data['ffm_date_join'])->format() . '</dd> <dt>Posisjon</dt> <dd>' . ucfirst($this->ff->uinfo->get_priority_name()) . '</dd> <dt>Donert</dt> <dd>' . game::format_cash($this->ff->uinfo->data['ffm_donate']) . '</dd> </dl> <form action="" method="post"> <p class="c">' . show_sbutton("Forlat {$this->ff->type['refobj']}", 'name="leave"') . '</p> </form> </div>'; // kulelager for familie if ($this->ff->type['type'] == "familie") { $cap = $this->ff->get_bullets_capacity(); $bullets = $this->ff->params->get("bullets", 0); echo ' <!-- kulelager for broderskap --> <div class="section"> <h2>Kulelager for broderskapet</h2> <dl class="dd_right"> <dt>Kapasitet</dt> <dd>' . game::format_num($cap) . '</dd> <dt>Antall kuler</dt> <dd>' . game::format_num($bullets) . '</dd> </dl>'; if (login::$user->player->weapon) { $up_cap = login::$user->player->weapon->data['bullets']; $up_bullets = login::$user->player->data['up_weapon_bullets']; $up_bullets_a = login::$user->player->data['up_weapon_bullets_auksjon']; echo ' <p style="margin-bottom: 0"><b>Din oversikt</b></p> <dl class="dd_right" style="margin-top: 0"> <dt>Kapasitet</dt> <dd>' . game::format_num($up_cap) . '</dd> <dt>Antall kuler</dt> <dd>' . game::format_num($up_bullets) . ($up_bullets_a ? ' (' . game::format_num($up_bullets_a) . ')' : '') . '</dd> </dl>'; // de som ikke er nostat skal ikke få ta ut kuler fra Kofradia Crew if (!access::is_nostat() && $this->ff->data['ff_id'] == 1) { echo ' <p>Du kan ikke sette inn/ta ut kuler fra ' . htmlspecialchars($this->ff->data['ff_name']) . '.</p>'; } else { // kan vi ikke ta ut kuler? $p = $this->ff->uinfo->data['ffm_priority']; if ($p > 3) { echo ' <p>Du kan ikke ta ut kuler, men kan få <user id="' . $this->ff->uinfo->data['ffm_parent_up_id'] . '" /> til å gi deg kuler fra broderskapet.</p>'; } else { // spillere vi kan ta ut kuler til $s_up = postval("bullets_up"); $other = array(); // kan vi ta ut kuler for kun underordnede under seg selv? (har pri 3) if ($p == 3 && isset($this->ff->members['members_parent'][login::$user->player->id])) { foreach ($this->ff->members['members_parent'][login::$user->player->id] as $ffm) { $other[] = $ffm; } } elseif ($p < 3 && isset($this->ff->members['members_priority'][4])) { foreach ($this->ff->members['members_priority'][4] as $ffm) { $other[] = $ffm; } } // har vi noen underordnede? $sub = ''; if ($other) { $sub = ' <select name="bullets_up"> <option value="">Til meg</option>'; foreach ($other as $ffm) { $sub .= ' <option value="' . $ffm->data['ffm_up_id'] . '"' . ($s_up == $ffm->data['ffm_up_id'] ? ' selected="selected"' : '') . '>' . htmlspecialchars($ffm->data['up_name']) . '</option>'; } $sub .= ' </select>'; } echo ' <form action="" method="post"> <p class="c">' . $sub . ' <input type="text" name="bullets_out" value="' . htmlspecialchars(postval("bullets_out")) . '" class="styled w30" /> ' . show_sbutton("Ta ut") . ' </p> </form>'; } echo ' <form action="" method="post"> <p class="c"> <input type="text" name="bullets_in" value="' . htmlspecialchars(postval("bullets_in")) . '" class="styled w30" /> ' . show_sbutton("Sett inn kuler") . ' </p> </form>'; } } else { echo ' <p>Du har ikke noe våpen og kan ikke sette inn/ta ut kuler.</p>'; } echo ' </div>'; } echo ' <!-- donasjon til FF --> <div class="section"> <h2>Donér til ' . $this->ff->type['refobj'] . '</h2> <form action="" method="post"> <dl class="dd_right"> <dt>Beløp</dt> <dd><input type="text" name="donate" value="' . game::format_cash(game::intval(postval("donate"))) . '" class="styled w75" /></dd> <dt>Melding/notat</dt> <dd><input type="text" name="note" value="' . htmlspecialchars(postval("note")) . '" maxlength="50" class="styled w100" /></dd> </dl> <p class="c">' . show_sbutton("Donér") . '</p> </form> </div> </div> <div style="margin-left: 20px; float: left; width: 235px">' . ($pay_info ? ' <!-- driftskostnad --> <div class="section"> <h2>Driftskostnad</h2> <p>For at ' . $this->ff->type['refobj'] . ' ikke skal dø ut, må det betales inn et beløp på <u>100 mill</u> i tillegg til kostnad per ekstra medlemsplass til spillet hver 10. dag.</p> <p>Når medlemmene i ' . $this->ff->type['refobj'] . ' ranker, vil beløpet som må innbetales synke med 1 og 1 mill avhengig av hvor mye som rankes.</p> <p>' . ucfirst($this->ff->type['refobj']) . ' mister ikke ranken hvis et medlem forlater ' . $this->ff->type['refobj'] . '.</p> <p>Beløpet vil bli trukket fra banken automatisk ved innbetalingstidspunkt. Hvis det ikke er nok penger i banken, vil ' . $this->ff->type['refobj'] . ' få frist på å innbetale beløpet manuelt innen 24 timer. Beløpet vil da øke med 50 %.</p>' . (!$pay_info['in_time'] ? ' <div class="section"> <h2>Betaling av driftskostnad</h2> <p class="error_box">' . ucfirst($this->ff->type['refobj']) . ' har overskredet tidspunktet for innbetaling. Betaling må skje manuelt av ' . $this->ff->type['priority'][1] . '/' . $this->ff->type['priority'][2] . '.</p> <dl class="dd_right"> <dt>Betalingsfrist</dt> <dd>' . ess::$b->date->get($pay_info['next'])->format() . '<br />' . game::timespan($pay_info['next'], game::TIME_ABS) . '</dd> <dt>Beløp</dt> <dd>' . game::format_cash($pay_info['price']) . '</dd> </dl> <p class="c"><a href="panel?ff_id=' . $this->ff->id . '&a=pay" class="button">Fortsett/vis detaljer »</a></p> <p>Hvis beløpet ikke blir betalt innen betalingsfristen vil ' . $this->ff->type['refobj'] . ' dø ut.</p> </div>' : ' <dl class="dd_right"> <dt>Neste innbetaling</dt> <dd>' . ess::$b->date->get($pay_info['next'])->format() . '</dd> <dt>Foreløpig beløp</dt> <dd>' . game::format_cash($pay_info['price']) . '</dd> </dl> <p><a href="panel?ff_id=' . $this->ff->id . '&a=pay">Vis oversikt over medlemmers bidrag »</a></p> <p><a href="panel?ff_id=' . $this->ff->id . '&a=paystats">Statistikk »</a></p>') . ' </div>' : '') . ' <!-- forum ting --> <div class="section"> <h2>Forum</h2> <p class="h_right"><a href="../forum/forum?id=' . $this->ff->get_fse_id() . '">Vis forum</a></p> <p>For enkel tilgang til forumet for ' . $this->ff->type['refobj'] . ' kan du legge til en lenke i menyen.</p> <form action="" method="post"> <p><b>Status</b>: ' . ($forum_added ? 'Lenke <u>vises</u> - ' . show_sbutton("Fjern lenke", 'name="forum_link_remove"') : 'Lenke er <u>skjult</u> - ' . show_sbutton("Vis lenke", 'name="forum_link_add"')) . '</p> </form> </div>'; // eier info if ($this->ff->access(2)) { $high = $this->ff->access(1); $groups = array(); $eier = ucfirst($this->ff->type['priority'][1]); if ($high) { $groups["Generelt"][] = '<a href="panel?ff_id=' . $this->ff->id . '&a=sell">Selg ' . $this->ff->type['refobj'] . ' til ' . $this->ff->type['priority'][2] . '</a> (' . $eier . ')'; } if ($high) { $groups["Generelt"][] = '<a href="panel?ff_id=' . $this->ff->id . '&a=navnbytte">' . ($this->ff->mod ? 'Endre navn' : 'Søk om navnbytte') . '</a> (' . $eier . ')'; } $groups["Generelt"][] = '<a href="panel?ff_id=' . $this->ff->id . '&a=beskrivelse">Rediger beskrivelse</a>'; if ($high) { $groups["Generelt"][] = '<a href="panel?ff_id=' . $this->ff->id . '&a=logo">Bytt logo</a> (' . $eier . ')'; } if ($high) { $groups["Generelt"][] = '<a href="banken?ff_id=' . $this->ff->id . '">Banken</a> (' . $eier . ')'; } if ($high) { $groups["Generelt"][] = '<a href="panel?ff_id=' . $this->ff->id . '&a=drop">Legg ned ' . $this->ff->type['refobj'] . '</a> (' . $eier . ')'; } if ($this->ff->mod) { $groups["Generelt"][] = '<a href="panel?ff_id=' . $this->ff->id . '&a=br">Velg ny bygning</a> (Moderator)'; } // firmaer switch ($this->ff->type['type']) { case "avis": $groups["Avisfirma"][] = '<a href="avis?ff_id=' . $this->ff->id . '&a">Mine avisartikler</a>'; $groups["Avisfirma"][] = '<a href="avis?ff_id=' . $this->ff->id . '&u">Administrer avisutgivelser</a>'; break; case "bank": $groups["Bankfirma"][] = '<a href="bank?ff_id=' . $this->ff->id . '">Administrer banken</a>'; break; } $groups["Medlemmer"][] = '<a href="medlemmer?ff_id=' . $this->ff->id . '">Medlemskontroll</a>'; $groups["Medlemmer"][] = '<a href="medlemmer?ff_id=' . $this->ff->id . '&invite">Inviter spiller</a>'; if ($high && $this->ff->type['type'] == "familie") { $groups["Medlemmer"][] = '<a href="panel?ff_id=' . $this->ff->id . '&a=members_limit">Medlemsbegrensning</a> (' . $eier . ')'; } $groups["Annet"][] = '<a href="logg?ff_id=' . $this->ff->id . '">Vis logg</a>'; $groups["Annet"][] = '<a href="../forum/forum?id=' . $this->ff->get_fse_id() . '">Vis forum</a>'; echo ' <div class="section"> <h2>Innstillinger/handlinger</h2>'; foreach ($groups as $group => $items) { echo ' <h3>' . $group . '</h3> <ul> <li>' . implode('</li> <li>', $items) . '</li> </ul>'; } echo ' </div>'; } echo ' </div> </div>'; }
/** * Be som sykebil */ protected function sykebil() { // kan ikke bruke sykebil? if ($this->up->data['up_b_id'] == $this->ff->data['br_b_id'] || $this->up->get_energy_percent() >= self::ENERGY_SYKEBIL_REQ) { return; } // bekreftet? if (isset($_POST['confirm']) && validate_sid()) { // ikke bekreftet? if (!isset($_POST['c'])) { ess::$b->page->add_message("Du må bekrefte at du mister 25 % rank for å kunne benytte deg av alternativet.", "error"); } else { if (!$this->form->validateHashOrAlert(null, "Sykehus")) { return; } // sett ned ranken $p = round($this->up->data['up_points'] * 0.25); $this->up->increase_rank(-$p, false); // flytt til korrekt bydel \Kofradia\DB::get()->exec("UPDATE users_players SET up_b_id = {$this->ff->data['br_b_id']}, up_b_time = " . time() . " WHERE up_id = " . $this->up->id); $this->up->data['up_b_id'] = $this->ff->data['br_b_id']; unset($this->up->bydel); // gi melding ess::$b->page->add_message("Du ble hentet av en sykebil og ble fraktet til <b>" . htmlspecialchars($this->up->bydel['name']) . "</b>. Du kan nå kjøpe energi hos sykehuset. Du mistet " . game::format_num($p) . " poeng (" . game::format_rank($p) . " rank)."); putlog("DF", "%c4%bSYKEBIL:%b%c " . $this->up->data['up_name'] . " benyttet seg av sykebil og mistet " . game::format_number($p) . " rankpoeng. " . $this->up->generate_minside_url()); redirect::handle(); } } echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Sykehus<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <boxes /> <p class="c"><a href="./?ff_id=' . $this->ff->id . '">Tilbake</a></p> <p>Du har svært lite energi. Hvis du føler du står i fare for å dø og ikke har nok energi for å reise via bydeler, kan du få en sykebil til å hente deg.</p> <p>Når du blir hentet av en sykebil, vil du bli fraktet til bydelen sykehuset befinner seg i uten å miste noe helse eller energi. Du vil deretter kunne utføre alternativene for å få energi.</p> <p>Ved å benytte seg av dette alternativet <b>må du ofre 25 % av din totale rank</b>.</p> <form action="" method="post"> <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <input type="hidden" name="sykebil" /> ' . $this->form->getHTMLInput() . ' <p class="c"><input type="checkbox" id="sykebil_c" name="c" /><label for="sykebil_c"> Jeg bekrefter at jeg mister 25 % av min rank</label></p> <p class="c">' . show_sbutton("Be om sykebil", 'name="confirm"') . '</p> </form> <p class="c"><a href="./?ff_id=' . $this->ff->id . '">Tilbake</a></p> </div> </div>'; return true; }
/** * Prestasjoner */ protected static function page_achievements() { ess::$b->page->add_title("Prestasjoner"); kf_menu::page_id("achievements"); // kan ikke se? if (!page_min_side::$pstats) { echo ' <p class="c">Du har ikke tilgang til å se denne siden.</p>'; return; } echo ' <p class="c">Du har oppnådd totalt ' . game::format_num(page_min_side::$active_player->data['up_achievements_points']) . ' prestasjonspoeng.</p> <div class="achievements">'; // hent repetisjoner $rep_all = page_min_side::$active_player->achievements->get_rep_count(); // grupper etter gjentakelsemulighet $list = array("norep" => array(), "rep" => array()); foreach (achievements::$achievements as $a) { $list[$a->data['ac_recurring'] ? 'rep' : 'norep'][] = $a; } foreach ($list as $type => $all) { echo ' <div class="achievements_group"> <p class="ac_group">' . ($type == "rep" ? 'Repeterende prestasjoner:' : 'Enkeltoppnående prestasjoner:') . '</p>'; foreach ($all as $a) { // hent premie $prize = sentences_list($a->get_prizes()); if (empty($prize)) { $prize = ' '; } // sjekk om utført if (isset($rep_all[$a->id])) { if ($a->data['ac_recurring']) { $done = 'Oppnådd ' . fwords("%d gang", "%d ganger", $rep_all[$a->id]['count_upa_id']); $done .= '<br />Sist ' . ess::$b->date->get($rep_all[$a->id]['max_upa_time'])->format(); } else { $done = 'Oppnådd ' . ess::$b->date->get($rep_all[$a->id]['max_upa_time'])->format(); } } else { $done = "Du har ikke oppnådd denne prestasjonen"; } $img = isset($rep_all[$a->id]) && !$a->data['ac_recurring'] ? '<img src="' . STATIC_LINK . '/icon/ruby.png" alt="" title="Oppnådd" /> ' : ''; // fremdrift $progress = ''; $progress_text = ''; $item = new achievement_player_item(page_min_side::$active_player, $a); $item->load_active(); if ($p = $item->get_progress()) { $w = round($p['current'] / $p['target'] * 100, 1); $progress = ' <div class="ac_progress" title="Fremdrift: ' . $p['current'] . ' / ' . $p['target'] . '" style="width: ' . $w . '%"></div>'; $progress_text = ' <p class="ac_progress_text" style="text-align: right;">Fremdrift: ' . $p['current'] . ' / ' . $p['target'] . '</p>'; } echo ' <div class="ac_row">' . $progress . ' <div class="ac_data' . ($progress ? ' ac_data_progress' : '') . '"> <h2>' . htmlspecialchars($a->data['ac_name']) . '</h2>' . ($a->data['ac_text'] ? ' <p class="ac_text">' . $a->data['ac_text'] . '</p>' : '') . ' <p class="ac_prize">Premie: ' . $prize . '</p> <p class="ac_apoints" title="Prestasjonspoeng">' . $img . $a->data['ac_apoints'] . '</p> <p class="ac_status">' . $done . '</p> ' . $progress_text . ' </div> </div>'; } echo ' </div>'; } echo ' </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(); }
/** * Sett opp tekst for en logg */ public function format_log($type, $note, $num) { global $_game, $__server; $html = false; // typenavn $type_name = self::$items_id[$type]; switch ($type_name) { case "utpressing": $melding = '[user id=' . $note . '] presset deg for [b]' . game::format_cash($num) . '[/b]!'; break; case "fengsel": $dusor = empty($note) ? '' : ' og mottok dusøren på ' . game::format_cash($note); $melding = '[user id=' . $num . '] brøt deg ut av fengselet' . $dusor . '!'; break; case "fengsel_dusor_return": $melding = 'Ingen hadde brutt deg ut av fengsel innen du kom ut og du fikk tilbake dusøren på ' . game::format_cash($num) . '.'; break; case "renter": $melding = "Du mottok [b]" . game::format_cash($num) . "[/b] i renter fra banken!" . (!empty($note) ? ' ' . $note : ''); break; case "forfremmelse": $melding = "Du ble forfremmet til [b]{$note}[/b]!"; break; case "nedgradering": $melding = "Du ble nedgradert til [b]{$note}[/b]!"; break; // rank bonus // rank bonus case "rank_bonus": // syntax: plassering(int):prosent bonus(float), num = bonus $info = explode(":", $note); $melding = 'Du var den ' . ($info[0] == 1 ? 'beste' : $info[0] . '. beste') . ' rankeren de siste 24 timene og fikk ' . game::format_num($info[1] * 100) . ' % i bonus av poengene du hadde skaffet (' . game::format_num($num) . ' poeng i bonus).'; break; // verve bonus // verve bonus case "verve_bonus": // syntax: antall_spillere num = bonus $melding = 'Du mottok ' . game::format_num($num) . ' poeng i bonus fra ' . fwords("%d spiller", "%d spillere", $note) . ' du har vervet som hadde ranket de siste 24 timene.'; break; case "testing": $melding = "Testing - Melding: {$note} - Tall: {$num}"; break; case "raw": $html = true; $melding = $note; break; case "systeminfo": $melding = "Systeminformasjon: " . $note; break; // emen i crewforumet // emen i crewforumet case "crewforum_emne": $u = explode(":", $note, 2); $html = true; $melding = '<user id="' . $u[0] . '" /> opprettet <a href="forum/topic?id=' . $num . '">' . htmlspecialchars($u[1]) . '</a> i crewforumet.'; break; // svar i crewforumet // svar i crewforumet case "crewforum_svar": $u = explode(":", $note, 2); $s = explode("#", $u[0]); $u[0] = $s[0]; $replyid = isset($s[1]) ? '&replyid=' . $s[1] : ''; $html = true; $melding = '<user id="' . $u[0] . '" /> svarte i <a href="forum/topic?id=' . $num . $replyid . '">' . htmlspecialchars($u[1]) . '</a> i crewforumet'; break; // emne i crewforumet (arkiv) // emne i crewforumet (arkiv) case "crewforuma_emne": $u = explode(":", $note, 2); $html = true; $melding = '<user id="' . $u[0] . '" /> opprettet <a href="forum/topic?id=' . $num . '">' . htmlspecialchars($u[1]) . '</a> i crewforumet (arkiv).'; break; // svar i crewforumet (arkiv) // svar i crewforumet (arkiv) case "crewforuma_svar": $u = explode(":", $note, 2); $s = explode("#", $u[0]); $u[0] = $s[0]; $replyid = isset($s[1]) ? '&replyid=' . $s[1] : ''; $html = true; $melding = '<user id="' . $u[0] . '" /> svarte i <a href="forum/topic?id=' . $num . $replyid . '">' . htmlspecialchars($u[1]) . '</a> i crewforumet (arkiv).'; break; // emne i idémyldringsforumet // emne i idémyldringsforumet case "crewforumi_emne": $u = explode(":", $note, 2); $html = true; $melding = '<user id="' . $u[0] . '" /> opprettet <a href="forum/topic?id=' . $num . '">' . htmlspecialchars($u[1]) . '</a> i idémyldringsforumet.'; break; // svar i idémyldringsforumet // svar i idémyldringsforumet case "crewforumi_svar": $u = explode(":", $note, 2); $s = explode("#", $u[0]); $u[0] = $s[0]; $replyid = isset($s[1]) ? '&replyid=' . $s[1] : ''; $html = true; $melding = '<user id="' . $u[0] . '" /> svarte i <a href="forum/topic?id=' . $num . $replyid . '">' . htmlspecialchars($u[1]) . '</a> i idémyldringsforumet.'; break; case "bankoverforing": $info = explode(":", $note, 2); $melding = '[user id=' . $num . '] sendte deg [b]' . game::format_cash($info[0]) . '[/b]!' . (!empty($info[1]) ? ' [b]Melding[/b]: ' . $info[1] : ''); break; case "lotto": $info = explode(":", $note); $data = array(); $data[] = 'Du kom på <b>' . $info[0] . '</b>. plass i lotto'; $data[] = 'vant <b>' . game::format_cash($num) . '</b>'; if (isset($info[1])) { $data[] = 'mottok <b>' . game::format_num($info[1]) . '</b> poeng'; } $melding = sentences_list($data) . "!"; $html = true; break; case "informasjon": $html = $num == 1; $melding = $note; break; case "poker": // winner:utfordrer:pott $info = explode(":", $note, 3); $melding = 'Du brukte for lang tid da du utfordret [user id=' . $info[1] . '] i poker for [b]' . game::format_cash($num) . '[/b]. Spillet valgte kort for deg automatisk..'; switch ($info[0]) { case 1: $melding .= ' Motstanderen vant runden.'; break; case 2: $melding .= ' Du vant runden og fikk [b]' . game::format_cash($info[2]) . '[/b].'; break; default: $melding .= ' Det ble uavgjort og du fikk tilbake [b]' . game::format_cash($info[2]) . '[/b].'; } break; // oppdrag // oppdrag case "oppdrag": $html = true; $melding = $note; break; // døde // døde case "dead": // syntax: instant(int:0/1) $html = true; $melding = $note ? "Du ble angrepet og klarte ikke å stå i mot angrepet. Du døde." : "Du døde på grunn av lav energi og lav helse."; break; case "support": // avsluttet? if (mb_substr($note, 0, 2) == "c:") { $info = explode(":", $note, 3); // c:sum_up_id:su_title $html = true; $melding = '<user id="' . $info[1] . '" /> avsluttet din henvendelse «<a href="' . $__server['relative_path'] . '/support/?a=show&su_id=' . $num . '">' . htmlspecialchars($info[2]) . '</a>» hos support.'; break; } // oppdatert $info = explode(":", $note, 2); // sum_up_id:su_title $html = true; $melding = '<user id="' . $info[0] . '" /> oppdaterte din henvendelse «<a href="' . $__server['relative_path'] . '/support/?a=show&su_id=' . $num . '">' . htmlspecialchars($info[1]) . '</a>» hos support.'; break; case "blokkering": // ny blokkering: 1:type:end:reason // blokkering endret: 2:type:end:reason end og reason kan være blank hvis feltet ikke ble endret // blokkering fjernet: 3:type $info = explode(":", $note); $blokkering = isset(blokkeringer::$types[$num]) ? blokkeringer::$types[$num]['userlog'] : '(type ukjent: ' . $num . ')'; switch ($info[0]) { // ny blokkering case 1: $melding = 'Du har blitt blokkert fra å ' . $blokkering . '. Varer til ' . ess::$b->date->get($info[1])->format() . '. Begrunnelse: ' . urldecode($info[2]); break; // blokkering endret // blokkering endret case 2: $melding = 'Blokkeringen for å ' . $blokkering . ' har blitt endret.'; if ($info[1] != "") { $melding .= ' Ny varighet til ' . ess::$b->date->get($info[1])->format() . '.'; } if ($info[2] != "") { $melding .= ' Ny begrunnelse: ' . urldecode($info[2]); } break; // blokkering fjernet // blokkering fjernet case 3: $melding = 'Blokkeringen for å ' . $blokkering . ' har blitt fjernet.'; break; } break; case "advarsel": // type:reason $info = explode(":", $note, 2); $melding = 'Du har fått en advarsel fra Crewet (kategori: ' . urldecode($info[0]) . '). Begrunnelse: ' . urldecode($info[1]); break; case "soknader": // av enkelthetskyld (og praktiske årsaker) blir meldinger lagt til med full tekst fra søknadssystemet // dette kan utvidees ved en senere anledning // syntax: html:Din søknad [..] // syntax: bb:Din søknad [..] $info = explode(":", $note, 2); if ($info[0] == "html") { $html = true; $melding = $info[1]; } elseif ($info[0] == "bb") { $melding = $info[1]; } break; // spiller bløde ihjel etter angrep // spiller bløde ihjel etter angrep case "player_bleed": $html = true; $melding = '<user id="' . $num . '" /> døde av skadene som ble påført i ditt tidligere angrep.'; break; // vitne // vitne case "vitne": // syntax: drept:attack_type:ble_sett:offer_up_id (num = angriper) $info = explode(":", $note); $html = true; $melding = 'Du vitnet <user id="' . $num . '" /> ' . ($info[0] ? 'drepe' : 'skade') . ' <user id="' . $info[3] . '" />.'; // ble vi oppdaget? if ($info[2]) { $melding .= ' Du ble oppdaget av <user id="' . $num . '" />.'; } break; // mistet beskyttelse // mistet beskyttelse case "beskyttelse_lost": // syntax: gammel_beskyttelse_navn:ny_beskyttelse_navn:ny_beskyttelse_state (navn er urlencode-ed) $info = explode(":", $note); $html = true; $melding = 'Du mistet din beskyttelse <b>' . htmlspecialchars(urldecode($info[0])) . '</b>. Du har nå <b>' . htmlspecialchars(urldecode($info[1])) . '</b> som beskyttelse med en status på <b>' . game::format_num($info[2] * 100, 2) . ' %</b>.'; break; // angrepet? // angrepet? case "attacked": // syntax: lost_health:lost_energy:lost_protection:lost_rankpoints:new_health:new_energy:new_protection:new_rankpoints:gammel_bydel:ny_bydel:bank:cash $info = explode(":", $note); $html = true; // vise hvor mye vi mistet $d = array(); $d[] = '<b>' . game::format_num($info[0] * 100, 2) . ' %</b> helse'; $d[] = '<b>' . game::format_num($info[1] * 100, 2) . ' %</b> energi'; if ($info[2]) { $d[] = '<b>' . game::format_num($info[2] * 100, 2) . ' %</b> beskyttelse'; } $d[] = '<b>' . $info[3] . '</b> poeng'; $melding = 'Du ble angrepet av en spiller og mistet ' . sentences_list($d) . '.'; // vis verdiene etter angrepet $d = array(); $d[] = '<b>' . game::format_num($info[4] * 100, 2) . ' %</b> helse'; $d[] = '<b>' . game::format_num($info[5] * 100, 2) . ' %</b> energi'; if ($info[6]) { $d[] = '<b>' . game::format_num($info[6] * 100, 2) . ' %</b> beskyttelse'; } $melding .= ' Du endte opp med ' . sentences_list($d) . '.'; // mistet vi penger? if (!empty($info[10])) { $melding .= ' Angriperen fikk i tillegg med seg <b>' . game::format_cash($info[10]) . '</b> fra hånda di.'; } // ble vi flyttet til en annen bydel? if (!empty($info[8])) { $melding .= ' Du ble flyttet fra bydelen ' . htmlspecialchars(urldecode($info[8])) . ' til <b>' . htmlspecialchars(urldecode($info[9])) . '</b> siden du hadde under ' . game::format_num(player::HEALTH_MOVE_AUTO * 100) . ' % helse.'; } break; // mistet/nedgradert våpen // mistet/nedgradert våpen case "weapon_lost": // syntax 1: weapon_id:weapon_name:bullets (num = 0) // syntax 2: weapon_id:weapon_name:bullets:new_weapon:new_training (num = 1) $info = explode(":", $note); $html = true; if ($num == 1) { $melding = 'Våpentreningen falt under 25 % og ditt våpen <b>' . htmlspecialchars(urldecode($info[1])) . '</b>' . ($info[2] > 0 ? ' med <b>' . $info[2] . '</b> kuler' : '') . ' ble nedgradert til våpnet <b>' . htmlspecialchars(urldecode($info[3])) . '</b> med ' . game::format_num($info[4] * 100) . ' % våpentrening og 0 kuler.'; } else { $melding = 'Våpentreningen falt under 25 % og du mistet våpenet <b>' . htmlspecialchars(urldecode($info[1])) . '</b>' . ($info[2] > 0 ? ' og <b>' . $info[2] . '</b> kuler' : '') . '.'; } break; // kastet ut av bomberom // kastet ut av bomberom case "bomberom_kicked": // syntax: up_id(som utfører handlingen):urlencode(ff_name):up_brom_expire(når vi egentlig skulle gå ut av bomberommet) num=ff_id $info = explode(":", $note); $html = true; $melding = 'Du ble kastet ut fra bomberommet <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $num . '">' . htmlspecialchars(urldecode($info[1])) . '</a>. Du skulle egentlig sittet til ' . ess::$b->date->get($info[2])->format() . '.'; break; // plassert i bomberom // plassert i bomberom case "bomberom_set": // syntax: up_id(som utfører handlingen):urlencode(ff_name):up_brom_expire(hvor lenge vi er inne) num=ff_id $info = explode(":", $note); $html = true; $melding = '<user id="' . $info[0] . '" /> plasserte deg i bomberommet <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $num . '">' . htmlspecialchars(urldecode($info[1])) . '</a> til ' . ess::$b->date->get($info[2])->format() . '.'; break; // fikk penger fra etterlyst for angrep // fikk penger fra etterlyst for angrep case "etterlyst_receive": // syntax: up_id(som ble angrepet):bool(instant?):bool(bare skadet?) $info = explode(":", $note); $html = true; $melding = '<user id="' . $info[0] . '" /> ' . (!empty($info[2]) ? 'ble skadet av ditt angrep' : 'døde etter ditt angrep') . ' og du mottok ' . game::format_cash($num) . ' som' . (!empty($info[2]) ? ' del av det' : '') . ' spilleren var etterlyst for.'; break; // fikk tilbake penger fra etterlyst fordi spiller ble deaktivert // fikk tilbake penger fra etterlyst fordi spiller ble deaktivert case "etterlyst_deactivate": // syntax: up_id(som ble deaktivert) $html = true; $melding = '<user id="' . $note . '" /> ble deaktivert og du fikk tilbake ' . game::format_cash($num) . ' fra etterlyst som du hadde plassert på spilleren.'; break; // lagt til på etterlyst // lagt til på etterlyst case "etterlyst_add": $melding = 'En spiller la til en dusør for deg på ' . game::format_cash($num) . '.'; break; // kuleauksjon avsluttet uten bud // kuleauksjon avsluttet uten bud case "auksjon_kuler_no_bid": // syntax: a_id(auksjonen) num=antall kuler returnert $html = true; $melding = 'Ingen vant <a href="' . ess::$s['relative_path'] . '/auksjoner?a_id=' . $note . '">auksjonen</a> for kuler du la ut for salg og du fikk tilbake ' . $num . ' kuler.'; break; // vinner kuleauksjon // vinner kuleauksjon case "auksjon_kuler_won": // syntax: a_id(auksjonen):amount(beløp man vant med) num=antall kuler $info = explode(":", $note); $html = true; $melding = 'Du vant <a href="' . ess::$s['relative_path'] . '/auksjoner?a_id=' . $info[0] . '">auksjonen</a> for kuler med ditt bud på ' . game::format_cash($info[1]) . ' og mottok ' . $num . ' kuler.'; break; // mistet garasje // mistet garasje case "garage_lost": // syntax: urlencode(bydel) num=antal biler $html = true; $melding = 'Du mistet garasjen din på ' . htmlspecialchars(urldecode($note)) . ($num > 0 ? ' og ' . fwords("den ene bilen", "de %d bilene", $num) . ' som var i garasjen' : '') . '.'; break; // FF-systemet // FF-systemet case "ff_invite": // ff_id:ff_name:stilling:parent $info = explode(":", $note, 4); $html = true; $melding = '<user id="' . $num . '" /> inviterte deg til <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> for posisjonen <b>' . htmlspecialchars(urldecode($info[2])) . '</b>' . (!empty($info[3]) ? ' underordnet <user id="' . $info[3] . '" />' : '') . '.'; break; case "ff_delinvite": // ff_id:ff_name $info = explode(":", $note, 2); $html = true; if ($num) { $melding = '<user id="' . $num . '" /> fjernet din invitasjon til <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a>.'; } else { $melding = 'Din invitasjon til <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> ble fjernet.'; } break; case "ff_member_priority": // num = action_user_id // ff_id:ff_name:priority_old:priority_new:parent_old:parent_new $info = explode(":", $note); $html = true; if ($num) { $melding = '<user id="' . $num . '" /> endret din posisjon i <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> fra ' . htmlspecialchars(urldecode($info[2])) . (!empty($info[4]) ? ' underordnet <user id="' . $info[4] . '" />' : '') . ' til <b>' . htmlspecialchars(urldecode($info[3])) . '</b>' . (!empty($info[5]) ? ' underordnet <user id="' . $info[5] . '" />' : '') . '.'; } else { // anonym $melding = 'Din posisjon i <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> ble endret fra ' . htmlspecialchars(urldecode($info[2])) . (!empty($info[4]) ? ' underordnet <user id="' . $info[4] . '" />' : '') . ' til <b>' . htmlspecialchars(urldecode($info[3])) . '</b>' . (!empty($info[5]) ? ' underordnet <user id="' . $info[5] . '" />' : '') . '.'; } break; case "ff_member_set_priority": // ff_id:ff_name:priority:parent_up_id $info = explode(":", $note); $html = true; $melding = 'Du ble satt som ' . htmlspecialchars(urldecode($info[2])) . (!empty($info[3]) ? ' underordnet <user id="' . $info[3] . '" />' : '') . ' i <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a>.'; break; case "ff_member_parent": // num = action_user_id // ff_id:ff_name:parent_old:parent_new $info = explode(":", $note); $html = true; if ($num) { $melding = '<user id="' . $num . '" /> endret din overordnede i <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> fra <user id="' . $info[2] . '" /> til <user id="' . $info[3] . '" />.'; } else { // anonym $melding = 'Din overordnede i <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> ble endret fra <user id="' . $info[2] . '" /> til <user id="' . $info[3] . '" />.'; } break; case "ff_kick": // ff_id:ff_name:note $info = explode(":", $note, 3); $html = true; $note = empty($info[2]) ? '' : ' Begrunnelse: ' . game::bb_to_html(urldecode($info[2])); $melding = '<user id="' . $num . '" /> kastet deg ut fra <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a>.' . $note; break; case "ff_dead": // refstring,name $info = explode(":", $note, 2); $html = true; $melding = ucfirst($info[0]) . ' <b>' . htmlspecialchars(urldecode($info[1])) . '</b> har blitt oppløst.'; break; case "ff_dead_invited": // refstring,name $info = explode(":", $note, 2); $html = true; $melding = ucfirst($info[0]) . ' <b>' . htmlspecialchars(urldecode($info[1])) . '</b> som du var invitert til har blitt oppløst.'; break; case "ff_diverse": $html = true; $melding = $note; break; case "ff_low_health": // ff_id:ff_name:stilling:parent $info = explode(":", $note, 4); $html = true; $melding = 'Du mistet posisjonen som <b>' . htmlspecialchars(urldecode($info[2])) . '</b>' . (!empty($info[3]) ? ' underordnet <user id="' . $info[3] . '" />' : '') . ' i <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> grunnet for lav helse.'; break; case "ff_takeover": // ff_id:ff_name_org:ff_name_new:ff_type_ref:ff_stilling $info = explode(":", $note, 5); $html = true; $melding = 'Ditt angrep førte til at ' . htmlspecialchars(urldecode($info[3])) . ' ' . htmlspecialchars(urldecode($info[1])) . ' ble stående uten ' . htmlspecialchars(urldecode($info[4])) . '. Du tok derfor over ' . htmlspecialchars(urldecode($info[3])) . ' som fikk navnet <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[2])) . '</a>.'; break; // forumtråd flyttet // forumtråd flyttet case "forum_topic_move": // ft_id, ft_title, fromname, toname, up_id(hvem gjorde det) $info = explode(":", $note); $html = true; $melding = 'Din forumtråd <a href="' . ess::$s['relative_path'] . '/forum/topic?id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> ble flyttet fra ' . htmlspecialchars(urldecode($info[2])) . ' til ' . htmlspecialchars(urldecode($info[3])) . '.'; break; // prestasjon oppnådd // prestasjon oppnådd case "achievement": // count(repetisjonsnummer), ac_name, prize // num: ac_id $info = explode(":", $note); $html = true; $rep = $info[0] > 1 ? ' for ' . $info[0] . '. gang' : ''; $prize = !empty($info[2]) ? ' og mottok ' . $info[2] : ''; $melding = 'Du oppnådde prestasjonen «' . htmlspecialchars(urldecode($info[1])) . "»" . $rep . $prize . '.'; break; // hall of fame // hall of fame case "hall_of_fame": $html = true; $melding = 'Du ble den ' . $note . ' og havnet på <a href="' . ess::$s['rpath'] . '/hall_of_fame">Hall of Fame</a>!'; break; default: $type = "Ukjent ({$type})"; $melding = $note; } $melding = $html ? $melding : game::bb_to_html($melding); return $melding; }
<dd onmouseover="handleClass(\'div.pr1\', \'div.pr2\', null, this)" onmouseout="handleClass(\'div.pr2\', \'div.pr1\', null, this)"> <div class="hide pr1">' . game::timespan($player->data['up_created_time'], game::TIME_ABS | game::TIME_FULL) . '</div> <div class="pr2">' . ess::$b->date->get($player->data['up_created_time'])->format() . '</div> </dd> <dt>Sist aktiv</dt> <dd onmouseover="handleClass(\'div.psa1\', \'div.psa2\', null, this)" onmouseout="handleClass(\'div.psa2\', \'div.psa1\', null, this)"> <div class="hide psa1">' . ess::$b->date->get($player->data['up_last_online'])->format(date::FORMAT_SEC) . '</div> <div class="psa2">' . ($player->data['up_last_online'] ? game::timespan($player->data['up_last_online'], game::TIME_ABS | game::TIME_FULL) : 'Aldri') . '</div> </dd> <dt>Rank</dt> <dd>' . $player->getRank()->getName() . '</dd> <dt>Prestasjonspoeng</dt> <dd>' . game::format_num($player->data['up_achievements_points']) . '</dd>' . ($attacks == 0 ? '' : ' <dt>Utført <b>' . $attacks . '</b> angrep, hvorav ' . fwords("<b>%d</b> spiller", "<b>%d</b> spillere", $player->data['up_attack_killed_num'] + $player->data['up_attack_bleed_num']) . ' har blitt drept og ' . fwords("<b>%d</b> spiller", "<b>%d</b> spillere", $player->data['up_attack_damaged_num'] - $player->data['up_attack_bleed_num']) . ' har blitt skadet.</dt>') . ' </dl> </div> <div id="profileinfo_right"> <dl class="dd_right"> <dt>Pengenivå</dt> <dd><a href="' . ess::$s['rpath'] . '/node/27">' . game::cash_name($player->data['up_cash'] + $player->data['up_bank']) . '</a></dd> <dt>Pengerank</dt> <dd><a href="' . ess::$s['rpath'] . '/node/27">' . $pengerank . '</a></dd> <dd> </dd> <dt>Wanted nivå</dt>
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; }
/** * Rankplassering siden kl 21 */ protected static function page_rank_pos() { // finn vår plassering for ranking siden forrige rankperiode startet $d = ess::$b->date->get(); if ($d->format("H") < 21) { $d->modify("-1 day"); } $d->setTime(21, 0, 0); $date_from = $d->format("U"); $d->modify("+1 day"); $date_to = $d->format("U"); // hent statistikk $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT up_id, up_name, up_access_level, sum_uhi_points, up_points, up_last_online, up_profile_image_url, upr_rank_pos\n\t\t\tFROM\n\t\t\t\t(\n\t\t\t\t\tSELECT uhi_up_id, SUM(uhi_points) sum_uhi_points\n\t\t\t\t\tFROM users_hits\n\t\t\t\t\t\tJOIN users_players ON up_id = uhi_up_id AND (up_access_level != 0 OR up_deactivated_time < {$date_to}) AND up_access_level < " . ess::$g['access_noplay'] . "\n\t\t\t\t\tWHERE uhi_secs_hour >= {$date_from} AND uhi_secs_hour < {$date_to}\n\t\t\t\t\tGROUP BY uhi_up_id\n\t\t\t\t\tHAVING sum_uhi_points > 0\n\t\t\t\t\tORDER BY sum_uhi_points DESC\n\t\t\t\t\tLIMIT 5\n\t\t\t\t) ref,\n\t\t\t\tusers_players\n\t\t\t\tLEFT JOIN users_players_rank ON upr_up_id = up_id\n\t\t\tWHERE uhi_up_id = up_id"); $players = array(); $up_list = array(); $in_list = false; $pos = null; while ($row = $result->fetch()) { $players[] = $row; $up_list[] = $row['up_id']; if ($row['up_id'] == page_min_side::$active_player->id) { $in_list = true; } } // er vi ikke i lista? if (!$in_list) { // hvor mange poeng har vi fått? $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT SUM(uhi_points) sum_uhi_points\n\t\t\t\tFROM users_hits\n\t\t\t\tWHERE uhi_up_id = " . page_min_side::$active_player->id . " AND uhi_secs_hour >= {$date_from} AND uhi_secs_hour < {$date_to}"); $points = $result->fetchColumn(0); if ($points > 0) { // finn plasseringen vår $result = \Kofradia\DB::get()->query("\n\t\t\t\t\tSELECT COUNT(uhi_up_id) FROM (\n\t\t\t\t\t\tSELECT uhi_up_id, SUM(uhi_points) sum_uhi_points\n\t\t\t\t\t\tFROM users_hits\n\t\t\t\t\t\t\tJOIN users_players ON up_id = uhi_up_id AND (up_access_level != 0 OR up_deactivated_time < {$date_to}) AND up_access_level < " . ess::$g['access_noplay'] . "\n\t\t\t\t\t\tWHERE uhi_secs_hour >= {$date_from} AND uhi_secs_hour < {$date_to}\n\t\t\t\t\t\tGROUP BY uhi_up_id\n\t\t\t\t\t\tHAVING sum_uhi_points > {$points}\n\t\t\t\t\t) ref"); $pos = $result->fetchColumn(0) + 1; } } echo ' <div class="bg1_c"> <h1 class="bg1">Rankplassering siste periode<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p>Statistikk gjelder fra kl 21.</p>'; if (count($players) == 0) { echo ' <p>Ingen har ranket i denne perioden.</p>'; } else { echo ' <ol>'; foreach ($players as $row) { $me = $row['up_id'] == page_min_side::$active_player->id ? " (meg)" : ""; echo ' <li>' . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . $me . '</li>'; } echo ' </ol>'; if (!$in_list && !$pos) { echo ' <p>Du har ikke ranket i perioden og har ingen plassering.</p>'; } elseif ($pos) { echo ' <p>Din plassering: ' . game::format_num($pos) . '</p>'; } } echo ' </div> </div>'; }
protected static function get_status_bars() { if (self::$locked) { return; } $bars = array(); // helse $health = login::$user->player->get_health_percent(); $bars[] = array('Helse', ($health == 100 ? '100' : game::format_num($health, 2)) . ' %', ess::$s['relative_path'] . '/min_side', $health < 20 ? 'levelcrit' : ($health < 50 ? 'levelwarn' : ''), 'upst_health', $health); // energi $energy = login::$user->player->get_energy_percent(); $bars[] = array('Energi', ($energy == 100 ? '100' : game::format_num($energy, 2)) . ' %', ess::$s['relative_path'] . '/min_side', $energy < 20 ? 'levelcrit' : ($energy < 50 ? 'levelwarn' : ''), 'upst_energy', $energy); // beskyttelse $protection = login::$user->player->get_protection_percent(); $bars[] = array('Beskyttelse', $protection === false ? 'Ingen' : ($protection == 100 ? '100' : game::format_num($protection, 2)) . ' %', ess::$s['relative_path'] . '/min_side', $protection !== false ? $protection < 20 ? 'levelcrit' : ($protection < 50 ? 'levelwarn' : '') : '', 'upst_protection', $protection); if (!login::$user->params->get("hide_progressbar_left")) { $rank_prosent = login::$user->player->rank['need_points'] == 0 ? login::$user->player->data['up_points'] / login::$user->player->rank['points'] * 100 : (login::$user->player->data['up_points'] - login::$user->player->rank['points']) / login::$user->player->rank['need_points'] * 100; $wl = login::$user->player->data['up_wanted_level'] / 10; // rank $bars[] = array('Poeng', game::format_num(login::$user->player->data['up_points']), ess::$s['relative_path'] . '/min_side', '', 'upst_rank', $rank_prosent); // wanted nivå $bars[] = array('Wanted nivå', ($wl == 0 ? '0' : game::format_num($wl, 1)) . ' %', ess::$s['relative_path'] . '/min_side', $wl > 80 ? 'levelwarn' : '', 'upst_wanted', $wl, 'Wanted nivå'); } $data = ' <div id="default_status">'; $c = count($bars); $max = 100 - $c * 2 + 2; $width = floor($max / $c); $width_extra = $max - $width * $c; $i = 0; foreach ($bars as $bar) { /* * 0 => tekst * 1 => verdi * 2 => link * 3 => class * 4 => id * 5 => prosent 0-100 * 6 => title-attr */ // legge til ekstra bredde hvis det totalt sett ikke blir 100 % $w = $width; if ($width_extra-- > 0) { $w++; } $data .= ' <a href="' . $bar[2] . '" class="def_up_st' . ($bar[3] ? ' ' . $bar[3] : '') . (++$i == $c ? ' last' : '') . '" id="' . $bar[4] . '" style="width: ' . $w . '%"> <span class="def_upst_t">' . $bar[0] . '</span> <span class="def_upst_v">' . $bar[1] . '</span> <span class="def_upst_pw r4"> <span class="def_upst_p r4" style="width: ' . min(100, round($bar[5])) . '%"></span> </span> </a>'; } return $data . ' </div>'; /* <a href="'.ess::$s['relative_path'].'/min_side" class="def_up_st progressbar'.($health < 20 ? ' levelcrit' : ($health < 50 ? ' levelwarn' : '')).'" id="upst_health"> <span class="progress" style="width: '.min(100, round($health)).'%"><span>Helse: '.($health == 100 ? '100' : game::format_num($health, 2)).' %</span></span> </a> <a href="'.ess::$s['relative_path'].'/min_side" class="def_up_st progressbar def_up_st2'.($energy < 20 ? ' levelcrit' : ($energy < 50 ? ' levelwarn' : '')).'" id="upst_energy"> <span class="progress" style="width: '.min(100, round($energy)).'%"><span>Energi: '.($energy == 100 ? '100' : game::format_num($energy, 2)).' %</span></span> </a> <a href="'.ess::$s['relative_path'].'/min_side" class="def_up_st progressbar def_up_st3'.($protection !== false ? ($protection < 20 ? ' levelcrit' : ($protection < 50 ? ' levelwarn' : '')) : '').'" id="upst_protection"> <span class="progress" style="width: '.min(100, round($protection)).'%"><span>Beskyttelse: '.($protection === false ? 'Ingen' : ($protection == 100 ? '100' : game::format_num($protection, 2)) . " %").'</span></span> </a>'; if (!login::$user->params->get("hide_progressbar_left")) { $wl = login::$user->player->data['up_wanted_level']/10; // rankinfo $rank_prosent = login::$user->player->rank['need_points'] == 0 ? login::$user->player->data['up_points'] / login::$user->player->rank['points'] * 100 : (login::$user->player->data['up_points']-login::$user->player->rank['points']) / login::$user->player->rank['need_points'] * 100; echo ' <a href="'.ess::$s['relative_path'].'/min_side" class="def_up_st progressbar def_up_st4" id="upst_rank"> <span class="progress" style="width: '.min(100, round($rank_prosent)).'%"> <span>Poeng: '.game::format_num(login::$user->player->data['up_points']).'</span> </span> </a> <a href="'.ess::$s['relative_path'].'/min_side" class="def_up_st progressbar def_up_st5'.($wl > 80 ? ' levelwarn' : '').'" id="upst_wanted"> <span class="progress" style="width: '.round(min(100, $wl)).'%"> <span title="Wanted nivå">Wanted: '.($wl == 0 ? '0' : game::format_num($wl, 1)).' %</span> </span> </a>'; } }*/ }
/** * 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>'; }
/** * Vis alle drapsforsøk for en spesifikk spiller * @param player $up * @param bool $offer skal vi vise angrep mot spilleren? */ protected function show_tries(player $up = null, $offer = null) { $alle = !$up; $egen = $up && $up->id == $this->up->id; if ($alle) { ess::$b->page->add_title("Alle drapsforsøk"); } elseif (!$egen) { ess::$b->page->add_title("Drapsforsøk " . ($offer ? 'mot' : 'for') . " '{$up->data['up_name']}'"); } else { ess::$b->page->add_title("Mine drapsforsøk"); } echo ' <div class="bg1_c ' . ($alle ? 'large' : 'medium') . '"> <h1 class="bg1"> ' . ($alle ? 'Alle drapsforsøk' : 'Drapsforsøk') . ' <span class="left2"></span><span class="right2"></span> </h1> <p class="h_left"><a href="drap">« Tilbake</a></p> <div class="bg1"> <p class="c">Dette er en oversikt som viser ' . ($alle ? 'alle drapsforsøk som er utført' : 'drapsforsøk ' . ($egen ? 'du har utført' : ($offer ? 'rettet mot spilleren ' . $up->profile_link() : 'spilleren ' . $up->profile_link() . ' har utført'))) . '.</p>'; $pagei = new pagei(pagei::PER_PAGE, 20, pagei::ACTIVE_GET, "side"); $result = $pagei->query("\n\t\t\tSELECT df_attack_up_id, df_defend_up_id, df_time, df_b_id, df_outcome, df_rankpoints, df_type, df_cash, df_hitlist, df_vitner, df_attack_ff_list, df_defend_ff_list\n\t\t\tFROM drapforsok\n\t\t\tWHERE " . ($alle ? "" : ($offer ? "df_defend_up_id" : "df_attack_up_id") . " = {$up->id} AND ") . "(df_type != 1 OR df_outcome != 0)\n\t\t\tORDER BY df_time DESC"); if ($pagei->total == 0) { if ($alle) { echo ' <p class="c"><b>Det er ingen som har prøvd å drepe noen enda.</b></p>'; } elseif ($offer) { echo ' <p class="c"><b>Ingen har angrepet ' . $up->profile_link() . ' enda.</b></p>'; } else { echo ' <p class="c"><b>' . ($egen ? 'Du' : $up->profile_link()) . ' har ikke prøvd å drepe noen enda.</b></p>'; } } else { $ff_only_familier = isset($_GET['familier']); if ($ff_only_familier) { echo ' <p class="c"><a href="' . game::address("drap", $_GET, array("familier")) . '">Vis også firmaer</a></p>'; } else { echo ' <p class="c"><a href="' . game::address("drap", $_GET, array(), array("familier" => true)) . '">Vis kun broderskap i listen</a></p>'; } echo ' <table class="table center' . ($pagei->pages == 1 ? ' tablemb' : '') . '"> <thead> <tr>' . ($alle || $offer ? ' <th>Angriper</th>' : '') . (!$offer ? ' <th>Offer</th>' : '') . ' <th>Tid/sted</th> <th>Omfang</th> <th>Poeng</th> <th>Penger / Etterlyst</th> <th>Vitner</th> </tr> </thead> <tbody>'; ess::$b->page->add_css('.df_ff_list a { font-size: 10px; color: #777; text-decoration: none } .df_ff_list a:hover { text-decoration: underline }'); $i = 0; while ($row = $result->fetch()) { // sett opp vitner $vitner = $row['df_time'] > 1278604000 ? '<span class="dark">Ingen</span>' : '<span class="dark">Ukjent</span>'; if ($row['df_vitner']) { $v = unserialize($row['df_vitner']); $synlige = array(); $ukjente = 0; foreach ($v as $r) { if ($r[1] || access::has("mod")) { $synlige[] = '<user id="' . $r[0] . '" />' . (!$r[1] ? ' <span title="Ble ikke oppdaget">(u)</span>' : ''); } else { $ukjente++; } } $vitner = implode("<br />", $synlige); if ($ukjente > 0) { if (count($synlige) > 0) { $vitner .= '<br />'; } $vitner .= fwords("%d ukjent", "%d ukjente", $ukjente); } } if ($alle || $offer) { // sett opp familier/firmaer (for angriper) $ff_attack = ''; if ($row['df_attack_ff_list']) { $v = unserialize($row['df_attack_ff_list']); $ff_list = array(); // $ff[] = array($ffm->ff->data['ff_type'], $ffm->ff->id, $ffm->ff->type['refobj'], $ffm->ff->data['ff_name'], $ffm->data['ffm_priority'], $ffm->get_priority_name()); foreach ($v as $r) { if ($ff_only_familier && $r[0] != 1) { continue; } $ff_list[] = '<a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $r[1] . '" title="' . htmlspecialchars(ucfirst($r[5])) . '">' . htmlspecialchars($r[3]) . '</a>'; } $ff_attack = '<br /><span class="df_ff_list">' . implode("<br />", $ff_list) . '</span>'; } } // sett opp familier/firmaer $ff = ''; if ($row['df_defend_ff_list']) { $v = unserialize($row['df_defend_ff_list']); $ff_list = array(); // $ff[] = array($ffm->ff->data['ff_type'], $ffm->ff->id, $ffm->ff->type['refobj'], $ffm->ff->data['ff_name'], $ffm->data['ffm_priority'], $ffm->get_priority_name()); foreach ($v as $r) { if ($ff_only_familier && $r[0] != 1) { continue; } $ff_list[] = '<a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $r[1] . '" title="' . htmlspecialchars(ucfirst($r[5])) . '">' . htmlspecialchars($r[3]) . '</a>'; } $ff = '<br /><span class="df_ff_list">' . implode("<br />", $ff_list) . '</span>'; } // sett opp bydel $bydel = "Ukjent bydel"; if (!empty($row['df_b_id']) && isset(game::$bydeler[$row['df_b_id']])) { $bydel = htmlspecialchars(game::$bydeler[$row['df_b_id']]['name']); } echo ' <tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '>' . ($alle || $offer ? ' <td><user id="' . $row['df_attack_up_id'] . '" />' . $ff_attack . '</td>' : '') . (!$offer ? ' <td><user id="' . $row['df_defend_up_id'] . '" />' . $ff . '</td>' : '') . ' <td>' . ess::$b->date->get($row['df_time'])->format() . '<br />' . $bydel . '</td> <td>' . ($row['df_outcome'] == 1 ? '<b style="color: #FF0000">Døde</b>' : 'Ble skadet') . '<br /> <span class="dark">' . ($row['df_type'] == 1 ? 'Utpressing' : 'Drapsforsøk') . '</span></td> <td class="r">' . game::format_num($row['df_rankpoints']) . '</td> <td class="r">' . game::format_cash($row['df_cash']) . ($row['df_hitlist'] > 0 ? '<br />' . game::format_cash($row['df_hitlist']) : '') . '</td> <td>' . $vitner . '</td> </tr>'; } echo ' </tbody> </table>'; if ($pagei->pages > 1) { echo ' <p class="c">' . $pagei->pagenumbers() . '</p>'; } } echo ' </div> </div>'; }