/** * Hent beste ranker siste 24 timer */ public static function getBestRankers($limit = null) { $limit = (int) ($limit ?: 1); // tidsperiode $d = \ess::$b->date->get(); $a = $d->format("H") < 21 ? 2 : 1; $d->modify("-{$a} day"); $d->setTime(21, 0, 0); $date_from = $d->format("U"); $d->modify("+1 day"); $date_to = $d->format("U"); // hent spiller $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\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 {$limit}\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"); if ($result->rowCount() == 0) { return array(); } $players = array(); $up_id = array(); while ($row = $result->fetch()) { $row['ff_links'] = array(); $players[$row['up_id']] = $row; $up_id[] = $row['up_id']; } // hent familier hvor spilleren er medlem $ff = \ff::get_ff_list($up_id, \ff::TYPE_FAMILIE); foreach ($ff as $row) { $players[$row['ffm_up_id']]['ff'][] = $row; $players[$row['ffm_up_id']]['ff_links'][] = $row['link']; } return $players; }
/** * Last inn siden */ public function load_page() { if ($this->ff) { $this->ff->load_page(); } \ess::$b->page->load(); }
/** * Ta ut kuler */ protected function bullets_out() { if (!login::$user->player->weapon) { redirect::handle(); } $num = (int) postval("bullets_out", 0); if ($num <= 0) { redirect::handle(); } // på vegne av en spiller? $up = login::$user->player; $real_up = null; if ($this->ff->uinfo->data['ffm_priority'] != 4 && !empty($_POST['bullets_up'])) { // har vi ikke ansvar for denne spilleren? $id = postval("bullets_up"); if (!isset($this->ff->members['members'][$id]) || $this->ff->uinfo->data['ffm_priority'] == 3 && $this->ff->members['members'][$id]->data['ffm_parent_up_id'] != login::$user->player->id || $this->ff->uinfo->data['ffm_priority'] < 3 && $this->ff->members['members'][$id]->data['ffm_priority'] != 4) { ess::$b->page->add_message("Ugyldig spillervalg.", "error"); redirect::handle(); } $real_up = $up; $up = player::get($id); // har ikke våpen? if (!$up->weapon) { ess::$b->page->add_message('Spilleren <user id="' . $up->id . '" /> har ikke noe våpen og har derfor ikke plass til noen kuler.', "error"); redirect::handle(); } } $ret = $this->ff->bullets_out($num, $up, $real_up); switch ($ret) { case "missing": ess::$b->page->add_message("Det er ikke så mange kuler i broderskapet.", "error"); break; case "full": if ($real_up) { $f = max(0, $up->weapon->data['bullets'] - $up->data['up_weapon_bullets'] - $up->data['up_weapon_bullets_auksjon']); ess::$b->page->add_message('<user id="' . $up->id . '" /> har ' . ($f == 0 ? 'ikke plass til flere kuler' : 'bare plass til ' . fwords("%d kule til", "%d kuler til", $f)) . '.', "error"); } else { ess::$b->page->add_message("Du har ikke plass til så mange kuler.", "error"); } break; default: if ($real_up) { ess::$b->page->add_message("Du gav " . fwords("%d kule", "%d kuler", $num) . ' til <user id="' . $up->id . '" /> fra kulelageret til broderskapet.'); } else { ess::$b->page->add_message("Du tok ut " . fwords("%d kule", "%d kuler", $num) . " fra kulelageret til broderskapet."); } redirect::handle(); } }
/** * Vise publiserte utgivelser */ protected function published() { ess::$b->page->add_title("Utgivelser"); // hent publiserte utvivelser $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 10); $ffnp_q = login::$logged_in ? "ffnp_ffn_id = ffn_id AND ffnp_up_id = " . login::$user->player->id : "FALSE"; $result = $pagei->query("SELECT ffn_id, ffn_published_time, ffn_cost, ffn_title, ffn_sold, ffn_description, ffnp_time FROM ff_newspapers LEFT JOIN ff_newspapers_payments ON {$ffnp_q} WHERE ffn_ff_id = {$this->ff->id} AND ffn_published != 0 ORDER BY ffn_published_time DESC"); echo ' <p class="c">Utgivelser</p>'; // ingen publiserte utgivelser? if ($result->rowCount() == 0) { echo ' <p class="c">Ingen utgivelser er publisert.</p>'; } else { echo ' <p class="c">' . $pagei->total . ' utgivelse' . ($pagei->total == 1 ? '' : 'r') . ' er publisert:</p>'; #$i = $pagei->total - ($pagei->per_page*($pagei->active-1)); while ($row = $result->fetch()) { echo ' <div class="section center w200"> <h2><a href="avis?ff_id=' . $this->ff->id . '&ffn=' . $row['ffn_id'] . '">' . htmlspecialchars($row['ffn_title']) . '</a></h2> <dl class="dd_right"> <dt>Publisert</dt> <dd>' . ess::$b->date->get($row['ffn_published_time'])->format() . '</dd> <dt>Solgte utgivelser</dt> <dd>' . game::format_number($row['ffn_sold']) . '</dd> <dt>Pris</dt> <dd>' . game::format_cash($row['ffn_cost']) . '</dd> <dt>Kjøpt?</dt> <dd>' . ($row['ffnp_time'] ? '<a href="avis?ff_id=' . $this->ff->id . '&ffn=' . $row['ffn_id'] . '">Ja</a> (' . ess::$b->date->get($row['ffnp_time'])->format() . ')' : 'Nei [<a href="avis?ff_id=' . $this->ff->id . '&ffn=' . $row['ffn_id'] . '">Kjøp</a>]') . (access::is_nostat() ? ' (nostat)' : '') . '</dd> </dl> <div class="p">' . $this->ff->format_description($row['ffn_description']) . '</div> </div>'; #$i--; } // flere sider? if ($pagei->pages > 1) { echo ' <p class="c">Navigasjon: ' . $pagei->pagenumbers() . '</p>'; } } }
/** * Kaste ut en spiller */ protected function kick_handle() { // valider sid validate_sid(); // kan vi ikke kaste ut noen spillere nå? if (login::$user->player->fengsel_check() || login::$user->player->bomberom_check() || login::$user->player->data['up_b_id'] != $this->ff->data['br_b_id'] || !$this->kick_hour_ok) { redirect::handle(); } // mangler spillervalg? if (!isset($_POST['player'])) { ess::$b->page->add_message("Du må velge en spiller du vil kaste ut.", "error"); redirect::handle(); } // er ikke spilleren i bomberommet? $up_id = (int) $_POST['player']; $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT u_email, up_id, up_name, up_access_level, up_brom_expire\n\t\t\tFROM users_players JOIN users ON up_u_id = u_id\n\t\t\tWHERE up_id = {$up_id} AND up_brom_ff_id = {$this->ff->id} AND up_brom_expire > " . time() . " AND up_access_level != 0"); $cost = $this->fam ? self::KICK_PLAYER_COST_FAMILIE : self::KICK_PLAYER_COST; $up = $result->fetch(); if (!$up) { ess::$b->page->add_message("Fant ikke spilleren.", "error"); redirect::handle(); } // sett opp skjema $form = \Kofradia\Form::getByDomain("other", login::$user); // har vi bekreftet ønsket om å kaste ut en spiller? if (isset($_POST['confirm']) && $form->validateHashOrAlert(null, "Kast ut spiller fra bomberom")) { \Kofradia\DB::get()->beginTransaction(); // forsøk å trekk fra pengene if (!$this->ff->bank(ff::BANK_BETALING, $cost, "Kaste ut spilleren [user id={$up['up_id']}] fra bomberommet")) { ess::$b->page->add_message("Det er ikke nok penger i " . ($this->fam ? "broderskapbanken" : "firmabanken") . ".", "error"); \Kofradia\DB::get()->commit(); } else { // finn en tilfeldig bydel å plassere spilleren $result = \Kofradia\DB::get()->query("SELECT id, name FROM bydeler WHERE active != 0 ORDER BY RAND() LIMIT 1"); $b_id = $result->fetchColumn(0); // forsøk å trekk ut spilleren fra bomberommet $a = \Kofradia\DB::get()->exec("\n\t\t\t\t\tUPDATE users_players\n\t\t\t\t\tSET up_brom_expire = 0, up_b_id = {$b_id}\n\t\t\t\t\tWHERE up_id = {$up['up_id']} AND up_brom_ff_id = {$this->ff->id} AND up_brom_expire = {$up['up_brom_expire']} AND up_access_level != 0"); // feilet? if ($a == 0) { // avbryt transaksjon \Kofradia\DB::get()->rollback(); ess::$b->page->add_message("Kunne ikke kaste ut spilleren fra bomberommet.", "error"); } else { // legg til hendelse hos spilleren player::add_log_static("bomberom_kicked", login::$user->player->id . ":" . urlencode($this->ff->data['ff_name']) . ":{$up['up_brom_expire']}", $this->ff->id, $up['up_id']); // send e-post til spilleren $email = new email(); $email->text = 'Hei, Din spiller ble kastet ut fra bomberommet av ' . ($this->fam ? 'broderskapet' : 'firmaet') . ' som styrer bomberommet. -- www.kofradia.no'; $email->send($up['u_email'], "Kastet ut av bomberom"); // firmalogg $this->ff->add_log("bomberom_kick", login::$user->player->id . ":{$up['up_id']}:{$up['up_brom_expire']}"); // logg putlog("DF", "BOMBEROM: {$up['up_name']} ble kastet ut av bomberommet {$this->ff->data['ff_name']} av " . login::$user->player->data['up_name'] . " " . ess::$s['spath'] . "/min_side?up_id={$up['up_id']}"); ess::$b->page->add_message('Du kastet ut <user id="' . $up['up_id'] . '" /> fra bomberommet. ' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' betalte et gebyr på ' . game::format_cash($cost) . '.'); \Kofradia\DB::get()->commit(); redirect::handle(); } } } ess::$b->page->add_title("Kaste ut spiller"); // vis informasjon echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Kaste ut spiller fra bomberommet<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p>Du er i ferd med å kaste ut ' . game::profile_link($up['up_id'], $up['up_name'], $up['up_access_level']) . ' fra bomberommet.</p> <p>Spilleren skal i utgangspunktet sitte i bomberommet til ' . ess::$b->date->get($up['up_brom_expire'])->format(date::FORMAT_SEC) . ' (' . game::counter($up['up_brom_expire'] - time()) . ' gjenstår).</p> <p>For å kaste ut spilleren må det betales en avgift på <b>' . game::format_cash($cost) . '</b> som betales fra ' . ($this->fam ? 'broderskapkontoen' : 'firmakontoen') . '.</p>'; // har vi ikke nok penger i firmakontoen? if ($this->ff->data['ff_bank'] < $cost) { echo ' <p>' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' har for øyeblikket kun ' . game::format_cash($this->ff->data['ff_bank']) . ' på konto, noe som ikke er nok. ' . ($this->ff->access(1) ? '<a href="' . ess::$s['relative_path'] . '/ff/banken?ff_id=' . $this->ff->id . '">Sett inn penger på ' . ($this->fam ? 'broderskapkontoen' : 'firmakontoen') . '</a>' : '<a href="' . ess::$s['relative_path'] . '/ff/panel?ff_id=' . $this->ff->id . '">Donér til ' . ($this->fam ? 'broderskapet' : 'firmaet') . '</a>') . ' først for å kunne kaste ut spilleren.</p> <p class="c"><a href="bomberom?ff_id=' . $this->ff->id . '">Tilbake</a></p>'; } else { echo ' <p>' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' har for øyeblikket ' . game::format_cash($this->ff->data['ff_bank']) . ' på konto.</p> <form action="" method="post"> ' . $form->getHTMLInput() . ' <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <input type="hidden" name="player" value="' . $up['up_id'] . '" /> <input type="hidden" name="kick" /> <p class="c">' . show_sbutton("Bekreft, kast ut spilleren", 'name="confirm"') . ' <a href="bomberom?ff_id=' . $this->ff->id . '">Avbryt</a></p> </form>'; } echo ' </div> </div>'; $this->ff->load_page(); }
/** * Spiller dør av lite helse/deaktiverer seg selv */ public function bleed_handle() { $expire = time() - 3600 * 4; $by_up = null; // er dødsfallet innenfor tidspunktet hvor noen kan få kreditt for det? if ($this->data['up_attacked_time'] >= $expire) { // har vi en spiller som vi skal gi kreditt? if ($this->data['up_attacked_up_id']) { $by_up = player::get($this->data['up_attacked_up_id']); if ($by_up) { // gi kreditt \Kofradia\DB::get()->exec("UPDATE users_players SET up_attack_bleed_num = up_attack_bleed_num + 1 WHERE up_id = {$by_up->id}"); // gi beskjed til spilleren om at denne spillerne blødde ihjel $by_up->add_log("player_bleed", NULL, $this->id); } } // har vi noen FF som skal få kreditt? if ($this->data['up_attacked_ff_id_list']) { ff::attack_update(false, "bleed", array_map("intval", explode(",", $this->data['up_attacked_ff_id_list']))); } } // oppdater ff spilleren er med i $this->attacked_ff_update("bleed"); return $by_up; }
/** * Fjern salg av FF hvis brukeren er involvert i det */ public function sell_remove() { $sell_status = $this->ff->sell_status(); if ($sell_status) { if ($sell_status['up_id'] == $this->id) { // avslå salg $this->ff->sell_reject(); } elseif ($sell_status['init_up_id'] == $this->id) { // trekk tilbake salg $this->ff->sell_abort(); } } }
/** * Vis logg */ protected function show() { $ff_reset = $this->ff->data['ff_time_reset'] && !$this->ff->mod ? " AND ffl_time > {$this->ff->data['ff_time_reset']}" : ""; // finn ut hva som er tilgjengelig $result = \Kofradia\DB::get()->query("SELECT DISTINCT ffl_type FROM ff_log WHERE ffl_ff_id = {$this->ff->id}{$ff_reset}"); $in_use = array(); while ($row = $result->fetch()) { $in_use[] = $row['ffl_type']; } $tilgjengelig = array(); foreach (ff::$log_id as $id => $name) { if (in_array($id, $in_use)) { $tilgjengelig[] = $id; } } $i_bruk = $tilgjengelig; // filter $filter = array(); $matches = false; foreach ($_GET as $name => $val) { if (preg_match("/^f([0-9]+)\$/Du", $name, $matches) && in_array($matches[1], $tilgjengelig)) { $filter[] = $matches[1]; } } if (count($filter) == 0) { $filter = false; } else { $i_bruk = $filter; $filter = true; ess::$b->page->add_message("Du har aktivert et filter og viser kun bestemte enheter."); } if ($filter) { ess::$b->page->add_css('.filter_inactive { display: none }'); } else { ess::$b->page->add_css('.filter_active { display: none }'); } if (count($tilgjengelig) > 0) { echo ' <form action="" method="get"> <input type="hidden" name="ff_id" value="' . $this->ff->id . '" /> <div class="section" style="width: 400px" id="filteroptions"> <h2>Filter</h2> <p class="h_right"> <span class="logg_filters filter_active"><a href="#" class="box_handle_toggle" rel="f[]">Merk alle</a> <a href="javascript:void(0)" onclick="toggle_display(\'.logg_filters\', event)">Skjul filteralternativer</a></span> <span class="logg_filters filter_inactive"><a href="#" onclick="toggle_display(\'.logg_filters\', event)">Vis filteralternativer</a></span> </p> <div class="logg_filters filter_active"> <table class="table center tablemt" width="100%"> <tbody>'; $tbody = new tbody(min(3, count($tilgjengelig))); // 3 kolonner foreach ($tilgjengelig as $id) { $title = ff::$log[ff::$log_id[$id]][1]; $aktivt = in_array($id, $i_bruk) && $filter; $tbody->append('<input type="checkbox" name="f' . $id . '" rel="f[]" value=""' . ($aktivt ? ' checked="checked"' : '') . ' />' . htmlspecialchars($title), 'class="box_handle"'); } $tbody->clean(); echo ' </tbody> </table> <p class="c">' . show_sbutton("Oppdater") . '</p> </div> </div> </form>'; } $where = $ff_reset; if ($filter) { $where .= ' AND ffl_type IN (' . implode(",", $i_bruk) . ')'; } // sideinformasjon - hent radene på denne siden $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 30); $result = $pagei->query("SELECT SQL_CALC_FOUND_ROWS ffl_id, ffl_time, ffl_type, ffl_data, ffl_extra FROM ff_log WHERE ffl_ff_id = {$this->ff->id}{$where} ORDER BY ffl_time DESC, ffl_id DESC"); if ($result->rowCount() == 0) { echo ' <p class="c"> Ingen logg meldinger ble funnet. </p>'; } else { // css ess::$b->page->add_css(' .ffl_time { color: #AAA; }'); // logg meldingene $logs = array(); while ($row = $result->fetch()) { $day = ess::$b->date->get($row['ffl_time'])->format(date::FORMAT_NOTIME); $data = $this->ff->format_log($row['ffl_id'], $row['ffl_time'], $row['ffl_type'], $row['ffl_data'], $row['ffl_extra']); $logs[$day][] = '<span class="ffl_time">' . ess::$b->date->get($row['ffl_time'])->format("H:i") . ':</span> ' . $data; } foreach ($logs as $day => $items) { echo ' <div class="section" style="width: 400px"> <h2>' . $day . '</h2>'; foreach ($items as $item) { echo ' <p>' . $item . '</p>'; } echo ' </div>'; } echo ' <p class="c"> Viser ' . $pagei->count_page . ' av ' . $pagei->total . ' logg melding' . ($pagei->total == 1 ? '' : 'er'); if ($pagei->pages > 1) { echo '<br /> ' . $pagei->pagenumbers(game::address("logg", $_GET, array("side")) . "#logg", game::address("logg", $_GET, array("side"), array("side" => "_pageid_")) . "#logg"); } echo ' </p>'; } }
/** * Vis banken */ protected function show() { echo ' <h1 class="c">Banken</h1> <div class="section" style="width: 250px"> <h2>Bankinformasjon</h2> <dl class="dd_right"> <dt>Balanse</dt> <dd>' . game::format_cash($this->ff->data['ff_bank']) . '</dd> </dl>'; // tilgang til medeier if ($this->ff->access(1)) { echo ' <form action="" method="post"> <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />'; if ($this->priority_write == 1) { echo ' <p>' . ucfirst($this->ff->type['priority'][2]) . ' har ikke tilgang til å sette inn/ta ut penger fra denne banken.</p> <p class="c">' . show_sbutton("Gi tilgang til {$this->ff->type['priority'][2]}", 'name="pri2_wt"') . '</p>'; } else { echo ' <p>' . ucfirst($this->ff->type['priority'][2]) . ' <b>har</b> tilgang til å sette inn/ta ut penger fra denne banken.</p> <p class="c">' . show_sbutton("Fjern tilgang til {$this->ff->type['priority'][2]}", 'name="pri2_wf"') . '</p>'; } echo ' </form>'; } echo ' <p class="c"><a href="banken?ff_id=' . $this->ff->id . '&stats">Vis statistikk over pengeflyt i ' . $this->ff->type['refobj'] . ' »</a></p> </div>'; // kun boss kan ta ut og sette inn penger if ($this->ff->access($this->priority_write) && !$this->nostat) { echo ' <div style="margin: 0 auto; width: 420px"> <!-- sett inn penger --> <div style="width: 205px; float: left; margin-right: 10px"> <div class="section"> <form action="" method="post"> <h2>Sett inn penger</h2> <dl class="dd_right dl_2x"> <dt>Beløp</dt> <dd><input type="text" name="bank_inn" class="styled w90" value="0" style="margin-right: 3px" />' . show_button("Alt", 'onclick="this.previousSibling.value=\'' . game::format_cash(login::$user->player->data['up_cash']) . '\'"') . ' <dt>Notat</dt> <dd><input type="text" name="note" value="" maxlength="50" class="styled w120" /></dd> </dl> <h4>' . show_sbutton("Sett inn") . '</h4> </form> </div> </div> <!-- ta ut penger --> <div style="width: 205px; float: left"> <div class="section"> <form action="" method="post"> <h2>Ta ut penger</h2> <dl class="dd_right dl_2x"> <dt>Beløp</dt> <dd><input type="text" name="bank_ut" class="styled w90" value="0" style="margin-right: 3px" />' . show_button("Alt", 'onclick="this.previousSibling.value=\'' . game::format_cash($this->ff->data['ff_bank']) . '\'"') . ' <dt>Notat</dt> <dd><input type="text" name="note" value="" maxlength="50" class="styled w120" /></dd> </dl> <h4>' . show_sbutton("Ta ut") . '</h4> </form> </div> </div> <div class="clear"></div> </div>'; } echo ' <div class="fhr"></div>'; $ff_reset = $this->ff->data['ff_time_reset'] && !$this->ff->mod ? " AND ffbl_time > {$this->ff->data['ff_time_reset']}" : ""; // sideinformasjon - hent siste bevegelser $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 15); $result = $pagei->query("SELECT ffbl_type, ffbl_amount, ffbl_up_id, ffbl_note, ffbl_time, ffbl_balance FROM ff_bank_log WHERE ffbl_ff_id = {$this->ff->id}{$ff_reset} ORDER BY ffbl_time DESC"); if ($result->rowCount() == 0) { echo ' <p class="c"> Ingen overføringer er enda registrert. </p>'; } else { echo ' <h1 id="bevegelser" class="c">Siste bevegelser</h1> <table class="table center"> <thead> <tr> <th>Type</th> <th>Person</th> <th>Beløp</th> <th>Tidspunkt</th> <th>Notat</th> <th>Balanse</th> </tr> </thead> <tbody class="nowrap">'; $i = 0; $typer = array(1 => "bank_inn", "bank_ut", "bank_doner", "bank_betaling", "bank_tbetaling"); while ($row = $result->fetch()) { $type = isset($typer[$row['ffbl_type']]) ? ff::$bank_ikoner[$typer[$row['ffbl_type']]] : 'Ukjent'; $type .= " " . (isset(ff::$bank_types[$row['ffbl_type']]) ? ff::$bank_types[$row['ffbl_type']] : 'Ukjent'); if ($row['ffbl_type'] == 2 || $row['ffbl_type'] == 4) { $row['ffbl_amount'] = "-" . $row['ffbl_amount']; } $player = $row['ffbl_up_id'] ? '<user id="' . $row['ffbl_up_id'] . '" />' : 'Spillet'; echo ' <tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '> <td>' . $type . '</td> <td>' . $player . '</td> <td class="r">' . game::format_cash($row['ffbl_amount']) . '</td> <td>' . ess::$b->date->get($row['ffbl_time'])->format(date::FORMAT_SEC) . '</td> <td class="wrap">' . (empty($row['ffbl_note']) ? '<span style="color: #AAA">Tomt</span>' : game::bb_to_html($row['ffbl_note'])) . '</td> <td class="r">' . game::format_cash($row['ffbl_balance']) . '</td> </tr>'; } echo ' </tbody> </table>'; // flere sider? if ($pagei->pages > 1) { echo ' <p class="c">' . $pagei->pagenumbers(game::address(PHP_SELF, $_GET, array("side")) . "#bevegelser", game::address(PHP_SELF, $_GET, array("side"), array("side" => "_pageid_")) . "#bevegelser") . '</p>'; } } }
<?php global $_base; /* * Dette scriptet tar ut betalinger fra familier som må betale for å overleve * Se "Holde familien oppe" i familiedokumentet * * Familier med Crewstatus slipper å betale */ /* * Dette scriptet skal kjøres hver dag kl. 12.00 * Scriptet skal ikke kjøres før kl. 12.00 */ // hent oversikt over familier som skulle ha betalt nå $time = time(); $result = \Kofradia\DB::get()->query("\n\tSELECT ff_id\n\tFROM ff\n\tWHERE ff_inactive = 0 AND ff_is_crew = 0 AND ff_pay_status = 1 AND ff_pay_next IS NOT NULL AND ff_pay_next <= {$time}"); while ($row = $result->fetch()) { $familie = ff::get_ff($row['ff_id'], ff::LOAD_SCRIPT); putlog("CREWCHAN", "Broderskapet %u{$familie->data['ff_name']}%u har ikke betalt inn broderskapkostnad og blir nå lagt ned."); // legg ned familien $familie->dies(); } // hent ut de familiene som skal trekkes for familiekostnad automatisk $result = \Kofradia\DB::get()->query("\n\tSELECT ff_id\n\tFROM ff\n\tWHERE ff_inactive = 0 AND ff_is_crew = 0 AND ff_pay_status = 0 AND ff_pay_next IS NOT NULL AND ff_pay_next <= {$time}"); while ($row = $result->fetch()) { $familie = ff::get_ff($row['ff_id'], ff::LOAD_SCRIPT); // forsøk å trekk fra familiekostnaden $familie->pay_scheduler(); }
// har ikke oppnådd minstekravet? $rank_points = $familie->competition_rank_points(); if ($rank_points < $familie->data['fff_required_points']) { $familie->dies(); } else { $ff[$familie->id] = $familie; if (!isset($ff_rank[0]) || $ff_rank[0] < $rank_points) { $ff_rank = array($rank_points, $familie->id); } } } // ingen ff har oppnådd minstekravet? if (count($ff) == 0) { putlog("INFO", "Ingen broderskap overlevde eller klarte minstekravet i broderskapkonkurransen. {$__server['path']}/ff/?fff_id={$faf['fff_id']}"); // kjør ny konkurranse ff::create_competition(); // sett konkurransen som avsluttet \Kofradia\DB::get()->exec("UPDATE ff_free SET fff_active = 0 WHERE fff_id = {$faf['fff_id']}"); } else { // legg ned familiene som ikke vant foreach ($ff as $familie) { if ($familie->id == $ff_rank[1]) { continue; } $familie->dies(); } // utrop vinneren $familie = $ff[$ff_rank[1]]; $familie->competition_won(); // sett status for konkurransen at bygning skal velges \Kofradia\DB::get()->exec("UPDATE ff_free SET fff_time_expire_br = " . (time() + 86400) . ", fff_active = 2 WHERE fff_id = {$faf['fff_id']}");
/** * Endre leiepris */ protected function type_garasjeutleie_price($price) { // nylig endret? $last = $this->ff->params->get("garasje_time_change"); $expire = time() - 86400 * 3; if ($last > $expire && !access::has("mod")) { ess::$b->page->add_message("Leieprisen ble sist forandret " . ess::$b->date->get($last)->format() . ". Du må vente " . game::counter($last - $expire, true) . " før leieprisen kan endres på nytt."); $this->ff->redirect(); } // valgt pris? if (isset($_POST['price'])) { $price_new = game::intval($_POST['price']); if ($price_new == $price) { ess::$b->page->add_message("Du må skrive inn en ny pris.", "error"); } elseif ($price_new < ff::GTA_GARAGE_PRICE_LOW) { ess::$b->page->add_message("Leieprisen kan ikke være under " . game::format_cash(ff::GTA_GARAGE_PRICE_LOW) . ".", "error"); } elseif ($price_new > ff::GTA_GARAGE_PRICE_HIGH) { ess::$b->page->add_message("Leieprisen kan ikke være over " . game::format_cash(ff::GTA_GARAGE_PRICE_HIGH) . ".", "error"); } else { // lagre ny pris $this->ff->params->update("garasje_price", $price_new); if (!access::has("mod")) { $this->ff->params->update("garasje_time_change", time(), true); } else { $this->ff->params->commit(); } ess::$b->page->add_message("Leieprisen ble endret til " . game::format_cash($price_new) . "."); $this->ff->redirect(); } } echo ' <div class="bg1_c xxsmall" style="width: 280px"> <h1 class="bg1">Leiepris for garasje<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <boxes /> <form action="" method="post"> <dl class="dd_right"> <dt>Nåværende pris per plass</dt> <dd>' . game::format_cash($price) . '</dd> <dt>Ny leiepris per plass</dt> <dd><input type="text" class="styled w80" name="price" value="' . game::format_cash(game::intval(postval("price", $price))) . '" /></dd> </dl> <p class="c">' . show_sbutton("Lagre ny pris") . ' <a href="./?ff_id=' . $this->ff->id . '">Tilbake</a></p> <p>Leieprisen kan settes fra ' . game::format_cash(ff::GTA_GARAGE_PRICE_LOW) . ' til ' . game::format_cash(ff::GTA_GARAGE_PRICE_HIGH) . ' og kan kun justeres hver 3. time</p> </form> </div> </div>'; $this->ff->load_page(); }
/** * Hendelsene til spilleren */ protected static function page_log() { // kan ikke se? if (!page_min_side::$pstats) { echo ' <p class="c">Du har ikke tilgang til å se denne siden.</p>'; return; } global $_game; ess::$b->page->add_title("Hendelser"); ess::$b->page->add_css(' .gamelog { width: 80%; margin: 0 auto } .gamelog .time { color: #888888; padding-right: 2px } .ffl_time { color: #AAA; } .log_section { background-color: #1C1C1C; padding: 15px 15px 5px; margin: 30px 0; border: 10px solid #111111; }'); echo ' <div class="gamelog">'; $gamelog = new gamelog(); // finn ut hva som er tilgjengelig $result = \Kofradia\DB::get()->query("SELECT type, COUNT(id) AS count FROM users_log WHERE ul_up_id IN (0, " . page_min_side::$active_player->id . ") GROUP BY type"); $in_use = array(); $count = array(); $total = 0; while ($row = $result->fetch()) { $in_use[] = $row['type']; $count[$row['type']] = $row['count']; } $tilgjengelig = array(); foreach (gamelog::$items_id as $id => $name) { if (in_array($id, $in_use)) { $tilgjengelig[$id] = $id; } } // fjern ting vi ikke har tilgang til unset($tilgjengelig[gamelog::$items['crewforum_emne']], $count[gamelog::$items['crewforum_emne']]); unset($tilgjengelig[gamelog::$items['crewforum_svar']], $count[gamelog::$items['crewforum_svar']]); unset($tilgjengelig[gamelog::$items['crewforuma_emne']], $count[gamelog::$items['crewforuma_emne']]); unset($tilgjengelig[gamelog::$items['crewforuma_svar']], $count[gamelog::$items['crewforuma_svar']]); unset($tilgjengelig[gamelog::$items['crewforumi_emne']], $count[gamelog::$items['crewforumi_emne']]); unset($tilgjengelig[gamelog::$items['crewforumi_svar']], $count[gamelog::$items['crewforumi_svar']]); $i_bruk = $tilgjengelig; $total = array_sum($count); // nye hendelser (viser også nye hendelser i firma/familie)? if ((page_min_side::$active_player->data['up_log_ff_new'] > 0 || page_min_side::$active_player->data['up_log_new'] > 0) && page_min_side::$active_own) { echo ' <h1 class="c">Nye hendelser</h1>'; // nye hendelser i ff? if (page_min_side::$active_player->data['up_log_ff_new'] > 0) { // totalt antall logg hendelser som blir vist $counter_total = 0; // hent FF vi skal hente logg for $ffm_result = \Kofradia\DB::get()->query("SELECT ffm_ff_id, ffm_log_new FROM ff_members WHERE ffm_up_id = " . page_min_side::$active_player->id . " AND ffm_status = 1 AND ffm_log_new > 0"); while ($ffm = $ffm_result->fetch()) { $ff = ff::get_ff($ffm['ffm_ff_id'], ff::LOAD_SILENT); if (!$ff) { continue; } // hent hendelsene $result = \Kofradia\DB::get()->query("SELECT ffl_id, ffl_time, ffl_type, ffl_data, ffl_extra FROM ff_log WHERE ffl_ff_id = {$ff->id} ORDER BY ffl_time DESC LIMIT {$ffm['ffm_log_new']}"); if ($result->rowCount() > 0) { $logs = array(); while ($row = $result->fetch()) { $counter_total++; $day = ess::$b->date->get($row['ffl_time'])->format(date::FORMAT_NOTIME); $data = $ff->format_log($row['ffl_id'], $row['ffl_time'], $row['ffl_type'], $row['ffl_data'], $row['ffl_extra']); $logs[$day][] = '<span class="ffl_time">' . ess::$b->date->get($row['ffl_time'])->format("H:i") . ':</span> ' . $data; } echo ' <div class="log_section">'; $ff->load_header(); foreach ($logs as $day => $items) { echo ' <div class="section"> <h2>' . $day . '</h2>'; foreach ($items as $item) { echo ' <p>' . $item . '</p>'; } echo ' </div>'; } echo ' <p class="c"><a href="ff/logg?ff_id=' . $ff->id . '">Vis alle hendelsene for ' . $ff->type['refobj'] . ' »</a></p>'; $ff->load_footer(); echo ' </div>'; } } // ble det ikke vist noen hendelser? if ($counter_total == 0) { echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Logg for firma og broderskap<span class="left"></span><span class="right"></span></h1> <div class="bg1"> <p>Ingen nye hendelser tilknyttet firma eller broderskap.</p> </div> </div>'; } // nullstill telleren \Kofradia\DB::get()->exec("UPDATE ff_members SET ffm_log_new = 0 WHERE ffm_up_id = " . page_min_side::$active_player->id); \Kofradia\DB::get()->exec("UPDATE users_players SET up_log_ff_new = 0 WHERE up_id = " . page_min_side::$active_player->id); page_min_side::$active_player->data['up_log_ff_new'] = 0; } // nye normale hendelser if (page_min_side::$active_player->data['up_log_new'] > 0) { ess::$b->page->add_css('.ny { color: #FF0000 }'); $i_bruk[] = 'NULL'; $where = ' AND type IN (' . implode(",", $i_bruk) . ')'; $result = \Kofradia\DB::get()->query("SELECT time, type, note, num FROM users_log WHERE ul_up_id IN (0, " . page_min_side::$active_player->id . "){$where} ORDER BY time DESC, id DESC LIMIT " . page_min_side::$active_player->data['up_log_new']); if ($result->rowCount() == 0) { echo ' <p class="c">Ingen hendelser ble funnet.</p>'; } else { // vis hendelsene $logs = array(); while ($row = $result->fetch()) { $day = ess::$b->date->get($row['time'])->format(date::FORMAT_NOTIME); $data = $gamelog->format_log($row['type'], $row['note'], $row['num']); $logs[$day][] = ' <p><span class="time"><span class="ny">Ny!</span> - ' . ess::$b->date->get($row['time'])->format("H:i") . ':</span> ' . $data . '</p>'; } foreach ($logs as $day => $items) { echo ' <div class="bg1_c"> <h1 class="bg1">' . $day . '<span class="left2"></span><span class="right2"></span></h1> <div class="bg1">'; foreach ($items as $item) { echo $item; } echo ' </div> </div>'; } echo ' <p class="c">Viser ' . page_min_side::$active_player->data['up_log_new'] . ' <b>ny' . (page_min_side::$active_player->data['up_log_new'] == 1 ? '' : 'e') . '</b> hendelse' . (page_min_side::$active_player->data['up_log_new'] == 1 ? '' : 'r') . '<br /><a href="' . htmlspecialchars(page_min_side::addr()) . '">Se full oversikt</a></p>'; } \Kofradia\DB::get()->exec("UPDATE users_players SET up_log_new = 0 WHERE up_id = " . page_min_side::$active_player->id); page_min_side::$active_player->data['up_log_new'] = 0; } else { echo ' <div class="bg1_c small bg1_padding"> <h1 class="bg1">Normale hendelser<span class="left"></span><span class="right"></span></h1> <div class="bg1" id="logg"> <p class="c"><a href="' . htmlspecialchars(page_min_side::addr()) . '">Vis oversikt over alle normale hendelser »</a></p> </div> </div>'; } } else { // filter $filter = array(); foreach ($_GET as $name => $val) { $matches = NULL; if (preg_match("/^f([0-9]+)\$/Du", $name, $matches) && in_array($matches[1], $tilgjengelig)) { $filter[] = $matches[1]; } } if (count($filter) == 0) { $filter = false; } else { $i_bruk = $filter; $filter = true; ess::$b->page->add_message("Du har aktivert et filter og viser kun bestemte enheter."); } // hva skal vi vise? if (!$filter) { echo ' <p class="c filterbox"><a href="#" onclick="toggle_display(\'.filterbox\', event)">Vis filteralternativer</a></p>'; } echo ' <div' . (!$filter ? ' style="display: none"' : '') . ' class="filterbox bg1_c"> <h1 class="bg1">Filter<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p class="c">Velg filter (<a href="#" class="box_handle_toggle" rel="f[]">Merk alle</a>)</p> <form action="" method="get">' . (!page_min_side::$active_own || !page_min_side::$active_player->active ? ' <input type="hidden" name="up_id" value="' . page_min_side::$active_player->id . '" />' : '') . ' <input type="hidden" name="a" value="log" /> <table class="table center" width="100%"> <tbody>'; $tbody = new tbody(3); // 3 kolonner foreach ($tilgjengelig as $id) { $title = gamelog::$items_name[$id]; $aktivt = in_array($id, $i_bruk) && $filter; $ant = $count[$id]; $tbody->append('<input type="checkbox" name="f' . $id . '" rel="f[]" value=""' . ($aktivt ? ' checked="checked"' : '') . ' />' . htmlspecialchars($title) . ' <span class="dark">(' . $ant . ' stk)</span>', 'class="box_handle"'); } $tbody->clean(); echo ' </tbody> </table> <p class="c">' . show_sbutton("Oppdater") . '</p> </form> </div> </div>'; $i_bruk[] = "NULL"; $where = ' AND type IN (' . implode(",", $i_bruk) . ')'; // sideinformasjon - hent loggene på denne siden $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, max(50, page_min_side::$active_player->data['up_log_new'])); $result = $pagei->query("SELECT time, type, note, num FROM users_log WHERE ul_up_id IN (0, " . page_min_side::$active_player->id . "){$where} ORDER BY time DESC, id DESC"); if ($result->rowCount() == 0) { echo ' <p class="c">Ingen hendelser ble funnet.</p>'; } else { echo ' <p class="c">Totalt har du <b>' . game::format_number($total) . '</b> hendelse' . ($total == 1 ? '' : 'r') . '.</p>'; if ($pagei->pages > 1) { echo ' <p class="c">' . address::make($_GET, "", $pagei) . '</p>'; } // hendelsene $logs = array(); $i = 0; $e = $pagei->start; while ($row = $result->fetch()) { $day = ess::$b->date->get($row['time'])->format(date::FORMAT_NOTIME); $data = $gamelog->format_log($row['type'], $row['note'], $row['num']); $ny = $e < page_min_side::$active_player->data['up_log_new']; $logs[$day][] = ' <p><span class="time">' . ($ny ? '<span class="ny">Ny!</span> - ' : '') . '' . ess::$b->date->get($row['time'])->format("H:i") . ':</span> ' . $data . '</p>'; $e++; } foreach ($logs as $day => $items) { echo ' <div class="bg1_c"> <h1 class="bg1">' . $day . '<span class="left2"></span><span class="right2"></span></h1> <div class="bg1">'; foreach ($items as $item) { echo $item; } echo ' </div> </div>'; } echo ' <p class="c">Viser ' . $pagei->count_page . ' av ' . $pagei->total . ' hendelse' . ($pagei->total == 1 ? '' : 'r') . '</p>'; if ($pagei->pages > 1) { echo ' <p class="c">' . address::make($_GET, "", $pagei) . '</p>'; } } } echo ' </div>'; }
/** * Betale leie for garasje */ protected function garasje_betale_show() { ess::$b->page->add_title("Betale leie"); // hent informasjon om garasjen $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ugg_time, ugg_time_next_rent, ugg_ff_id, ugg_cost_total, ugg_places\n\t\t\tFROM users_garage\n\t\t\tWHERE ugg_up_id = {$this->gta->up->id} AND ugg_b_id = {$this->gta->up->data['up_b_id']}"); $garasje = $result->fetch(); // har vi ingen garasje eller kan ikke betale leie nå? if (!$garasje || !gta::can_pay($garasje['ugg_time_next_rent'])) { redirect::handle("/gta/garasje", redirect::ROOT); } // hent alle firmaene og plukk ut det korrekte $ff_list = $this->gta->get_ff(); if (!isset($ff_list[$garasje['ugg_ff_id']])) { throw new HSException("Mangler firma for garasje."); } $ff = $ff_list[$garasje['ugg_ff_id']]; // beregn pris for neste periode $price = $garasje['ugg_places'] * $ff['price']; // utføre betaling? if (isset($_POST['pay'])) { $places = (int) postval("places"); $price_old = (int) postval("price"); // bydel forandret seg if (postval("b_id") != $this->gta->up->data['up_b_id']) { ess::$b->page->add_message("Du har reist til en annen bydel siden du sist viste siden.", "error"); redirect::handle("/gta/garasje", redirect::ROOT); } if ($places != $garasje['ugg_places']) { ess::$b->page->add_message("Kapasiteten i garasjen har endret seg.", "error"); } elseif ($price_old != $price) { ess::$b->page->add_message("Leieprisen hos utleiefirmaet har endret seg.", "error"); } else { // trekk fra penger $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash - {$price} WHERE up_id = {$this->gta->up->id} AND up_cash >= {$price}"); if ($a == 0) { ess::$b->page->add_message("Du har ikke råd til å betale for denne leien.", "error"); } else { // sett opp tidspunkt for neste innbetaling $next = ess::$b->date->get($garasje['ugg_time_next_rent']); $next->setTime(6, 0, 0); $next->modify("+7 days"); $next = $next->format("U"); // oppdater garasje $a = \Kofradia\DB::get()->exec("UPDATE users_garage SET ugg_time_next_rent = {$next}, ugg_cost_total = ugg_cost_total + {$price} WHERE ugg_up_id = {$this->gta->up->id} AND ugg_b_id = {$this->gta->up->data['up_b_id']} AND ugg_time_next_rent = {$garasje['ugg_time_next_rent']} AND ugg_places = {$garasje['ugg_places']}"); // kunne ikke oppdatere garasje if ($a == 0) { // gi tilbake pengene \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash + {$price} WHERE up_id = {$this->gta->up->id}"); } else { // gi pengene til firmaet ff::bank_static(ff::BANK_TJENT, round($price * ff::GTA_PERCENT), $ff['ff_id']); ess::$b->page->add_message('Du har utvidet leieavtalen på <b>' . game::$bydeler[$this->gta->up->data['up_b_id']]['name'] . '</b> hos firmaet <a href="&rpath;/ff/?ff_id=' . $ff['ff_id'] . '">' . htmlspecialchars($ff['ff_name']) . '</a> med 7 dager for ' . game::format_cash($price) . '.'); } redirect::handle("/gta/garasje", redirect::ROOT); } } } echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Betale leie for garasje på ' . htmlspecialchars($this->gta->up->bydel['name']) . '<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p class="c"><a href="&rpath;/gta/garasje">Tilbake</a></p> <dl class="dd_right"> <dt>Utleiefirma</dt> <dd><a href="&rpath;/ff/?ff_id=' . $ff['ff_id'] . '">' . htmlspecialchars($ff['ff_name']) . '</a></dd> <dt>Kapasitet</dt> <dd>' . game::format_num($garasje['ugg_places']) . '</dd> <dt>Leiepris per plass</dt> <dd>' . game::format_cash($ff['price']) . '</dd> <dt>Neste betalingsfrist</dt> <dd>' . ess::$b->date->get($garasje['ugg_time_next_rent'])->format() . '</dd> </dl> <form action="" method="post"> <input type="hidden" name="price" value="' . $price . '" /> <input type="hidden" name="places" value="' . $garasje['ugg_places'] . '" /> <input type="hidden" name="b_id" value="' . $this->gta->up->data['up_b_id'] . '" /> <dl class="dd_right"> <dt>Total leiepris neste periode</dt> <dd>' . game::format_cash($price) . '</dd> </dl> <p class="c">' . show_sbutton("Utfør betaling for neste leie", 'name="pay"') . '</p> </form> <p class="c">Husk at det kan hende det lønner seg å bytte til et <a href="&rpath;/gta/garasje/detaljer">annet firma</a>. Du kan også <a href="&rpath;/gta/garasje/endre">justere kapasiteten</a> før du betaler for å få billigere leie.</p> </div> </div>'; }
/** * Plukk ut en parent * @param array $priority * @param array $members spillerene som skal flyttes * @param array $player (enten $member eller $player må sendes med, den andre null) * @param string $back_link (skal være html safe) */ protected function pick_parent($priority, $members = null, $player, $back_link, $form_html = null, $invite = false) { // ikke pri4 eller parent aktivert? if ($priority['priority'] != 4 || !$this->ff->type['parent']) { return null; } $parent = null; // har vi valgt pri3? if (isset($_POST['parent'])) { $ok = true; // gyldig pri3? $pri3_id = (int) $_POST['parent']; if (!isset($this->ff->members['members_priority'][3][$pri3_id])) { ess::$b->page->add_message("Fant ikke valgt {$this->ff->type['priority'][3]}.", "error"); $ok = false; } // kontroller at det er en gyldig pri3 og om ingen parents endret? if ($ok && $members) { $changed = false; foreach ($members as $member) { if (!$changed && ($priority['priority'] != $member->data['ffm_priority'] || $pri3_id != $member->data['ffm_parent_up_id'])) { $changed = true; } // seg selv? if ($member->id == $pri3_id) { ess::$b->page->add_message("Du kan ikke velge en spiller du skal flytte.", "error"); $ok = false; break; } } if (!$changed) { ess::$b->page->add_message(fword("Medlemmet", "Medlemmene", count($members)) . " er allerede underordnet denne {$this->ff->type['priority'][3]}.", "error"); $ok = false; } } if ($ok) { return $pri3_id; } } // vis oversikt over pri3 man kan velge mellom ess::$b->page->add_title("Velg overordnet {$this->ff->type['priority'][3]}"); $text = ""; $up_ids = array(); if (!$members || count($members) == 1) { $member = $members ? $members[0] : null; $up_ids[] = $member ? $member->id : $player['up_id']; $text = ' <p>Du må velge en ' . $this->ff->type['priority'][3] . ' som skal være overordnet for ' . ($member ? game::profile_link($member->id, $member->data['up_name'], $member->data['up_access_level']) : game::profile_link($player['up_id'], $player['up_name'], $player['up_access_level'])) . ' som vil ' . ($invite ? 'invitert' : 'få posisjonen') . ' som ' . $this->ff->type['priority'][4] . '.' . ($member ? ' (Nåværende posisjon: ' . ucfirst($member->get_priority_name()) . ($member->data['ffm_parent_up_id'] ? ' underordnet <user id="' . $member->data['ffm_parent_up_id'] . '" />' : '') . ')' : '') . '</p>'; } else { $list = array(); foreach ($members as $member) { $up_ids[] = $member->id; $list[] = '<li><user id="' . $member->id . '" /> (' . $member->get_priority_name() . ($member->data['ffm_parent_up_id'] ? ' underordnet <user id="' . $member->data['ffm_parent_up_id'] . '" />' : '') . ')</li>'; } $text = ' <p>Du må velge en ' . $this->ff->type['priority'][3] . ' som skal være overordnet for følgende spillere:</p> <ul>' . implode("", $list) . '</ul>'; } echo ' <div class="section" style="width: 400px"> <h1>Velg overordnet ' . $this->ff->type['priority'][3] . '</h1> <p class="h_right"><a href="' . $back_link . '">Tilbake</a></p> <boxes /> <form action="" method="post">' . $form_html . ' <input type="hidden" name="up_id' . ($members ? 's' : '') . '" value="' . ($members ? implode(",", $up_ids) : $player['up_id']) . '" /> <input type="hidden" name="priority" value="' . $priority['priority'] . '" />' . $text . ' <table class="table center"> <thead> <tr> <th>' . ucfirst($this->ff->type['priority'][3]) . '</th> <th>Sist pålogget</th> <th>' . ucfirst($this->ff->type['priority'][4]) . '</th> <th>Inviterte ' . $this->ff->type['priority'][4] . '</th> </tr> </thead> <tbody>'; $i = 0; foreach ($this->ff->members['members_priority'][3] as $member_parent) { if ($members && in_array($member_parent->id, $up_ids)) { continue; } echo ' <tr class="box_handle' . (++$i % 2 == 0 ? ' color' : '') . '"> <td><input type="radio" name="parent" value="' . $member_parent->id . '" /> ' . game::profile_link($member_parent->id, $member_parent->data['up_name'], $member_parent->data['up_access_level']) . '</td> <td class="r">' . ess::$b->date->get($member_parent->data['up_last_online'])->format() . '</td> <td class="r">' . (isset($this->ff->members['members_parent'][$member_parent->id]) ? count($this->ff->members['members_parent'][$member_parent->id]) : 0) . '</td> <td class="r">' . (isset($this->ff->members['invited_parent'][$member_parent->id]) ? count($this->ff->members['invited_parent'][$member_parent->id]) : 0) . '</td> </tr>'; } echo ' </tbody> </table> <p class="c"> ' . show_sbutton("Velg {$this->ff->type['priority'][3]}") . ' <a href="' . $back_link . '">Tilbake</a> </p> </form> </div>'; $this->ff->load_page(); }
/** * Behandle forespørsel */ protected function page_handle() { $access = $this->ff->access(1); $this->form = \Kofradia\Form::getByDomain("firma", login::$user); ess::$b->page->add_title("Bankkontroll"); // hent antall klienter $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT COUNT(up_id)\n\t\t\tFROM users_players\n\t\t\tWHERE up_access_level != 0 AND up_access_level < " . ess::$g['access_noplay'] . " AND up_bank_ff_id = {$this->ff->id}"); $num_klienter = $result->fetchColumn(0); // finn ut nåværende status $status = $this->ff->params->get("bank_overforing_tap_change", 0); $status_text = $status == 0 ? 'Ingen endring' : ($status > 0 ? 'Øke ' . game::format_number($status * 100, 2) . ' %' : 'Synke ' . game::format_number(abs($status) * 100, 2) . ' %'); // finn "tilgjengelige" overføringer $expire_ffbt = time() - 3600; $result = \Kofradia\DB::get()->query("SELECT COUNT(ffbt_id), SUM(ffbt_amount), SUM(ffbt_profit) FROM ff_bank_transactions WHERE ffbt_ff_id = {$this->ff->id} AND ffbt_up_id = 0 AND ffbt_time >= {$expire_ffbt}"); $info = $result->fetch(\PDO::FETCH_NUM); // nåværende overføringsgebyr $overforing_tap = $this->ff->params->get("bank_overforing_tap", 0); // forandre fortjeneste? if (isset($_POST['fortjenestep_2']) && isset($_POST['fortjenestep_0']) && $access) { // kontroller verdier $fortjenestep_2 = intval($_POST['fortjenestep_2']); $fortjenestep_0 = intval($_POST['fortjenestep_0']); //$this->ff->params_lock(); $this->ff->params->lock(); $i = 0; // medeier if ($fortjenestep_2 > 40 || $fortjenestep_2 < 5) { ess::$b->page->add_message("Fortjenesten for {$this->ff->type['priority'][2]} kan ikke være under 5 % eller over 40 %.", "error"); $i++; } elseif ($fortjenestep_2 != $this->ff->params->get("fortjenestep_2", 0.25) * 100) { $this->ff->params->update("fortjenestep_2", $fortjenestep_2 / 100); ess::$b->page->add_message("Fortjenesten for " . $this->ff->type['priority'][2] . " er nå på " . $fortjenestep_2 . " %."); $i++; } // øvrige ansatte if ($fortjenestep_0 > 40 || $fortjenestep_0 < 5) { ess::$b->page->add_message("Fortjenesten for øvrige ansatte kan ikke være under 5 % eller over 40 %.", "error"); $i++; } elseif ($fortjenestep_0 != $this->ff->params->get("fortjenestep_0", 0.1) * 100) { $this->ff->params->update("fortjenestep_0", $fortjenestep_0 / 100); ess::$b->page->add_message("Fortjenesten for øvrige ansatte er nå på " . $fortjenestep_0 . " %."); $i++; } // ingen som ble endret? if ($i == 0) { ess::$b->page->add_message("Ingen endringer ble utført."); } //$this->ff->params_save(); $this->ff->params->commit(); redirect::handle(); } // hente gebyr? if (isset($_POST['hent_gebyr']) && $this->form->validateHashOrAlert()) { // ingen gebyr å hente? if ($info[0] == 0) { ess::$b->page->add_message("Det er ingen gebyr å hente.", "error"); redirect::handle(); } // sjekk at det har gått lang nok tid siden forrige gang // FIXME: denne er ikke i bruk (bank_gebyr_siste blir aldri satt) $expire = $this->ff->uinfo->params->get("bank_gebyr_siste", 0) + 900; if ($expire > time()) { ess::$b->page->add_message("Du må vente " . ess::$b->date->get($expire)->format(date::FORMAT_SEC) . " før du kan hente nye gebyr.", "error"); redirect::handle(); } \Kofradia\DB::get()->beginTransaction(); // oppdater gebyrene til vår bruker \Kofradia\DB::get()->exec("UPDATE ff_bank_transactions SET ffbt_up_id = " . login::$user->player->id . " WHERE ffbt_ff_id = {$this->ff->id} AND ffbt_up_id = 0 AND ffbt_time >= {$expire_ffbt}"); // finn ut hvor mange prosent vi skal få og firmaet skal få $p_player = $access ? 0.5 : ($this->ff->access(2) ? $this->ff->params->get("fortjenestep_2", 0.25) : $this->ff->params->get("fortjenestep_0", 0.1)); $p_firma = max(0, 0.5 - $p_player); // hent ut informasjon om hvor mye vi fikk $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT COUNT(ffbt_id), SUM(ffbt_amount), SUM(ffbt_profit)*{$p_player}, SUM(ffbt_profit)*{$p_firma}\n\t\t\t\tFROM ff_bank_transactions\n\t\t\t\tWHERE ffbt_ff_id = {$this->ff->id} AND ffbt_up_id = " . login::$user->player->id . " AND ffbt_status = 0"); $info = $result->fetch(\PDO::FETCH_NUM); // 0 => antall, 1 => overført, 2 => profit bruker, 3 => profit firma // sett pengene til riktige steder \Kofradia\DB::get()->exec("\n\t\t\t\tUPDATE users_players, ff, ff_bank_transactions, ff_members, (\n\t\t\t\t\t\tSELECT SUM(ffbt_profit) AS ffbt_profit_sum\n\t\t\t\t\t\tFROM ff_bank_transactions\n\t\t\t\t\t\tWHERE ffbt_ff_id = {$this->ff->id} AND ffbt_up_id = " . login::$user->player->id . " AND ffbt_status = 0\n\t\t\t\t\t) AS ref\n\t\t\t\tSET up_cash = up_cash + ffbt_profit_sum*{$p_player}, ff_bank = ff_bank + ffbt_profit_sum*{$p_firma}, ffbt_status = 1, ffm_earnings = ffm_earnings + ffbt_profit_sum*{$p_player}, ffm_earnings_ff = ffm_earnings_ff + ffbt_profit_sum*{$p_firma}\n\t\t\t\tWHERE ffbt_ff_id = {$this->ff->id} AND ffbt_up_id = " . login::$user->player->id . " AND ffbt_status = 0 AND up_id = ffbt_up_id AND ff_id = ffbt_ff_id AND ffm_ff_id = ff_id AND ffm_up_id = up_id"); // oppdater stats $this->ff->stats_update("money_in", $info[3]); // TODO: Slette ffbt oppføringene \Kofradia\DB::get()->commit(); // ingen ble oppdatert? if ($info[0] == 0) { ess::$b->page->add_message("Det er ingen gebyr å hente.", "error"); } else { ess::$b->page->add_message("Du hentet {$info[0]} gebyr og fikk totalt " . game::format_cash($info[2]) . ". " . game::format_cash($info[1]) . " var blitt overført. Firmaet fikk " . game::format_cash($info[3]) . "."); } redirect::handle(); } // finn ut hvor lang tid det er til neste endring $date = ess::$b->date->get(); $next_update = 3600 - $date->format("i") * 60 - $date->format("s"); // endre overføringsgebyr if (isset($_POST['eog_value']) && $access) { // sjekk at verdien er en av de vi kan velge? $step = floatval($_POST['eog_value']); if (!in_array($step, ff::$type_bank['eog_steps'])) { ess::$b->page->add_message("Verdien du valgte var ikke gyldig.", "error"); redirect::handle("bank?ff_id={$this->ff->id}"); } $this->ff->params->lock(); $overforing_tap = $this->ff->params->get("bank_overforing_tap", 0); // øke? if ($step > 0) { // allerede på topp? if ($overforing_tap >= ff::$type_bank['bank_overforing_gebyr_max']) { ess::$b->page->add_message("Overføringsgebyret kan ikke økes mer.", "error"); $this->ff->params->commit(); redirect::handle("bank?ff_id={$this->ff->id}"); } // overstiger maks? if ($step + $overforing_tap > ff::$type_bank['bank_overforing_gebyr_max']) { $step = ff::$type_bank['bank_overforing_gebyr_max'] - $overforing_tap; } } elseif ($step < 0) { // allerede på bunn? if ($overforing_tap <= ff::$type_bank['bank_overforing_gebyr_min']) { ess::$b->page->add_message("Overføringsgebyret kan ikke senkes mer.", "error"); $this->ff->params->commit(); redirect::handle("bank?ff_id={$this->ff->id}"); } // overstiger min? if ($step + $overforing_tap < ff::$type_bank['bank_overforing_gebyr_min']) { $step = ff::$type_bank['bank_overforing_gebyr_min'] - $overforing_tap; } } // lagre $this->ff->params->update("bank_overforing_tap_change", $step, true); if ($step == 0) { ess::$b->page->add_message("Overføringsgebyret vil ikke lengre bli endret."); } else { $status = $step > 0 ? 'økt med ' . game::format_number($step * 100, 2) . ' %' : 'senket med ' . game::format_number(abs($step) * 100, 2) . ' %'; ess::$b->page->add_message('Overføringsgebyret vil bli ' . $status . ' til ' . game::format_number(($overforing_tap + $step) * 100, 2) . ' % om ' . game::counter($next_update) . '.'); } redirect::handle("bank?ff_id={$this->ff->id}"); } echo ' <!--<h1>Bankkontroll</h1>--> <div class="section" style="width: 250px; margin-left: auto; margin-right: auto"> <h2>Bankinformasjon</h2>' . ($access ? ' <p class="h_right eog_off"><a href="../js" onclick="handleClass(\'.eog_on\', \'.eog_off\', event, this.parentNode.parentNode)">Endre overføringsgebyr</a></p> <p class="h_right eog_on hide"><a href="../js" onclick="handleClass(\'.eog_off\', \'.eog_on\', event, this.parentNode.parentNode)">Avbryt endringer</a></p>' : '') . ' <dl class="dd_right' . ($access ? ' eog_off' : '') . '"> <dt>Overføringsgebyr</dt> <dd>' . game::format_number($overforing_tap * 100, 2) . ' %</dd> <dt>Neste endring</dt> <dd>' . $status_text . '</dd> <dt>Tid før neste endring</dt> <dd>' . game::counter($next_update) . '</dd> <dt>Antall klienter</dt> <dd>' . game::format_number($num_klienter) . '</dd> </dl>'; if ($access) { echo ' <form action="" method="post" class="eog_on hide"> <dl class="dd_right"> <dt>Nåværende overføringsgebyr</dt> <dd>' . game::format_number($overforing_tap * 100, 2) . ' %</dd> <dt>Nåværende status</dt> <dd>' . $status_text . '</dd> <dt>Ny handling</dt> <dd> <select name="eog_value">'; $active = in_array($status, ff::$type_bank['eog_steps']) ? $status : 0; foreach (ff::$type_bank['eog_steps'] as $step) { $status = $step == 0 ? 'Ingen endring' : ($step > 0 ? 'Øke ' . game::format_number($step * 100, 2) . ' %' : 'Senke ' . game::format_number(abs($step) * 100, 2) . ' %'); echo ' <option value="' . $step . '"' . ($step == $active ? ' selected="selected"' : '') . '>' . $status . '</option>'; } echo ' </select> </dd> </dl> <p class="c"> <input type="submit" class="button" value="Lagre endringer" /> <a href="../js" class="button" onclick="handleClass(\'.eog_off\', \'.eog_on\', event, this.parentNode.parentNode.parentNode)">Avbryt endringer</a> </p> <div class="hr"></div> <p>Overføringsgebyret blir endret hver hele time og handlingen fortsetter til du endrer den eller du når en av grensene.</p> <dl class="dd_right"> <dt>Minimumsverdi</dt> <dd>' . game::format_number(ff::$type_bank['bank_overforing_gebyr_min'] * 100, 2) . ' %</dd> <dt>Maksimumsverdi</dt> <dd>' . game::format_number(ff::$type_bank['bank_overforing_gebyr_max'] * 100, 2) . ' %</dd> </dl> </form>'; } echo ' </div> <div class="section" style="width: 250px; margin-left: auto; margin-right: auto"> <h2>Overføringsgebyr</h2> <p class="h_right"> <a href="../js" onclick="abortEvent(event);hideClass(\'bankinfo0\');showClass(\'bankinfo1\')" class="bankinfo0">Vis informasjon</a> <a href="../js" onclick="abortEvent(event);hideClass(\'bankinfo1\');showClass(\'bankinfo0\')" class="bankinfo1 hide">Skjul informasjon</a> </p> <dl class="dd_right"> <dt>Uhentede gebyr</dt> <dd>' . game::format_number($info[0]) . '</dd> <dt> </dt> <dd>' . game::format_cash($info[2]) . '</dd> <dt> </dt> <dd>(' . game::format_cash($info[1]) . ')</dd> </dl> <div class="bankinfo1 hide j"> <div class="hr"></div> <p> For at banken skal motta overføringsgebyrene må disse hentes inn før det har gått 60 minutter etter at overføringen har skjedd. </p> <p> Den som henter inn gebyrene mottar en viss prosent av gebyrets beløp: </p> <ul> <li>' . ucfirst($this->ff->type['priority'][1]) . ': 50 %</li> <li>' . ucfirst($this->ff->type['priority'][2]) . ': ' . intval($this->ff->params->get("fortjenestep_2", 0.25) * 100) . ' % (' . intval(50 - $this->ff->params->get("fortjenestep_2", 0.25) * 100) . ' % til firmaet)</li> <li>Øvrige ansatte: ' . intval($this->ff->params->get("fortjenestep_0", 0.1) * 100) . ' % (' . intval(50 - $this->ff->params->get("fortjenestep_0", 0.1) * 100) . ' % til firmaet)</li></li> </ul> <p> Når du har hentet inn nåværende gebyr må du vente 15 minutter til neste gang du kan hente inn gebyr. </p> </div>' . ($info[0] > 0 ? ' <form action="" method="post"> ' . $this->form->getHTMLInput() . ' <h4>' . show_sbutton("Hent gebyr", 'name="hent_gebyr"') . '</h4> </form>' : '') . ' </div>'; // endre fortjeneste if ($access) { echo ' <div class="section w250 center"> <h2>Endre fortjeneste</h2> <p>Som eier kan du bestemme hvor mange prosent de som henter ut gebyrene skal få. Du må velge mellom 5 % og 40 %. Firmaet får det som er igjen av totalt 50 %.</p> <form action="" method="post"> <dl class="dd_right dl_2x"> <dt>' . ucfirst($this->ff->type['priority'][2]) . '</dt> <dd><input name="fortjenestep_2" type="text" value="' . intval($this->ff->params->get("fortjenestep_2", 0.25) * 100) . '" class="styled w30 r" /> %</dd> <dt>Øvrige ansatte</dt> <dd><input name="fortjenestep_0" type="text" value="' . intval($this->ff->params->get("fortjenestep_0", 0.1) * 100) . '" class="styled w30 r" /> %</dd> </dl> <h4>' . show_sbutton("Lagre endringer") . '</h4> </form> </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(); }
/** * Godta/avslå søknad * @param boolean $outcome - om søknaden blir innvilget eller ikke * @param integer $ds_id * @param string $reason */ public static function decide($outcome, $ds_id, $reason) { global $_base, $__server; $ds_id = (int) $ds_id; // hent søknaden $soknad = self::get($ds_id); // fant ikke søknaden? if (!$soknad) { return false; } // er søknaden allerede behandlet? if ($soknad['ds_reply_decision'] != 0) { return false; } // typen $type = self::get_type($soknad['ds_type']); // har vi tilgang til søknaden? if (!access::has($type['access'])) { return false; } // sjekk for tom begrunnelse $have_reason = trim(game::format_data($reason)) != ""; // sett opp params $params = unserialize($soknad['ds_params']); // sett opp søknadsinfo $info = self::get_info($type['name'], $soknad, $params); // info er ikke gyldig - søknaden er ikke gyldig if (!is_array($info)) { // slett søknaden self::delete($ds_id); return $info; } // avslå søknad if (!$outcome) { $msg = 'bb:' . $type['title'] . ': Din søknad ble avslått. (' . $info['bb'] . ') Begrunnelse: ' . ($have_reason ? $reason : 'Ingen begrunnelse gitt.'); // spesielle handlinger switch ($type['name']) { case "ff_name": // sett tilbakepengene på bankkontoen if (isset($params['cost']) && $params['cost'] > 0) { $msg .= ' Beløpet på ' . game::format_cash($params['cost']) . ' som ble innbetalt ved søknad er satt inn på kontoen igjen.'; ff::bank_static(ff::BANK_TILBAKEBETALING, $params['cost'], $soknad['ds_rel_id'], 'Navnsøknad avslått: ' . $params['name']); } break; } } else { $msg = 'bb:' . $type['title'] . ': Din søknad har blitt innvilget. (' . $info['bb'] . ') Begrunnelse: ' . ($have_reason ? $reason : 'Ingen begrunnelse gitt.'); // spesielle handlinger switch ($type['name']) { case "ff_name": $ff = ff::get_ff($soknad['ds_rel_id'], ff::LOAD_SCRIPT); if ($ff) { $ff->change_name($params['name'], $soknad['ds_up_id']); // lagre gammelt navn på FF i søknaden $params['name_old'] = $info['ff_name']; } break; } } // legg til logg hos spilleren player::add_log_static("soknader", $msg, 0, $soknad['ds_up_id']); // oppdater søknaden \Kofradia\DB::get()->exec("UPDATE div_soknader SET ds_params = " . \Kofradia\DB::quote(serialize($params)) . ", ds_reply_decision = " . ($outcome ? 1 : -1) . ", ds_reply_reason = " . \Kofradia\DB::quote($reason) . ", ds_reply_up_id = " . self::up_id() . ", ds_reply_time = " . time() . " WHERE ds_id = {$ds_id}"); // oppdater cache tasks::set("soknader", \Kofradia\DB::get()->query("SELECT COUNT(ds_id) FROM div_soknader WHERE ds_reply_decision = 0")->fetchColumn(0)); return $info; }
/** * Behandle auksjonen når den er ferdig */ protected function handle_complete() { // forsøk å sett som behandlet $this->data['a_completed'] = 1; $affected = \Kofradia\DB::get()->exec("UPDATE auksjoner SET a_completed = 1 WHERE a_id = {$this->id} AND a_completed = 0"); // allerede behandlet? if ($affected == 0) { return; } // hent vinnerbudet $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ab_id, ab_bid, ab_up_id\n\t\t\tFROM auksjoner_bud\n\t\t\tWHERE ab_a_id = {$this->id} AND ab_active != 0\n\t\t\tORDER BY ab_time DESC LIMIT 1"); $bud = $result->fetch(); unset($result); // har ikke noe bud? if (!$bud) { // behandle hver type auksjon forskjellig switch ($this->data['a_type']) { // firma case self::TYPE_FIRMA: // forleng auksjonen med 3 timer fra nå $this->data['a_end'] = time() + 10800; $this->data['a_completed'] = 0; $this->status = self::STATUS_ACTIVE; \Kofradia\DB::get()->exec("UPDATE auksjoner SET a_end = {$this->data['a_end']}, a_completed = 0 WHERE a_id = {$this->id}"); break; // kuler // kuler case self::TYPE_KULER: // gi kulene tilbake til personen som startet auksjonen $kuler = (int) $this->params->get("bullets"); if ($kuler && $this->data['a_up_id']) { player::add_log_static("auksjon_kuler_no_bid", $this->id, $kuler, $this->data['a_up_id']); \Kofradia\DB::get()->exec("UPDATE users_players SET up_weapon_bullets = up_weapon_bullets + {$kuler}, up_weapon_bullets_auksjon = GREATEST(0, up_weapon_bullets_auksjon - {$kuler}) WHERE up_id = {$this->data['a_up_id']}"); } break; } } else { $up = player::get($bud['ab_up_id']); // behandle hver type auksjon forskjellig switch ($this->data['a_type']) { // firma case self::TYPE_FIRMA: // inviter spilleren til firmaet $ff_id = $this->params->get("ff_id"); if ($ff_id) { $ff = ff::get_ff($ff_id, ff::LOAD_SCRIPT); $ff->player_set_priority($bud['ab_up_id'], 1); $ff->reset_date_reg(true); // første firma av denne typen i spillet? hall_of_fame::trigger("ff_owner", $ff); } break; // kuler // kuler case self::TYPE_KULER: // gi kulene til vinneren av auksjonen $kuler = (int) $this->params->get("bullets"); if ($kuler) { // oppdater antall auksjonskuler for spilleren som holdt auksjonen if ($this->data['a_up_id']) { \Kofradia\DB::get()->exec("UPDATE users_players SET up_weapon_bullets_auksjon = GREATEST(0, up_weapon_bullets_auksjon - {$kuler}) WHERE up_id = {$this->data['a_up_id']}"); } // gi kulene til vinneren $up->add_log("auksjon_kuler_won", $this->id . ":" . $bud['ab_bid'], $kuler); $up->data['up_weapon_bullets'] += $kuler; $up->data['up_weapon_bullets'] = max(0, $up->data['up_weapon_bullets'] - $kuler); \Kofradia\DB::get()->exec("UPDATE users_players SET up_weapon_bullets = up_weapon_bullets + {$kuler}, up_weapon_bullets_auksjon = GREATEST(0, up_weapon_bullets_auksjon - {$kuler}) WHERE up_id = {$bud['ab_up_id']}"); } break; } // live-feed livefeed::add_row('<user id="' . $bud['ab_up_id'] . '" /> vant auksjonen <a href="' . ess::$s['relative_path'] . '/auksjoner?a_id=' . $this->id . '">' . htmlspecialchars($this->data['a_title']) . '</a>.'); // gi penger til den som la ut auksjonen if ($this->data['a_up_id']) { \Kofradia\DB::get()->exec("\n\t\t\t\t\tUPDATE users_players\n\t\t\t\t\tSET up_cash = up_cash + {$bud['ab_bid']}, up_auksjoner_total_in = up_auksjoner_total_in = {$bud['ab_bid']}\n\t\t\t\t\tWHERE up_id = {$this->data['a_up_id']}"); } // oppdater statistikk til spilleren som vant budet \Kofradia\DB::get()->exec("\n\t\t\t\tUPDATE users_players\n\t\t\t\tSET up_auksjoner_total_out = up_auksjoner_total_out = {$bud['ab_bid']}\n\t\t\t\tWHERE up_id = {$bud['ab_up_id']}"); // hent alle budene som skal settes inaktive $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT ab_id, ab_bid, ab_up_id\n\t\t\t\tFROM auksjoner_bud\n\t\t\t\tWHERE ab_a_id = {$this->id} AND ab_active != 0 AND ab_id != {$bud['ab_id']}"); while ($row = $result->fetch()) { self::set_bud_inactive($row, $this); } // behandle trigger $up->trigger("auksjon_won", array("auksjon" => $this, "bud" => $bud)); } // behandle trigger if ($this->data['a_up_id']) { $up = player::get($this->data['a_up_id']); if ($up) { $up->trigger("auksjon_complete", array("auksjon" => $this, "winner_bud" => $bud)); } } // oppdater cache self::update_cache(); }
/** * Sjekk for tilganger */ protected function check_access() { // skrivetilgang? $this->access_write = $this->data['ffna_up_id'] == login::$user->player->id || access::has("mod"); // lesetilgang? $this->access_read = $this->access_write || $this->data['ffna_published'] != 0 && $this->ff->access(2); }