if ($i++ == $limit) { ess::$b->page->add_js_domready(' document.id("prestasjoner_vis_alle").addEvent("click", function(event) { this.getParent("ul").getElements("li").setStyle("display", ""); this.getParent("li").setStyle("display", "none"); event.stop(); });'); $limit_active = true; echo ' <li>Kun siste oppnådd vist - <a href="#" id="prestasjoner_vis_alle">vis alle</a></li>'; } $prefix = ''; $last = ess::$b->date->get($rep_all[$a->id]['max_upa_time'])->format(date::FORMAT_NOTIME); if ($a->data['ac_recurring']) { $prefix = fwords("", "%d x ", $rep_all[$a->id]['count_upa_id']); } echo ' <li' . ($limit_active ? ' style="display: none"' : '') . '>' . $prefix . '«' . htmlspecialchars($a->data['ac_name']) . '» (' . $last . ')</li>'; } echo ' </ul>'; } else { echo ' <p>Spilleren har ikke oppnådd noen prestasjoner.</p>'; } echo ' </div>'; echo ' </div> <div class="clear"></div>
/** * Kaste ut et medlem */ protected function kick() { if (!isset($_POST['up_id']) && !isset($_POST['up_ids'])) { ess::$b->page->add_message("Du må merke en eller flere spillere.", "error"); redirect::handle(); } // kontroller medlemmene $up_ids = isset($_POST['up_ids']) ? array_map("intval", explode(",", $_POST['up_ids'])) : array_map("intval", (array) $_POST['up_id']); $priority_list = array(); $members = array(); foreach ($up_ids as $up_id) { // er ikke medlem? if (!isset($this->ff->members['members'][$up_id])) { ess::$b->page->add_message('Spilleren <user id="' . $up_id . '" /> er ikke medlem av ' . $this->ff->type['refobj'] . '.', "error"); redirect::handle(); } $member = $this->ff->members['members'][$up_id]; // kan ikke kaste ut seg selv if ($member->id == login::$user->player->id && !$this->ff->mod) { ess::$b->page->add_message('Du kan ikke kaste ut deg selv. Forlat ' . $this->ff->type['refobj'] . ' via <a href="panel?ff_id=' . $this->ff->id . '">panelet</a>.'); redirect::handle(); } // eier kan ikke kastes ut if ($member->data['ffm_priority'] == 1 && !$this->ff->mod) { ess::$b->page->add_message(ucfirst($this->ff->type['priority'][1]) . " kan ikke kastes ut av {$this->ff->type['refobj']}."); redirect::handle(); } // har høyere prioritering? if ($member->data['ffm_priority'] <= $this->ff->uinfo->data['ffm_priority'] && !$this->ff->mod) { ess::$b->page->add_message('Du kan ikke kaste ut <user id="' . $member->id . '" /> som har høyere eller samme posisjon som deg.', "error"); redirect::handle(); } $members[] = $member; $priority_list[] = $member->data['ffm_priority']; } // ingen medlemmer? if (count($members) == 0) { ess::$b->page->add_message("Du må merke en eller flere spillere.", "error"); redirect::handle(); } // godkjent? if (isset($_POST['confirm']) && validate_sid()) { // sorter slik at medlemmene med lavest posisjon kommer først array_multisort($priority_list, SORT_DESC, $members); // kast ut medlemmene foreach ($members as $member) { $member->kick(postval("note")); } // infomelding if (count($members) > 0) { $list = array(); foreach ($members as $member) { $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>'; } ess::$b->page->add_message('Du kastet ut følgende spillere fra ' . $this->ff->type['refobj'] . ':<ul>' . implode("", $list) . '</ul>'); } else { $member = reset($members); ess::$b->page->add_message('Du kastet ut <user id="' . $member->id . '" /> fra sin posisjon som ' . $member->get_priority_name() . ($member->data['ffm_parent_up_id'] ? ' underordnet <user id="' . $member->data['ffm_parent_up_id'] . '" />' : '') . '.'); } redirect::handle(); } // sorter slik at medlemmene med høyest posisjon kommer først array_multisort($priority_list, $members); // vis skjema echo ' <form action="" method="post"> <input type="hidden" name="kick" value="1" /> <input type="hidden" name="up_ids" value="' . implode(",", $up_ids) . '" /> <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <div class="section" style="width: ' . (count($members) == 1 ? '230' : '400') . 'px"> <h1>Kast ut spiller</h1> <p class="h_right"><a href="medlemmer?ff_id=' . $this->ff->id . '">Tilbake</a></p>'; if (count($members) == 1) { $member = reset($members); echo ' <p>Du er i ferd med å kaste ut <user id="' . $member->id . '" /> fra ' . $this->ff->type['refobj'] . '.</p> <dl class="dd_right"> <dt>Posisjon</dt> <dd>' . ucfirst($member->get_priority_name()) . ($member->data['ffm_parent_up_id'] ? ' underordnet <user id="' . $member->data['ffm_parent_up_id'] . '" />' : '') . '</dd> <dt>Ble medlem</dt> <dd>' . ess::$b->date->get($member->data['ffm_date_join'])->format() . '</dd> <dt>Sist pålogget</dt> <dd>' . ess::$b->date->get($member->data['up_last_online'])->format() . '</dd> </dl>'; } else { echo ' <p>Du er i ferd med å kaste ut følgende spillere fra ' . $this->ff->type['refobj'] . ':</p> <table class="table"> <thead> <tr> <th>Spiller</th> <th>Posisjon</th> <th>Ble medlem</th> <th>Sist pålogget</th> </tr> </thead> <tbody>'; $i = 0; foreach ($members as $member) { echo ' <tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '> <td><user id="' . $member->id . '" /></td> <td>' . ucfirst($member->get_priority_name()) . ($member->data['ffm_parent_up_id'] ? ' underordnet <user id="' . $member->data['ffm_parent_up_id'] . '" />' : '') . '</td> <td class="nowrap">' . ess::$b->date->get($member->data['ffm_date_join'])->format() . '</td> <td class="nowrap">' . ess::$b->date->get($member->data['up_last_online'])->format() . '</td> </tr>'; } echo ' </tbody> </table>'; } echo ' <p>Begrunnelse: <i>(valgfritt)</i></p> <textarea name="note" rows="3" cols="5" style="width: 90%">' . htmlspecialchars(postval("note")) . '</textarea> <p>Begrunnelsen vil bli gitt til spilleren og lagt til i loggen. Merk at ' . fwords("spilleren", "spillerene", count($members)) . ' normalt vil være tilknyttet statistikken for ' . $this->ff->type['refobj'] . ' i 12 timer etter utkastelse.</p>'; // kontroller for underordnede spillere if ($this->ff->type['parent']) { $subs = array(); $pri3_count = 0; foreach ($members as $member) { if ($member->data['ffm_priority'] == 3) { $pri3_count++; } if ($member->data['ffm_priority'] == 3 && isset($this->ff->members['members_parent'][$member->id])) { foreach ($this->ff->members['members_parent'][$member->id] as $member_sub) { // hopp over om det er en av de som skal kastes ut if (in_array($member_sub->id, $up_ids)) { continue; } $subs[] = '<li><user id="' . $member_sub->id . '" /></li>'; } } } if (count($subs) > 0) { // er det noen pri3 etter alle blir kastet ut? $pri3 = count($this->ff->members['members_priority'][3]) - $pri3_count > 0; if (count($members) == 1) { echo ' <p>Medlemmet har følgende medlemmer underordnet seg:</p>'; } else { echo ' <p>Følgende medlemmer er underordnet av en av spillerene du har valgt:</p>'; } echo ' <ul>' . implode("", $subs) . '</ul>' . ($pri3 ? ' <p>Underordnede medlemmer vil bli flyttet til tilfeldige spillere med posisjon ' . $this->ff->type['priority'][3] . '.</p>' : ' <p>Spilleren med posisjonen ' . $this->ff->type['priority'][4] . ' som har vært medlem lengst bli utvalgt til ' . $this->ff->type['priority'][3] . '.') . '</p>'; } } echo ' <p class="c"> ' . show_sbutton("Kast ut", 'name="confirm"') . ' <a href="medlemmer?ff_id=' . $this->ff->id . '">Avbryt</a> </p> </div> </form>'; $this->ff->load_page(); }
/** * Reset password for the user */ protected function handleResetPassword() { $user = $this->getUser(); // update user DB::get()->prepare("UPDATE users SET u_pass = NULL, u_pass_change = NULL WHERE u_id = ?")->execute(array($user->id)); $reseted = $user->data['u_pass'] != null; $user->data['u_pass'] = null; $user->data['u_pass_change'] = null; // log out any sessions $q = DB::get()->prepare("\n\t\t\tUPDATE sessions\n\t\t\tSET ses_active = 0, ses_logout_time = ?\n\t\t\tWHERE ses_u_id = ? AND ses_active = 1 AND ses_id != ?"); $logged_out = $q->execute(array(time(), \login::$user->id, \login::$info['ses_id'])); $msg = $reseted ? 'Ditt passord har nå blitt nullstilt, og du kan nå opprette et nytt passord.' : 'Ditt passord var allerede nullstilt.'; if ($logged_out > 0) { $msg .= ' ' . fwords("%d økt", "%d økter", $logged_out) . ' ble logget ut automatisk.'; } $this->messages[] = $msg; $this->log("Logget inn; passord nullstilt"); $this->url_override = "/lock?f=pass"; }
/** Formatere hendelser i loggen */ public function format_log($id, $time, $action, $data, $extra) { global $__server; // sett opp data switch (self::$log_id[$action]) { // Forum: Ny forumtråd case "forum_topic_add": $info = explode(":", $data); $data = '<user id="' . $info[0] . '" /> opprettet <a href="' . $__server['relative_path'] . '/forum/topic?id=' . $info[1] . '">' . htmlspecialchars(urldecode($info[2])) . '</a> i forumet.'; break; // Forum: Forumtråd slettet // Forum: Forumtråd slettet case "forum_topic_delete": $info = explode(":", $data); $title = $this->mod ? '<a href="' . $__server['relative_path'] . '/forum/topic?id=' . $info[1] . '">' . htmlspecialchars(urldecode($info[2])) . '</a>' : htmlspecialchars(urldecode($info[2])); $data = '<user id="' . $info[0] . '" /> slettet ' . $title . ' fra forumet.'; break; // Forum: Forumtråd gjenopprettet // Forum: Forumtråd gjenopprettet case "forum_topic_restore": $info = explode(":", $data); $data = '<user id="' . $info[0] . '" /> gjenopprettet <a href="' . $__server['relative_path'] . '/forum/topic?id=' . $info[1] . '">' . htmlspecialchars(urldecode($info[2])) . '</a> i forumet.'; break; // Forum: Forumtråd redigert // Forum: Forumtråd redigert case "forum_topic_edit": $info = explode(":", $data); $data = '<user id="' . $info[0] . '" /> redigerte <a href="' . $__server['relative_path'] . '/forum/topic?id=' . $info[1] . '">' . htmlspecialchars(urldecode($info[2])) . '</a> i forumet.'; break; // Medlem: Inviter spiller // Medlem: Inviter spiller case "member_invite": $info = explode(":", $data); $data = '<user id="' . $info[0] . '" /> inviterte <user id="' . $info[1] . '" /> til ' . $this->refstring . ' som <b>' . htmlspecialchars(urldecode($info[2])) . (!empty($info[3]) ? ' underordnet <user id="' . $info[3] . '" />' : '') . '</b>.'; break; // Medlem: Godta invitasjon // Medlem: Godta invitasjon case "member_invite_accept": $data = '<user id="' . $data . '" /> godtok invitasjonen og er nå medlem av ' . $this->refstring . '.'; break; // Medlem: Avslå invitasjon // Medlem: Avslå invitasjon case "member_invite_decline": $data = '<user id="' . $data . '" /> avslo invitasjonen til ' . $this->refstring . '.'; break; // Medlem: Tilbaketrukket invitasjon // Medlem: Tilbaketrukket invitasjon case "member_invite_pullback": $info = explode(":", $data); if ($info[0]) { $data = '<user id="' . $info[0] . '" /> trakk tilbake invitasjonen til <user id="' . $info[1] . '" />.'; } else { $data = 'Invitasjonen til <user id="' . $info[1] . '" /> ble trukket tilbake.'; } break; // Medlem: Foreslå medlem // Medlem: Foreslå medlem case "member_suggest": $info = explode(":", $data); $data = '<user id="' . $info[0] . '" /> foreslo <user id="' . $info[1] . '" /> som medlem av ' . $this->refstring . ' som <b>' . htmlspecialchars(urldecode($info[2])) . '</b>.'; break; // Medlem: Godta forslag // Medlem: Godta forslag case "member_suggest_accept": $info = explode(":", $data); $data = '<user id="' . $info[0] . '" /> godtok forslaget' . ($info[3] ? ' til <user id="' . $info[3] . '" />' : '') . ' om å invitere <user id="' . $info[1] . '" /> til ' . $this->refstring . ' som <b>' . htmlspecialchars(urldecode($info[2])) . '</b>. <user id="' . $info[1] . '" /> er nå invitert.'; break; // Medlem: Avslå forslag // Medlem: Avslå forslag case "member_suggest_decline": $info = explode(":", $data); if ($info[0]) { $data = '<user id="' . $info[0] . '" /> avslo forslaget om å invitere <user id="' . $info[1] . '" />.'; } else { $data = 'Forslaget om å invitere <user id="' . $info[1] . '" /> ble avslått.'; } break; // Medlem: Forlat // Medlem: Forlat case "member_leave": $info = explode(":", $data); $data = '<user id="' . $info[0] . '" /> forlot ' . $this->refstring . (isset($info[1]) ? ' fra sin posisjon som <b>' . htmlspecialchars(urldecode($info[1])) . '</b>' : '') . '.'; break; // Medlem: Drept/for lav helse // Medlem: Drept/for lav helse case "member_deactivated": $info = explode(":", $data); $data = '<user id="' . $info[0] . '" /> fikk for lite helse til å kunne opprettholde sitt medlemskap.' . (isset($info[1]) ? ' Hadde posisjonen <b>' . htmlspecialchars(urldecode($info[1])) . '</b>' : '') . '.'; break; // Medlem: Sparket // Medlem: Sparket case "member_kicked": $info = explode(":", $data); $note = $note = empty($info[3]) ? '' : ' Begrunnelse: ' . game::bb_to_html(urldecode($info[3])); $data = '<user id="' . $info[0] . '" /> sparket <user id="' . $info[1] . '" /> fra ' . $this->refstring . ' og sin posisjon som <b>' . htmlspecialchars(urldecode($info[2])) . '</b>.' . $note; break; // Medlem: Posisjon // Medlem: Posisjon case "member_priority": $info = explode(":", $data); if ($info[0]) { $data = '<user id="' . $info[0] . '" /> endret posisjonen til <user id="' . $info[1] . '" /> fra <b>' . htmlspecialchars(urldecode($info[2])) . '</b>' . (!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 $data = 'Posisjonen til <user id="' . $info[1] . '" /> ble endret fra <b>' . htmlspecialchars(urldecode($info[2])) . '</b>' . (!empty($info[4]) ? ' underordnet <user id="' . $info[4] . '" />' : '') . ' til <b>' . htmlspecialchars(urldecode($info[3])) . '</b>' . (!empty($info[5]) ? ' underordnet <user id="' . $info[5] . '" />' : '') . '.'; } break; // Medlem Overordnet capo // Medlem Overordnet capo case "member_parent": $info = explode(":", $data); if ($info[0]) { $data = '<user id="' . $info[0] . '" /> endret overordnet til <user id="' . $info[1] . '" /> fra <user id="' . $info[2] . '" /> til <user id="' . $info[3] . '" />.'; } else { // anonym $data = 'Overordnet til <user id="' . $info[1] . '" /> ble endret fra <user id="' . $info[2] . '" /> til <user id="' . $info[3] . '" />.'; } break; // Sett en spiller til en bestemt posisjon // Sett en spiller til en bestemt posisjon case "member_set_priority": // syntax: up_id:priority_name:parent_up_id $info = explode(":", $data); $data = '<user id="' . $info[0] . '" /> ble satt som <b>' . htmlspecialchars(urldecode($info[1])) . '</b>' . (!empty($info[2]) ? ' underordnet <user id="' . $info[2] . '" />' : '') . '.'; break; // Ny logo // Ny logo case "logo": if (empty($data)) { $data = "Logoen ble fjernet."; } else { $info = explode(":", $data); $data = isset($info[1]) && $info[1] == "removed" ? '<user id="' . $info[0] . '" /> fjernet logoen' : '<user id="' . $info[0] . '" /> lastet opp' . (!empty($extra) ? ' ny logo' : ' en logo'); $data .= ' for ' . $this->type['refobj'] . '.'; } if (!empty($extra)) { $data .= ' Gammel logo: <img src="' . ess::$s['rpath'] . '/ff/_logo?ff_id=' . $this->id . '&log_id=' . $id . '" alt="Gammel logo" />'; } break; // Endre beskrivelse // Endre beskrivelse case "description": $data = '<user id="' . $data . '" /> redigerte beskrivelsen for ' . $this->refstring . '.'; break; // Salg // Salg case "sell": $info = explode(":", $data); switch ($info[0]) { // starter salget: // {TYPE=init}:BOSS:UBOSS:FEE:AMOUNT case "init": $data = '<user id="' . $info[1] . '" /> åpnet salg av ' . $this->refstring . ' til <user id="' . $info[2] . '" /> for ' . game::format_cash($info[4]) . '.'; break; // avbryter salget (trekker det tilbake) // {TYPE=abort}:BOSS:UBOSS:FEE:AMOUNT // avbryter salget (trekker det tilbake) // {TYPE=abort}:BOSS:UBOSS:FEE:AMOUNT case "abort": $data = '<user id="' . $info[1] . '" /> trakk tilbake salg av ' . $this->refstring . ' til <user id="' . $info[2] . '" /> for ' . game::format_cash($info[4]) . '.'; break; // godtar kjøpet (mottakeren) // {TYPE=approve}:BOSS:UBOSS:FEE:AMOUNT // godtar kjøpet (mottakeren) // {TYPE=approve}:BOSS:UBOSS:FEE:AMOUNT case "approve": $data = '<user id="' . $info[2] . '" /> godtok salget av ' . $this->refstring . ' og har nå overtatt som ' . htmlspecialchars($this->type['priority'][1]) . '. <user id="' . $info[1] . '" /> har blitt satt som ' . htmlspecialchars($this->type['priority'][2]) . '. Gebyr: ' . game::format_cash($info[3]) . '. Salgsbeløp: ' . game::format_cash($info[4]) . '.'; break; // avslår kjøpet (mottakeren) // {TYPE=reject}:UBOSS:FEE:AMOUNT // avslår kjøpet (mottakeren) // {TYPE=reject}:UBOSS:FEE:AMOUNT case "reject": $data = '<user id="' . $info[2] . '" /> avslo salget av ' . $this->refstring . ' for ' . game::format_cash($info[4]) . '.'; break; } break; // Nytt navn // Nytt navn case "name": // syntax: gammelt navn:nytt navn:spiller som sendte søknad:innvilget av // syntax (abstrakt): ff_name:ff_name:up_id:up_id $info = explode(":", $data); $data = 'Navnet på ' . $this->refstring . ' ble endret fra ' . htmlspecialchars(urldecode($info[0])) . ' til <b>' . htmlspecialchars(urldecode($info[1])) . '</b>.'; break; case "bank_overforing_tap_change": $info = explode(":", $data); $data = 'Overføringsgebyret endret seg med ' . game::format_number($info[1] * 100, 2) . ' % til <b>' . game::format_number(($info[0] + $info[1]) * 100, 2) . ' %</b>.'; break; case "article_edited": // data: fna_id,up_id,fna_up_id,fna_title_org,fna_title_new,fna_text_old,fna_text_new $info = array_map("urldecode", explode(":", $data)); $data = '<user id="' . $info[1] . '" /> redigerte <a href="' . $__server['relative_path'] . '/ff/avis?ff_id=' . $this->id . '&a&ffna=' . $info[0] . '">artikkelen</a> til <user id="' . $info[2] . '" />.'; break; // kastet ut spiller fra bomberommet // kastet ut spiller fra bomberommet case "bomberom_kick": // syntax: up_id(som utfører handlingen):up_id(som ble kastet ut):up_brom_expire(når vi egentlig skulle gå ut av bomberommet) $info = explode(":", $data); $data = '<user id="' . $info[0] . '" /> kastet ut <user id="' . $info[1] . '" /> fra bomberommet, som egentlig skulle sittet til ' . ess::$b->date->get($info[2])->format() . '.'; break; // oppløst // oppløst case "dissolve": // syntax: up_id(som utfører handlingen):up_id(som ble kastet ut):up_brom_expire(når vi egentlig skulle gå ut av bomberommet) $info = explode(":", $data); $data = ucfirst($this->type['refobj']) . ' ble oppløst.'; break; // kuler inn // kuler inn case "bullets_in": // syntax: up_id:num $info = explode(":", $data); $data = '<user id="' . $info[0] . '" /> satt inn ' . fwords("%d kule", "%d kuler", $info[1]) . ' i kulelageret.'; break; // kuler ut // kuler ut case "bullets_out": // syntax: up_id:num[:action_up] $info = explode(":", $data); if (isset($info[2])) { $data = '<user id="' . $info[2] . '" /> tok ut ' . fwords("%d kule", "%d kuler", $info[1]) . ' fra kulelageret og gav de til <user id="' . $info[0] . '" />.'; } else { $data = '<user id="' . $info[0] . '" /> tok ut ' . fwords("%d kule", "%d kuler", $info[1]) . ' fra kulelageret.'; } break; // informasjon // informasjon case "info": // behold data urørt break; // Dummy // Dummy case "dummy": $data = $time; break; default: $data = htmlspecialchars($data); } return $data; }
/** * 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'])); } }
/** * Nodesøk */ protected function node_search($cid, $dest, $search) { $search = utf8_decode($search); // hent all informasjon $result = \Kofradia\DB::get()->query("SELECT node_id, node_parent_node_id, node_title, node_type, node_params, node_show_menu, node_expand_menu, node_enabled, node_priority, node_change FROM nodes"); $nodes = array(); while ($row = $result->fetch()) { $row['params'] = new params($row['node_params']); $row['enheter'] = array(); $row['plain'] = ""; $nodes[$row['node_id']] = $row; } if (count($nodes) == 0) { $this->msg($cid, $dest, "Ingen siden eksisterer."); return; } // sett opp søkekriteriene $search_list = search_query($search); $search_list = $search_list[1]; $search_list2 = $search_list; // for delvise treff foreach ($search_list as &$q) { $q = '/(\\P{L}|^)' . preg_replace(array('/([\\/\\\\\\[\\]()$.+?|{}])/', '/\\*\\*+/', '/\\*/'), array('\\\\$1', '*', '\\S*'), $q) . '(\\P{L}|$)/i'; } // sett opp søkeliste hvor vi søker med * på slutten av ordene foreach ($search_list2 as &$q) { $q = '/' . preg_replace(array('/([\\/\\\\\\[\\]()$.+?|{}])/', '/\\*\\*+/', '/\\*/'), array('\\\\$1', '*', '\\S*'), $q) . '/i'; } // hent alle enhetene $result = \Kofradia\DB::get()->query("SELECT ni_id, ni_node_id, ni_type, nir_content, nir_params, nir_time FROM nodes_items LEFT JOIN nodes_items_rev ON nir_id = ni_nir_id WHERE ni_enabled != 0 AND ni_deleted = 0 ORDER BY ni_priority"); while ($row = $result->fetch()) { if (!isset($nodes[$row['ni_node_id']])) { continue; } $data = nodes::content_build($row); $nodes[$row['ni_node_id']]['enheter'][] = $data; // bygg opp plain tekst $plain = preg_replace("/<br[^\\/>]*\\/?>/", "\n", $data); $plain = preg_replace("/(<\\/?(h[1-6]|p)[^>]*>)/", "\n\\1", $plain); $plain = html_entity_decode(strip_tags($plain)); $plain = preg_replace("/(^ +| +\$|\\r)/m", "", $plain); #$plain = preg_replace("/(?<![!,.\\n ])\\n/", " ", $plain); $plain = preg_replace("/\\n/", " ", $plain); $plain = preg_replace("/ +/", " ", $plain); $plain = trim($plain); $nodes[$row['ni_node_id']]['plain'] .= $plain . " "; } // sett opp riktige referanser og lag tree $sub = array(); foreach (nodes::$nodes as $row) { if ($row['node_enabled'] != 0) { $sub[$row['node_parent_node_id']][] = $row['node_id']; } } $tree = new tree($sub); $data = $tree->generate(0, NULL, $nodes); // sett opp paths $paths = array(); $path = array(); $number = 1; foreach ($data as $row) { for (; $row['number'] <= $number; $number--) { // fjern fra path array_pop($path); } if ($row['number'] >= $number) { // legg til i path $path[] = $row['data']['node_title']; } $paths[$row['data']['node_id']] = $path; $number = $row['number']; } // sett opp søkeresultater $result = array(); $points = array(); $points2 = array(); foreach ($data as $row) { if ($row['data']['node_type'] != "container") { continue; } // utfør søk $found = true; $p = 0; $p2 = 0; foreach ($search_list as $key => $regex) { $ok = false; $matches = null; // søk i teksten if (preg_match_all($regex, $row['data']['plain'], $matches)) { $ok = true; $p += count($matches[0]); } if (preg_match_all($search_list2[$key], $row['data']['plain'], $matches)) { $ok = true; $p2 += count($matches[0]); } // søk i tittelen if (preg_match_all($regex, $row['data']['node_title'], $matches)) { $ok = true; $p += count($matches[0]); } if (preg_match_all($search_list2[$key], $row['data']['node_title'], $matches)) { $ok = true; $p2 += count($matches[0]); } if ($ok) { continue; } $found = false; break; } // fant? if ($found) { $result[] = $row; $points[] = $p; $points2[] = $p2; } } // vis søkeresultater if (count($result) == 0) { $this->msg($cid, $dest, "Ingen treff ble funnet."); } // sorter søkeresultatene array_multisort($points, SORT_DESC, SORT_NUMERIC, $points2, SORT_DESC, SORT_NUMERIC, $result); $this->msg($cid, $dest, count($result) . " treff ble funnet - " . ess::$s['path'] . '/node/search?q=' . urlencode($search)); $i = 0; foreach ($result as $key => $row) { if ($i++ == 3) { break; } $partial = $points2[$key] - $points[$key]; if ($row['data']['node_id'] == nodes::$default_node) { $url = ess::$s['path'] . '/node'; } else { $url = ess::$s['path'] . '/node/' . $row['data']['node_id']; } $m = array(); if ($points[$key] > 0) { $m[] = $points[$key] . ' treff'; } if ($partial > 0) { $m[] = fwords("%d delvis treff", "%d delvise treff", $partial); } $this->msg($cid, $dest, implode(", ", $m) . ": " . implode(" -> ", $paths[$row['data']['node_id']]) . " {$url}"); } }
/** * Endre garasjekapasitet */ protected function garasje_endre_show() { ess::$b->page->add_title("Endre kapasitet"); // 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? if (!$garasje) { 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']]; // finn ut antall biler i garasjen $result = \Kofradia\DB::get()->query("SELECT COUNT(*) FROM users_gta WHERE ug_up_id = {$this->gta->up->id} AND b_id = {$this->gta->up->data['up_b_id']}"); $ug_num = $result->fetchColumn(0); $limit = $this->gta->get_places_limit(); // valgt kapasitet? if (isset($_POST['places'])) { $price_place = (int) postval("price"); $places = (int) postval("places"); $places_old = (int) postval("placeso"); // 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); } elseif ($ff['price'] != $price_place && $places > $garasje['ugg_places']) { ess::$b->page->add_message("Utleieprisen for firmaet har forandret seg.", "error"); } elseif ($places_old != $garasje['ugg_places']) { ess::$b->page->add_message("Kapasiteten i garasjen har endret.", "error"); } elseif ($places == $garasje['ugg_places']) { ess::$b->page->add_message("Du må fylle inn en annen kapasitet enn hva den er i dag.", "error"); } elseif ($places < 1 || $places > $limit) { ess::$b->page->add_message("Ugyldig antall for antall plasser du ønsker å leie.", "error"); } elseif ($places < $ug_num) { ess::$b->page->add_message("Du kan ikke sette kapasiteten lavere enn antall biler som er i garasjen. Det er for øyeblikket " . fwords("%d bil", "%d biler", $ug_num) . " i garasjen.", "error"); } else { $change = $places - $garasje['ugg_places']; // beregn penger if ($change > 0) { $days_left = max(1, ceil(($garasje['ugg_time_next_rent'] - time()) / 86400)); $price = $change * $ff['price'] * $days_left / 7; } // bekreftet? if (isset($_POST['confirm'])) { // senkes? if ($change < 0) { // oppdater $a = \Kofradia\DB::get()->exec("UPDATE users_garage SET ugg_places = {$places} WHERE ugg_up_id = {$this->gta->up->id} AND ugg_b_id = {$this->gta->up->data['up_b_id']} AND ugg_places = {$garasje['ugg_places']}"); if ($a > 0) { ess::$b->page->add_message("Du nedjusterte kapasiteten i garasjen fra " . $garasje['ugg_places'] . " plasser til " . fwords("%d plass", "%d plasser", $places) . "."); redirect::handle("/gta/garasje", redirect::ROOT); } } else { // forsøk å trekk fra pengene $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 å leie så mange plasser hos dette firmaet.", "error"); } else { // oppdater antall plasser $a = \Kofradia\DB::get()->exec("UPDATE users_garage SET ugg_places = {$places}, 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_places = {$garasje['ugg_places']}"); if ($a == 0) { // kunne ikke oppdatere garasje; 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 oppjusterte kapasiteten i garasjen med ' . fwords("%d plass", "%d plasser", $change) . ' til ' . $places . ' plasser for ' . game::format_cash($price) . '.'); redirect::handle("/gta/garasje", redirect::ROOT); } } } } echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Endre kapasitet for garasje på ' . htmlspecialchars($this->gta->up->bydel['name']) . '<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <dl class="dd_right"> <dt>Utleiefirma</dt> <dd><a href="&rpath;/ff/?ff_id=' . $ff['ff_id'] . '">' . htmlspecialchars($ff['ff_name']) . '</a></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="' . $ff['price'] . '" /> <input type="hidden" name="placeso" value="' . $garasje['ugg_places'] . '" /> <input type="hidden" name="places" value="' . $places . '" /> <input type="hidden" name="b_id" value="' . $this->gta->up->data['up_b_id'] . '" /> <dl class="dd_right"> <dt>Endring i kapasitet</dt> <dd>Fra ' . game::format_num($garasje['ugg_places']) . ' til ' . game::format_num($places) . '</dd>' . ($change > 0 ? ' <dt>Kostnad for endring</dt> <dd>' . game::format_cash($price) . '</dd>' : '') . ' </dl> <p class="c">' . show_sbutton("Utfør endringer", 'name="confirm"') . ' <a href="&rpath;/gta/garasje/endre">Tilbake</a></p> </form> </div> </div>'; ess::$b->page->load(); } } echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Endre kapasitet 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/detaljer">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>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="' . $ff['price'] . '" /> <input type="hidden" name="placeso" value="' . $garasje['ugg_places'] . '" /> <input type="hidden" name="b_id" value="' . $this->gta->up->data['up_b_id'] . '" /> <dl class="dd_right"> <dt>Nåværende kapasitet</dt> <dd>' . game::format_num($garasje['ugg_places']) . '</dd> <dt>Maksimal kapasitet</dt> <dd>' . game::format_num($limit) . '</dd> <dt>Ønsket kapasitet</dt> <dd><input type="text" class="styled w40" name="places" id="gta_places" value="' . game::format_num(intval(postval("places", $garasje['ugg_places']))) . '" /></dd> </dl> <p class="c">' . show_sbutton("Fortsett") . '</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>.</p> </div> </div>'; }
/** * 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; }
/** * Vis oversikt over de forskjellige kategoriene vi kan velge mellom */ protected function show_types() { // hent antall aktive auksjoner i de ulike typene $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT a_type, COUNT(a_id) num_a\n\t\t\tFROM auksjoner\n\t\t\tWHERE a_active != 0 AND a_completed = 0 AND a_start < " . time() . " AND a_end >= " . time() . "\n\t\t\tGROUP BY a_type"); $num = array(); while ($row = $result->fetch()) { $num[$row['a_type']] = $row['num_a']; } echo ' <div class="bg1_c small"> <h1 class="bg1">Auksjoner<span class="left"></span><span class="right"></span></h1> <div class="bg1">'; foreach (auksjon_type::$types as $type_id => $type) { $n = isset($num[$type_id]) ? $num[$type_id] : 0; echo ' <p class="auksjonertype"> <a href="?t=' . $type_id . '"> <img src="' . $type['img'] . '" alt="" /> ' . htmlspecialchars($type['title']) . ' <span class="info">(' . fwords("<b>%d</b> aktiv auksjon", "<b>%d</b> aktive auksjoner", $n) . ')</span> </a> </p>'; } echo ' <p class="c"><a href="node/9">Informasjon om auksjoner</a></p> </div> </div>'; // oppdater cache for auksjoner auksjon::update_cache(); }
/** * 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(); } }
/** * Utfør sjekk */ protected function check() { if (!$this->form->validateHashOrAlert()) { return; } // ingen merket? if (!isset($_POST['bilde'])) { ess::$b->page->add_message("Du må markere noen bilder.", "error"); } elseif (!is_array($_POST['bilde'])) { putlog("ABUSE", "%bUGYLDIG INNTASTING I ANTI-BOT:%b _POST bilde var ikke array: {$_POST['bilde']}"); ess::$b->page->add_message("Du må markere noen bilder.", "error"); } elseif (count($_POST['bilde']) != $this->images_valid) { ess::$b->page->add_message("Du må markere " . fwords("%d bilde", "%d bilder", $this->images_valid) . ". Du markerte " . fwords("%d bilde", "%d bilder", count($_POST['bilde'])) . "."); } else { // sjekk om det er korrekt inntastet $keys = array_keys($_POST['bilde']); $valid = 0; foreach ($keys as $key) { if (isset($this->images[$key]) && $this->images[$key]['valid']) { $valid++; } } // feil bilder? if ($valid != $this->images_valid) { ess::$b->page->add_message("Du merket av feil bilder.", "error"); // lagre logg $this->antibot->update_status("failed", $valid); // oppdater tid $this->antibot->update_time(); } else { $this->antibot->valid(); $this->redirect(); } } // send til testen redirect::handle(); }
/** * Utfør et søk */ protected static function search_handle($search_list, $search_list2, $nodes) { // hent alle enhetene $result = \Kofradia\DB::get()->query("SELECT ni_id, ni_node_id, ni_type, nir_content, nir_params, nir_time FROM nodes_items LEFT JOIN nodes_items_rev ON nir_id = ni_nir_id WHERE ni_enabled != 0 AND ni_deleted = 0 ORDER BY ni_priority"); while ($row = $result->fetch()) { if (!isset($nodes[$row['ni_node_id']])) { continue; } $data = nodes::content_build($row); $nodes[$row['ni_node_id']]['enheter'][] = $data; // bygg opp plain tekst $plain = preg_replace("/<br[^\\/>]*\\/?>/u", "\n", $data); $plain = preg_replace("/(<\\/?(h[1-6]|p)[^>]*>)/u", "\n\\1", $plain); $plain = html_entity_decode(strip_tags($plain)); $plain = preg_replace("/(^ +| +\$|\\r)/mu", "", $plain); #$plain = preg_replace("/(?<![!,.\\n ])\\n/u", " ", $plain); $plain = preg_replace("/\\n/u", " ", $plain); $plain = preg_replace("/ +/u", " ", $plain); $plain = trim($plain); $nodes[$row['ni_node_id']]['plain'] .= $plain . " "; } // sett opp riktige referanser og lag tree $sub = array(); foreach (nodes::$nodes as $row) { if ($row['node_enabled'] != 0) { $sub[$row['node_parent_node_id']][] = $row['node_id']; } } $tree = new tree($sub); $data = $tree->generate(0, NULL, $nodes); // sett opp paths $paths = array(); $path = array(); $number = 1; foreach ($data as $row) { for (; $row['number'] <= $number; $number--) { // fjern fra path array_pop($path); } if ($row['number'] >= $number) { // legg til i path switch ($row['data']['node_type']) { case "url_absolute": $path[] = '<a href="' . htmlspecialchars($row['data']['params']->get("url")) . '"' . ($row['data']['params']->get("new_window") ? ' target="_blank"' : '') . '>' . htmlspecialchars($row['data']['node_title']) . '</a>'; break; case "url_relative": $path[] = '<a href="' . ess::$s['relative_path'] . htmlspecialchars($row['data']['params']->get("url")) . '"' . ($row['data']['params']->get("new_window") ? ' target="_blank"' : '') . '>' . htmlspecialchars($row['data']['node_title']) . '</a>'; break; default: if ($row['data']['node_id'] == nodes::$default_node) { $url = ess::$s['relative_path'] . '/node'; } else { $url = ess::$s['relative_path'] . '/node/' . $row['data']['node_id']; } $path[] = '<a href="' . htmlspecialchars($url) . '">' . htmlspecialchars($row['data']['node_title']) . '</a>'; } } $paths[$row['data']['node_id']] = $path; $number = $row['number']; } // sett opp søkeresultater $result = array(); $points = array(); $points2 = array(); foreach ($data as $row) { if ($row['data']['node_type'] != "container") { continue; } // utfør søk $found = true; $p = 0; $p2 = 0; foreach ($search_list as $key => $regex) { $ok = false; $matches = null; // søk i teksten if (preg_match_all($regex, $row['data']['plain'], $matches)) { $ok = true; $p += count($matches[0]); } if (preg_match_all($search_list2[$key], $row['data']['plain'], $matches)) { $ok = true; $p2 += count($matches[0]); } // søk i tittelen if (preg_match_all($regex, $row['data']['node_title'], $matches)) { $ok = true; $p += count($matches[0]); } if (preg_match_all($search_list2[$key], $row['data']['node_title'], $matches)) { $ok = true; $p2 += count($matches[0]); } if ($ok) { continue; } $found = false; break; } // fant? if ($found) { $result[] = $row; $points[] = $p; $points2[] = $p2; } } // vis søkeresultater if (count($result) == 0) { echo ' <p style="font-weight: bold">Ingen treff ble funnet.</p>'; } else { // sorter søkeresultatene array_multisort($points, SORT_DESC, SORT_NUMERIC, $points2, SORT_DESC, SORT_NUMERIC, $result); echo ' <h2>Søkeresultater</h2>'; ess::$b->page->add_css(' .nodes_search_node { position: relative; background-color: #222; padding: 0 10px; overflow: hidden; margin: 10px 0; } .nodes_search_path { } .nodes_search_points { position: absolute; right: 5px; bottom: 5px; color: #AAA; margin: 0; font-size: 11px; text-align: right; }'); redirect::store("/node/search", redirect::ROOT); $pagei = new pagei(pagei::TOTAL, count($result), pagei::PER_PAGE, 15, pagei::ACTIVE_GET, "side"); $result = array_slice($result, $pagei->start, $pagei->per_page, true); foreach ($result as $key => $row) { $partial = $points2[$key] - $points[$key]; if ($row['data']['node_id'] == nodes::$default_node) { $url = ess::$s['relative_path'] . '/node'; } else { $url = ess::$s['relative_path'] . '/node/' . $row['data']['node_id']; } echo ' <div class="nodes_search_node"> <h3><a href="' . $url . '">' . htmlspecialchars($row['data']['node_title']) . '</a></h3> <p class="nodes_search_path">' . implode(" » ", $paths[$row['data']['node_id']]) . '</p> <p class="nodes_search_points">' . ($points[$key] > 0 ? $points[$key] . ' treff' : '') . ($partial > 0 ? '<br />' . fwords("%d delvis treff", "%d delvise treff", $partial) : '') . '</p> </div>'; } if ($pagei->pages > 1) { echo ' <p class="c">' . $pagei->pagenumbers() . '</p>'; } } }
/** * Plassere spiller i bomberom */ protected function type_bomberom_set_handle($ledige_plasser, $ant_i_bomberommet) { $player = login::$user->player; $self = true; $familie = false; // plassere en annen spiller? if ($_POST['player'] != "own") { // ingen ledige plasser? if ($ledige_plasser == 0) { ess::$b->page->add_message("Det er ingen ledige plasser til å plassere andre spillere i bomberommet.", "error", null, "bomberom_set"); redirect::handle(); } // hent spillerinfo $player = player::get(postval("player")); if (!$player || !$player->active || $player->bomberom_check() || $player->fengsel_check()) { ess::$b->page->add_message("Kan ikke plassere spilleren i bomberom.", "error", null, "bomberom_set"); redirect::handle(); } // kan ikke sette i bomberom pga. rankforskjell? if (!login::$user->player->can_set_brom($player)) { ess::$b->page->add_message('Kan ikke plassere <user id="' . $player->id . '" /> i bomberom pga. spilleren sin rank er for langt unna din rank. Se mer i <a href="&rpath;node/39">hjelp</a>.', "error", null, "bomberom_set"); redirect::handle(); } // kontroller at vi er ansvarlig eller har tilgang pga. familie if ($player->data['up_brom_up_id'] != $this->up->id) { // sjekk at vi er i en felles familie $result = \Kofradia\DB::get()->query("\n\t\t\t\t\tSELECT ffm_ff_id\n\t\t\t\t\tFROM ff, ff_members, (\n\t\t\t\t\t\tSELECT ffm_ff_id ff_id FROM ff_members WHERE ffm_up_id = " . $this->up->id . " AND ffm_status = 1\n\t\t\t\t\t) ref\n\t\t\t\t\tWHERE ffm_ff_id = ref.ff_id AND ff.ff_id = ref.ff_id AND ff_type = 1 AND ffm_up_id = {$player->id} AND ffm_status = 1\n\t\t\t\t\tLIMIT 1"); // ikke i felles familie? if ($result->rowCount() == 0) { ess::$b->page->add_message('Du kan ikke plassere <user id="' . $player->id . '" /> i bomberom.', "error", null, "bomberom_set"); redirect::handle(); } $familie = true; } // kan vi ikke flytte spilleren? if ($familie && $player->data['up_b_id'] != $this->ff->data['br_b_id']) { ess::$b->page->add_message('<user id="' . $player->id . '" /> er ikke i samme bydel som bomberommet. Du har ikke mulighet til å flytte spilleren og kan dermed ikke plassere spilleren i dette bomberommt.', "error", null, "bomberom_set"); redirect::handle(); } $self = false; } // familie og vi har allerede plassert en spiller de siste 12 timene? if ($familie) { $familie_wait = max(0, $this->up->data['up_brom_ff_time'] + bomberom::FAMILIY_MEMBERS_WAIT - time()); if ($familie_wait > 0) { ess::$b->page->add_message("Du kan ikke plassere medlemmer av noen broderskap du er med i for øyeblikket, fordi du plasserte forrige spiller fra broderskap " . ess::$b->date->get($this->up->data['up_brom_ff_time'])->format() . ". Du må vente " . game::counter($familie_wait) . ".", "error", null, "bomberom_set"); redirect::handle(); } } // sett opp timepris $price_hour = bomberom::PRICE_HOUR + $ant_i_bomberommet * bomberom::PRICE_EACH_PLAYER; if (!$self) { $price_hour *= bomberom::PRICE_FACTOR_OTHER; } if ($self && $this->ff->access(true)) { $price_hour *= bomberom::PRICE_FACTOR_OWN; } // sjekke pris? $hours = (int) $_POST['hours']; if ($hours <= 0) { ess::$b->page->add_message("Du må skrive inn et gyldig antall timer.", "error", null, "bomberom_set"); } elseif ($hours > bomberom::MAX_HOURS) { ess::$b->page->add_message("Du kan maksimalt sette en spiller i bomberom i " . bomberom::MAX_HOURS . " timer.", "error", null, "bomberom_set"); } else { // bekreftet pris? if (isset($_POST['price']) && $_POST['price'] != "") { validate_sid(); // beregn pris $price = $hours * $price_hour; // har prisen endret seg? if (postval("price") != $price) { ess::$b->page->add_message("Prisen har endret seg og du må bekrefte på nytt.", "error", null, "bomberom_set"); } else { \Kofradia\DB::get()->beginTransaction(); // trekk fra pengene $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash - {$price} WHERE up_id = " . $this->up->id . " AND up_cash >= {$price}"); if ($a == 0) { ess::$b->page->add_message("Du har ikke så mye penger på hånda.", "error", null, "bomberom_set"); } else { $expire = time() + $hours * 3600; $b_id = !$self && !$familie ? ', up_b_id = ' . $this->ff->data['br_b_id'] : ''; // sett spilleren i bomberommet $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_brom_ff_id = {$this->ff->id}, up_brom_expire = {$expire}{$b_id} WHERE up_id = {$player->id} AND up_brom_expire = {$player->data['up_brom_expire']}"); // kunne ikke plassere spilleren i bomberommet? if ($a == 0) { ess::$b->page->add_message("Kunne ikke plassere spilleren i bomberommet.", "error", null, "bomberom_set"); \Kofradia\DB::get()->rollback(); } else { // send logg til spilleren if (!$self) { $player->add_log("bomberom_set", $this->up->id . ":" . urlencode($this->ff->data['ff_name']) . ":{$expire}", $this->ff->id); } // oppdatere tidspunkt for familie? if ($familie) { \Kofradia\DB::get()->exec("UPDATE users_players SET up_brom_ff_time = " . time() . " WHERE up_id = " . $this->up->id); } // gi penger til firmaet $this->ff->bank(ff::BANK_TJENT, round($price * ff::BOMBEROM_PERCENT)); putlog("DF", "BOMBEROM ANSVARLIG: " . $this->up->data['up_name'] . " satt%c3 " . ($self ? 'seg selv' : $player->data['up_name']) . "%c i bomberom i firmaet {$this->ff->data['ff_name']} for {$hours} timer " . $player->generate_minside_url()); ess::$b->page->add_message("Du plasserte " . ($self ? 'deg selv' : '<user id="' . $player->id . '" />') . " i bomberommet med en varighet på <b>{$hours}</b> " . fword("time", "timer", $hours) . ". Det kostet deg <b>" . game::format_cash($price) . "</b>.", null, null, "bomberom_set"); \Kofradia\DB::get()->commit(); redirect::handle("?ff_id={$this->ff->id}"); } } \Kofradia\DB::get()->commit(); } } echo ' ' . ess::$b->page->message_get("bomberom_set", true, true) . ' <p>Du er i ferd med å plassere ' . ($self ? 'deg selv' : $player->profile_link()) . ' i dette bomberommet.</p> <p>For tiden er det ' . fwords("%d spiller", "%d spillere", $ant_i_bomberommet) . ' i bomberommet og ' . fwords("%d ledig plass", "%d ledige plasser", $ledige_plasser) . '.' . ($ledige_plasser == 0 ? ' Du har alikevel plass i bomberommet som medlem av firmaet.' : '') . '</p> <dl class="dd_right"> <dt>Antall timer</dt> <dd>' . fwords("<b>%d</b> time", "<b>%d</b> timer", $hours) . '</dd> <dt>Total kostnad</dt> <dd>' . game::format_cash($hours * $price_hour) . '</dd> <dt>Varighet til</dt> <dd>' . ess::$b->date->get(time() + $hours * 3600)->format(date::FORMAT_SEC) . '</dd> </dl> <form action="" method="post">' . (!$self ? ' <input type="hidden" name="player" value="' . $player->id . '" />' : '') . ' <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <input type="hidden" name="hours" value="' . $hours . '" /> <input type="hidden" name="price" value="' . $hours * $price_hour . '" /> <p class="c">' . show_sbutton("Sett spilleren i bomberom") . '</p> </form> <form action="" method="post">' . (!$self ? ' <input type="hidden" name="player" value="' . $player->id . '" />' : '') . ' <p>Endre antall timer: <input type="text" name="hours" class="styled w30" value="' . $hours . '" /> ' . show_sbutton("Nytt prisoppsett") . '</p> </form> <p class="c"><a href="./?ff_id=' . $this->ff->id . '">Tilbake</a></p>'; } }
/** * 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>'; }
/** * 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; }
/** * Hent posisjon og info om forumstats for FF */ protected function get_ff_info($up_id) { if (!$this->ff) { // ikke FF, vis medlemskap i familier if (!isset($this->ff_rel[$up_id])) { return ''; } return $ret = ' <span class="f_stilling">[<span class="f_stilling_i">' . $this->ff_rel[$up_id] . '</span>]</span>'; } // ikke medlem lenger if (!isset($this->ff->members['members'][$up_id])) { return ''; } $member = $this->ff->members['members'][$up_id]; $ret = ' <span class="f_stilling">[<span class="f_stilling_i">' . ucfirst($member->get_priority_name()) . '</span>]</span>'; $ret .= ' <span class="f_stilling">[<span class="f_stilling_i">' . fwords("%d tråd", "%d tråder", $member->data['ffm_forum_topics']) . ', ' . $member->data['ffm_forum_replies'] . ' svar</span>]</span>'; return $ret; }
/** * Vis logger */ protected function show_logs() { $filters = ""; if ($this->filter_actions) { $filters .= " AND lc_lca_id IN (" . implode(",", $this->filter_actions) . ")"; } if ($this->filter_time_before) { $filters .= " AND lc_time <= {$this->filter_time_before}"; } if ($this->filter_time_after) { $filters .= " AND lc_time >= {$this->filter_time_after}"; } if ($this->filter_by_up) { $filters .= " AND lc_up_id" . (isset($_POST['by_invert']) ? ' NOT' : '') . " IN (" . $this->get_full_up_list($this->filter_by_up) . ")"; } if ($this->filter_a_up) { $filters .= " AND lc_a_up_id" . (isset($_POST['a_invert']) ? ' NOT' : '') . " IN (" . $this->get_full_up_list($this->filter_a_up) . ")"; } $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::ACTIVE_POST, "side", pagei::PER_PAGE, 100); $result = $pagei->query("\n\t\t\tSELECT lc_id, lc_up_id, lc_time, lc_lca_id, lc_a_up_id, lc_log\n\t\t\tFROM log_crew\n\t\t\tWHERE 1{$filters}\n\t\t\tORDER BY lc_time DESC"); $rows = array(); while ($row = $result->fetch()) { $rows[$row['lc_id']] = $row; } $data = crewlog::load_summary_data($rows); $logs = array(); foreach ($data as $row) { // hent sammendrag $summary = crewlog::make_summary($row); $day = ess::$b->date->get($row['lc_time'])->format(date::FORMAT_NOTIME); $logs[$day][] = '<p><span class="time"><a href="' . ess::$s['relative_path'] . '/crew/crewlogg?lc_id=' . $row['lc_id'] . '">' . ess::$b->date->get($row['lc_time'])->format("H:i") . '</a>:</span> ' . $summary . '</p>'; } ess::$b->page->add_css(' h1.crewlog { margin: 30px auto 20px } div.crewlog { margin: 0 30px } .crewlog .time { color: #888888; padding-right: 5px } '); if ($this->filters_active) { echo ' <p class="c">Fant ' . fwords("%d oppføring", "%d oppføringer", $pagei->total) . ' som passet til filteret.</p>'; } echo ' <p class="c">' . $pagei->pagenumbers($this->filters_active ? "input" : null) . '</p> <div class="crewlog">'; 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"> ' . implode(' ', $items) . ' </div> </div>'; } echo ' <p class="c">' . $pagei->pagenumbers($this->filters_active ? "input" : null) . '</p> </div>'; }
/** * 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); }
/** * Vis resultat fra angrep */ protected function attack_result_show($result, $bullets) { echo ' <div class="bg1_c xsmall"> <h1 class="bg1">' . ($result['drept'] ? 'Spiller drept' : 'Spiller skadet') . '<span class="left2"></span><span class="right2"></span></h1> <div class="bg1">'; // sett opp hva vi fikk $got = array(); $got[] = game::format_num($result['rankpoeng']) . ' poeng' . ($result['drept'] ? '' : ' fra spilleren'); if (isset($result['penger']) && $result['penger'] > 0) { $got[] = game::format_cash($result['penger']) . ' som offeret hadde på hånda'; } if (isset($result['penger_bank']) && $result['penger_bank'] > 0) { $got[] = game::format_cash($result['penger_bank']) . ' som deler av det offeret hadde i banken'; } if (isset($result['hitlist']) && $result['hitlist'] > 0) { $got[] = game::format_cash($result['hitlist']) . ' fra hitlista'; } $got = sentences_list($got); // vellykket? if ($result['drept']) { $place = bydeler::get_random_place(login::$user->player->bydel['id']); echo ' <p>Du fant ' . $this->up_offer->profile_link() . ' som hadde ranken ' . $this->up_offer->rank['name'] . ' og var plassert som nummer ' . $this->up_offer->data['upr_rank_pos'] . ' på ranklista' . ($place ? ' ved ' . $place : '') . ' og angrep spilleren med ' . $bullets . ' ' . fword("kule", "kuler", $bullets) . '.</p> <p>Spilleren døde av angrepet ditt. Du fikk ' . $got . '.' . ($result['penger'] == 0 ? ' Offeret hadde ingen penger på hånda.' : '') . '</p>'; } else { $place = bydeler::get_random_place(login::$user->player->bydel['id']); echo ' <p>Du fant ' . $this->up_offer->profile_link() . ' med ranken ' . $this->up_offer->rank['name'] . ' og plassering nummer ' . $this->up_offer->data['upr_rank_pos'] . ' på ranklista' . ($place ? ' ved ' . $place : '') . ' og angrep spilleren med ' . $bullets . ' ' . fword("kule", "kuler", $bullets) . '.</p> <p>Spilleren ble skadet av angrepet men overlevde. Du mottok ' . $got . '.</p>'; } // list opp vitner if (count($result['vitner']) == 0) { echo ' <p>Ingen spillere vitnet ' . ($result['drept'] ? 'drapet' : 'drapsforsøket') . '.</p>'; } else { // sett opp liste over navngitte spillere som oppdaget det $list = array(); $count_other = 0; foreach ($result['vitner'] as $vitne) { if ($vitne['visible']) { $list[] = $vitne['up']->profile_link(); } else { $count_other++; } } if ($count_other > 0) { $list[] = fwords("%d ukjent spiller", "%d ukjente spillere", $count_other); } echo ' <p>Du ble oppdaget av ' . sentences_list($list) . ' da ' . ($result['drept'] ? 'drapet' : 'drapsforsøket') . ' ble gjennomført.</p>'; } // fengselendring? if (isset($result['fengsel'])) { // kom i fengsel? if ($result['fengsel'] === false) { // fjern meldingen som allerede er lagt inn ess::$b->page->message_get("fengsel"); echo ' <p>Du kom i fengsel og slipper ut om ' . game::counter(login::$user->player->data['up_fengsel_time'] - time()) . '. Wanted nivået er nå på ' . game::format_num(login::$user->player->data['up_wanted_level'] / 10, 1) . ' %.</p>'; } else { echo ' <p>Wanted nivået økte med ' . game::format_num($result['fengsel'] / 10, 1) . ' %.</p>'; } } echo ' <p class="c"><a href="angrip">Tilbake</a></p> </div> </div>'; ess::$b->page->load(); }
/** * 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>'; }